Bonjour !
Je travaille à partir de 40 fichiers : tous ont la même organisation, le même nombre de feuilles, dans le même ordre, avec les mêmes noms, etc.
Pour l'exemple je dirais que cela correspond aux rapports financiers de plusieurs boutiques d'une même chaîne.
Dans chaque classeur boutique, je souhaite extraire la feuille qui correspond au budget de communication. Cette feuille s'appelle "COM".
Je souhaite ensuite consolider toutes les feuilles "COM" de chaque boutique dans un classeur unique qui s'appelle "Rapport COM".
Chaque feuille du classeur correspondra donc au budget communication d'une boutique.
Dans mon classeur de destination (qui est le classeur sur lequel se trouve la macro que j'ai écrite), j'ai créé une première feuille sur laquelle je trouve :
en cellule B3 : le chemin d'accès de mon dossier dans lequel se trouvent les 40 fichiers source, classés par zone
en cellules B7 à B19 : les noms des fichiers source classés par "importance" (il est crucial que cet ordre soit respecté lors du copié/collé afin que les feuilles/budgets se suivent dans l'ordre désiré)
Il y a un problème dans cette macro : certaines boutiques sont collées en double voir triple alors que d'autres ne sont même pas récupérées et l'ordre établi dans les lignes 7 à 19 n'est pas respecté. Je pense que j'ai mal utilisé le WS_Count mais je n'arrive pas à trouver mon erreur (j'ai fais mes premiers pas dans VBA il y a quelques mois seulement et j'apprends totalement en autodidate à partir de forums, je ne suis donc pas du tout une pro...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub CopyCOM() WS_Count = ThisWorkbook.Worksheets.Count 'Compte le nombre de feuilles du classeur de destination ThisWorkbook.Sheets(1).Select 'Feuille de paramètrage du classeur de destination For i = 7 To 19 'Lignes dans lesquelles sont écrits les noms des fichiers source For j = 1 To WS_Count 'Dans le but de trouver la dernière feuille du classeur de destination PathName = ThisWorkbook.Sheets(1).Range("B3").Value 'Chemin d'accès des fichiers source type 'C:\Local\Budgets\2018\Zone1\ Filename = ThisWorkbook.Sheets(1).Range("B" & i).Value 'Lignes dans lesquelles sont écrits les noms des fichiers source Workbooks.Open Filename:=PathName & Filename, UpdateLinks:=False 'J'ouvre les fichiers sources tour à tour Workbooks(Filename).Sheets("COM").Copy After:=ThisWorkbook.Sheets(j) 'Je copie la feuille COM dans le fichier source et je la colle à la suite de la dernière feuille du classeur de destination Workbooks(Filename).Close False 'Je ferme le fichier source en cours Next j 'Ma "nouvelle" dernière feuille du classeur de destination puisque je viens d'en coller une à la suite de la précédente Next i 'Je passe au fichier source suivant End Sub)
N'hésitez pas à me poser des questions si je n'ai pas été claire dans mes explications...
Merci d'avance !![]()
Partager