Tri feuilles de plusieurs classeurs et compil

Fermé
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009 - 24 sept. 2009 à 15:02
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 5 oct. 2009 à 12:41
Bonjour,

J'ai un challenge vraiment énorme pour le boulot, et je me dois de le relever pour pouvoir m'attirer les faveurs de mes supérieurs. Je m'explique.

Je recois tous les mois 8 classeurs excel contenant des données de 2 fournisseurs (4 classeurs par fournisseur), et 2 classeurs décrivent des données mensuelles et 2 autres des données cumul à date, tout ca pour chaque fournisseurs.
Donc 8 classeurs=(2 fournisseurs x 2 types de données)+(2 fournisseurs x 2 types de données).
Ensuite, les 8 classeurs comportent plusieurs feuilles, dont le nom est le nom des pays d'ou proviennent les données. Il y a un nombre variable de pays dans les classeurs, donc de feuilles, mais elles prennent toute le nom d'un pays.

Ce que je cherche à faire, c'est d'automatiser la compilation de ces feuilles, selon plusieurs critères qui s'ajoutent. Le but est d'aller chercher, sans ouvrir le fichier (ou du moins de façon automatisée), dans chacun des classeur la feuille du pays concerné, de créer un nouveau classeur et de compiler à l'intérieur de ce nouveau classeur, toute les feuilles portant le même nom de pays. Sachant que je cherche aussi à faire une séparation de classeurs (créer 2 classeurs distincts pour les 2 fournisseurs).

J'aurai donc un classeur pour le fournisseur X, contenant les données mensuelles sur une feuille, et sur l'autre feuille, les données cumul à date. Et ce pour tous les pays, par fournisseurs.

Petite difficulté supplémentaire: certains pays inclu des données en monnaie locale elles aussi données sur des feuilles différentes.

Tout ça est compliqué, mais pas si compliqué en fait. Pour résumer, il faut arrivé à compiler et spliter 8 classeurs, contenant 156 feuilles (dont le nom est toujours le nom d'un pays) en 78 classeurs contenant chacun 2 feuilles.

Je ne sais pas si quelqu'un arrivera à m'aider, je suis prêt à vous réexpliquer d'une autre façon ou à vous envoyer un exemple.

J'attends votre aide en espérant que j'arriverai à contenir ma hiérarchie...

10 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 sept. 2009 à 15:14
Salut,
Récapitulons pour voir :
tu as 8 classeurs :
Fourn1classeur1mensuel.xls
Fourn1classeur1cumul.xls
Fourn1classeur2mensuel.xls
Fourn1classeur2cumul.xls
Fourn2classeur1mensuel.xls
Fourn2classeur1cumul.xls
Fournclasseur2mensuel.xls
Fourn21classeur2cumul.xls
Chacun comporte x feuilles nommées par des pays.

1- Est ce que si dans "Fourn1classeur1mensuel.xls" j'ai la feuille "zimbabwe" je la retrouve également dans Fourn1classeur1cumul.xls?

Tu veux au final ce genre de fichier : Fourn1Belgique.xls (avec 2 Feuil : mensuel et cumul)
Est ce bien cela?
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
24 sept. 2009 à 16:21
Salut Pijaku,

Merci pour ta réponse, et je dois dire que tu as exactment compris la structure des fichiers que je dois trier et produire. Un vrai casse tête, et à la main, j'y passe plus d'une journée...

Tu as une piste??? Je suis novice en macro et VBA.

Je suis très confiant malgré tout !!! A vous de jouer les boss !!!

Merci en tout cas
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 sept. 2009 à 08:56
Salut,
A vous de jouer les boss !!! Pas trop d'accord.... On va le faire ensemble si tu veux bien.
On va dans un premier temps voir le cheminement que devra prendre la macro pas à pas.
Voici ce que je te propose :

1- ouvrir le premier des 2 classeurs à "réunir" (Fourn1classeur1mensuel.xls)

2- copier une à une ces feuilles dans un nouveau classeur (1 classeur par feuille)

3- enregistrer ces classeurs (d'1 feuille) sous le nom "Fourn1_nomdelafeuille_mois_année" puis les fermer [ici on aura créé les x classeurs concernant les pays de ce fournisseur)

4- ouvrir le 2ème des classeurs (Fourn1classeur1cumul.xls)

5- copier une à une ces feuilles dans les classeurs "Fourn1_nomdelafeuille_mois_année" correspondants.

6- recommencer les opérations (1-2-3-4-5) pour les autres classeurs (Fourn1classeur2mensuel.xls, Fourn1classeur2cumul.xls, Fourn2classeur1mensuel.xls, Fourn2classeur1cumul.xls, Fournclasseur2mensuel.xls,
Fourn21classeur2cumul.xls)

Qu'en penses tu?
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
25 sept. 2009 à 10:00
Salut Pikaju, je te remercie de t'investir dans ma cause (perdue?). Je veux bien t'apporter mon aide, mais vraiment j'ai découvert les macros il y a tous juste une semaine et je ne te cache pas que j'ai un peu de mal à comprendre comment tout cela marche.

Mais je suis avec vous tous, et je vais faire tout mon possible pour comprendre et vous (m') aider.

Pikaju, je pense que c'est le bon cheminement pour arrivé à nos fins. Je dirais même que c'est exactement ce quie je fais à la main. Mais peut-on tout automatiser ? Si oui, je deviens fan de la Macro !!!

N'hésite pas à me demander d'autres choses, et si je peux aider (avec mon niveau de débutant), je suis partant, mais je pense plus apprendre qu'aider.

Merci en tout cas !!!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 10:41
Commençons.
Il faudrait que tu créés, sur ton ordi un répertoire "Reception fournisseurs".
Dans ce répertoire, tu créés un nouveau classeur Excel (tu peux l'appeler "séparateur de feuilles"). C'est dans celui là que nous mettrons la macro.
C'est également dans ce répertoire que tu devras enregistrer, tous les mois les 8 classeurs reçus de tes fournisseurs.
Pour classer tous les nouveaux fichiers créés par la macro et archiver les classeurs reçus, il va nous falloir des sous répertoires. Je propose de faire créer par la macro un sous répertoire "année" et dans "année" que la macro nous créé des sous sous répertoires "mois".
Pour cela, il faut :
1- tester leur existence
2- les créer.
Voici le code :

Sub separer_feuilles_tout_fichiers()
'tester et créer le cas échéant les sous répertoire "\2009" et "\2009\mois en cours"
'pour ceci merci à ouskel'n'or https://www.developpez.net/forums/d356407/logiciels/microsoft-office/excel/macros-vba-excel/tester-l-existence-d-repertoire-vba/
On Error Resume Next
ChDir ActiveWorkbook.Path & "\" & Year(Date)
If Err Then MkDir ActiveWorkbook.Path & "\" & Year(Date)
ChDir ActiveWorkbook.Path & "\" & Year(Date) & "\" & Month(Date)
If Err Then MkDir ActiveWorkbook.Path & "\" & Year(Date) & "\" & Month(Date)
On Error GoTo 0

End Sub
0
Bonjour,
Juste au passage, est-ce que la structure et le format des feuilles de chaque classeur sont strictement les mêmes ?
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 09:53
Pompom,

Tous les fichiers adoptent strictement la même construction, avec les mêmes intitulés colonnes.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 sept. 2009 à 12:11
Peux tu me dire les noms des 8 classeurs que tu reçois? Est ce qu'ils ont toujours le même nom?
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 12:27
GFS-6500002-International-5-yyyymm
GFS-6500045-International-5-ML-yyyymm
GFS-6500047-Country-5-ML-yyyymm
GFS-6500046-Country-5-yyyymm
GFS-6500047-Country-5-ML-yyyymm
GFS-6500048-International-2-yyyymm
GFS-6500049-International-2-ML-yyyymm
GFS-6500050-Country-2-yyyymm
GFS-6500051-Country-2-ML-yyyymm

Les noms sont toujours les mêmes, mais à la limite je peux prendre le temps de les renommer, s'il me reste juste ça à faire, c'est pas très grave. Ou alors on peut peut etre créer une macro les renommant. C'est comme tu le sens, je pense que c'est toi qui m'éclairera plus que le contraire.

La macro pour créer les dossiers et sous-dossiers marche parfaitement.

Merci...

Je dois regarder quoi pour les prochaines étapes ? Ca se profile bien ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 12:51
J'y réfléchis (renommer les classeurs). Pendant ce temps, peux tu répondre à michel_m post 9?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 sept. 2009 à 12:22
Bonjour,

Et en plus, pourrait tu nous envoyer un extrait des 2 types de feuilles mensuel et cumul -au format .xls si tu es sur XL 2007-pour voir leurs structures
en enlevant éventuellement des données confidentielles sur
https://www.cjoint.com/
et tu colles le lien proposé dans ton messages
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 13:44
Bonjour Michel, la structure est strictement identique a chaque fois. Je ne peux malheureusement pas vous envoyer les fichiers car les données sont confidentielles. Je suis désolé. Mais je ne pense pas que ce soit très dérangeant étant donné qu'on ne croise aucune donnée. On s'occupe juste de copier/coller ici, sans jamais toucher au données.

Merci et encore désolé.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 sept. 2009 à 13:58
OK mais juste un petit point:

On s'occupe juste de copier/coller ici, sans jamais toucher au données.

!!! J'avais compris, merci, mais il existe des méthodes ultra-rapides pour effectuer cela et pour 4*156 requêtes, à vue de nez: entre 1 et 3 secondes.
Mais il faut pour cela que les feuilles "sources" soient sous la forme de liste de données.
c'était le but de ma demande et pourquoi ma demande précisait: "pour voir leurs structures" (des feuilles sans données auraient suffis), pour évaluer si cette méthode était possible dans ton cas...

Mais je n'insiste pas,
bon WE
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 14:01
D'accord Michel, je comprends tout à fait et je ne savais pas que c'était pour ça. Mais vraiment, je ne peux pas vous envoyer les fichiers, même partiellement vidés. Je suis désolé, et j'espère ne pas t'avoir froissé.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 sept. 2009 à 14:06
j'espère ne pas t'avoir froissé.
absolument pas, don't care
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 sept. 2009 à 15:51
Dans ma solution si dessous (cf post 16), le Isfilexist (de Bidouilleu citons le au passage) ne fonctionne pas dans le module1. Dans la macro du commandbutton ça fonctionne mais pas dans celle du module. As tu une explication?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 sept. 2009 à 15:50
Re-Salut tout le monde...
Je suis parvenu à un résultat qui est une véritable "usine à gaz" mais qui vraisemblablement fonctionne...
1 minutes à peu près pour 8 fichiers de 5 pages initiaux... Donc pour 4 * 153 ça risque de durer un bon quart d'heure. Mais bon, si l'ordi ne plante pas... Tu devrais gagner 7h45 1 fois par mois, donc 93 heures par an, à 10 euro de l'heure car je ne suis pas gourmand, tu me dois 930 euros... Enfin, ton patron me doit 930 euros.
Donc tu dois au préalable :
1- créer sur ton ordi (n'importe ou je ne suis pas sectaire) un dossier "Réception" (attention à l'orthographe, au R majuscule et au é avé l'accent...)
2- créer dans ce répertoire 2 sous répertoire,
- un nommé : Reception fournisseurs (attention à l'orthographe, au R majuscule, au é SANS l'accent... et à l'espace entre les 2 mots)
- et un nommé : Originaux (O majuscule et au pluriel s'il vous plait)
3- dans le sous-répertoire "Reception fournisseurs" tu déposes le fichier cijoint que tu renommes (toujours gaffe à l'orthographe!! espaces, accent, majuscule...) Séparateur de feuilles
4- tu l'ouvres, actives les macros et respectes systématiquement les 4 étapes.
Avant de faire l'essai avec tes 8 fichiers originaux, fait le avec des copies.... Je ne suis vraiment pas sur de moi.
Une fois l'essai réalisé, revient et donne nous les erreurs constatées...

J'accepte le liquide et le liquide...
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
25 sept. 2009 à 17:35
Merci Pijaku !

Pour le paiement, je vais attendre que ça marche ;)

Concernant la première étape, tout se passe très bien, j'obtiens des classeurs rénomés et je peux déplacer les originaux dans le dossier originaux, mais dès la 3e étape, j'ai un bug:

sHoldingID = Left$(sFilenameOrigin, Pos1 - 1)

Tu sais d'où cela peut venir ?

Ca à l'air d'être en bonne voix !!!

Merci beaucoup pour votre aide, vous êtes vraiment des bons...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
28 sept. 2009 à 08:45
Salut,
Très curieux ce bug... La seule ligne de mon code qui serait "voisine" de ce que je comprends serait celle ci :
classeur = Left(ActiveWorkbook.Name, 14)
Es tu sur de n'avoir aucun autre fichier ou sous répertoire dans le répertoire Réception?
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
28 sept. 2009 à 10:46
Bonjour Pijaku,

Merci pour ton aide encore. J'ai identifier l'erreur de la ligne, elle provient de la macro qui est contenue dans les fichiers sources.

Première question, est-il possible d'effacer la macro contenue dans les fichiers sources avant toute action de notre part pour avoir des fichiers "propres"?

Deuxièmement, je suis content, car tout marche, les fichiers se créent et se renomme, tu es le boss.

Par contre, les fichiers créer ne correspondent pas tout à fait à ce que je dois obtenir, mais ce sont des réglages, le plus gros de la macro marche.

Si tu es d'accord, j'examine les modifs à faire pour obtenir un vrai process automatisé, mais nous sommes sur la très bonne voie...

Je te donne les modifs que j'aimerai apporter à la macro très rapidement.

Un grand merci à toi !!! J'ai un cadeau pour toi...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
28 sept. 2009 à 16:44
Bonjour,
Première question, est-il possible d'effacer la macro Tout dépends comment elle est faite, son utilité, un mot de passe??? Là sans les fichiers originaux, difficile de faire quelque chose...
Deuxièmement Pas de problème, pose tes questions on essaiera d'y répondre.
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
29 sept. 2009 à 17:53
Salut les amis,

Pardon pour ce moment d'absence, j'étais en déplacement.

Alors concernant notre chère et tendre macro, comme je le disai, nous touchons le bout du tunnel. quelques améliorations sont néanmoins nécessaires pour avoir un process le plus court et automatique possible.

Commençons:
1/ les fichiers que je reçois tous les mois ne portent change de nom tous les mois en réalité (je viens d'en recevoir et c'est le cas), mais certains critères reviennent tous les mois: les chiffres 5 et 2 sont les identifiants des deux fournisseurs donc fournisseur 1=2, fournisseur 2=5. La structure des fichiers est néanmoins, "country" et "internationnal" désignent le type d'info que l'on trouve dans les documents, enfin "ML" pour monnaie locale ou rien pour € désigne la monnaie présente dans le document. Ainsi, les 8 documents ont un nom composé de chancun de ses 6 critères. S'il est possible de les reconnaitre et ainsi d'obtenir une reconnaissances des fichiers d'après certains critères, cela rendrait vraiment automatique le process de renomage des classeurs.

2/ les fichiers sources contiennent des macros qui rentrent en conflit avec l'étape 3 de notre macro. Les macros contenu à l'orgine par les fichiers sources sont des macros non protégées et servant uniquement à la production des fichiers chez les fournisseurs, donc aucune utilité pour moi. L'intérêt serait d'effacer les macros d'origine afin d'éviter tout conflit avec la notre (comme cela se produit actuellement).

3/ le test est trés concluant concernant la séparation des feuilles et la création des classeurs. Néanmoins, j'obtiens des classeurs qui rassemblent soit les données mensuelles (€ et ML) soit les données cumul a date (€ et ML) par fournisseur, par pays.
Ce que j'aimerai obtenir, des classeurs rassemblant les feuilles d'un même pays, dans un classeur par fournisseur, rassemblant les données cumul à date, et mensuelle en euros, et un autre rassemblant les données ML (monnaie locale) quand elles existent pour les fichiers dits "international" et la même chose pour des fichiers dits "country".
Je vous envoie un exemple si ce n'est pas clair, ou dites moi de quoi vous avez besoin pour comprendre sachant que je ne peux pas vous envoyer de document confidentiel. Sinon, croyez moi, tout irait plus vite.

Merci à vous !!!
On avance...
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
30 sept. 2009 à 11:08
Je reviens avec des nouvelles du front:

Je recois désormais deux types de fichiers, ce qui porte le nombre total de fichiers reçus à 18 (2x9, et non 8 car ils me scindent en 2 un classeur trop important).

Ce sont donc maintenant les données séparées en 9 classeurs "cumul à date", et 9 classeur "mensuel". J'ai donc modifié la macro en renomant les fichiers et en ajoutant des lignes pour ouvrir et renomer les classeurs que je reçois. Je produits donc:
fournisseur1_2
fournisseur1_2ML
fournisseur1_5
fournisseur1_5ML
fournisseur2_2
fournisseur2_2ML
fournisseur1_5
fournisseur1_5ML
fournisseur2_bis
et
Monthly_fournisseur1_2
Monthly_fournisseur1_2ML
Monthly_fournisseur1_5
Monthly_fournisseur1_5ML
Monthly_fournisseur2_2
Monthly_fournisseur2_2ML
Monthly_fournisseur1_5
Monthly_fournisseur1_5ML
Monthly_fournisseur2_bis

Le problème est que pour la 3e étape, je n'arrive pas à appliquer la macro à mes fichiers Monthly. Une réponse pour moi ?

2e chose, je n'arrive pas à mettre en place une macro pour supprimer les macros des classeurs bruts. Help ?

Merci à vous tous :)
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
1 oct. 2009 à 09:40
Bonjour,

vous me laissez tomber ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009
1 oct. 2009 à 16:26
Salut,
Non mais je n'ai vraiment pas eu le temps ces jours ci de venir sur CCM...
Je vais essayer de m'y remettre dès lundi.

Edit : je pense qu'il faut tout revoir car j'ai pas mal d'erreurs le 2ème mois...
0
batbat30 Messages postés 13 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 1 octobre 2009 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
1 oct. 2009 à 17:00
Génial !!! On se reparle lundi alors, si d'autres peuvent apporter leur pierre à l'édifice...?
Merci par avance.

Allez, passez un bon weeked !
0