Regrouper les données de plusieurs classeurs dans un seul classeur
Bonjour,
Je suis novice sur VBA et j'aurais besoin de votre aide.
J'ai besoin de copier plusieurs données se trouvant dans plusieurs fichier Excel (même dossier) et de les coller les unes à la suite des autres, sans la première ligne (qui contient les titres) dans un seul classeur (compilation.xlsx).
Voici le code :
'
' --- COMPILER LES DONNEES ---
'
'
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim SF As Object 'déclare la variable SF (Système de Fichiers)
Dim D As Object 'déclare la variable D (Dossiers)
Dim EF As Object 'déclare la variable EF (Ensemble des Fichiers)
Dim F As Object 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable CD (Onglet Source)
Dim DEST As Range 'déclare la variable CD (Classeur Destination)
Set CD = ThisWorkbook 'définit le classeur destination CD
CH = CD.Path 'définit le chemin d'accès CH
Set OD = CD.Sheets(1) 'définit l'onget destination OD
Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichiers SF
Set D = SF.GetFolder(CH) 'définit le dossier de travail D
Set EF = D.Files 'définit l'ensemble des fichiers EF du dossier de travail D
For Each F In EF 'boucle sur tous les fichiers F de l'ensemble ds fichiers EF
If F.Name <> ThisWorkbook.Name And F.Name Like "*.xls*" Then 'condition : si le nom du fichier n'est pas le nom de ce fichier et si le fichier a une extension commençant par ".xls"
Workbooks.Open (F) 'ouvre le fichier
Set CS = ActiveWorkbook 'définit le classeur CS
Set OS = CS.Sheets(1) 'définit l'onglet OS
'définit la cellule de destination DEST (A1 si A1 est vide sinon, la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
OS.UsedRange.Copy DEST 'copie les données de l'onglet source OS et les colle dans DEST
CS.Close 'ferme le classeur source
Set CS = Nothing 'initialise la variable CS
End If 'fin de la condition
Next F 'prochain fichier de la boucle
CD.Save 'enregistre ce fichierMerci pour votre aide !
Salut,
Si j'ai bien compris ton besoin ce tuto devrait t'aider.
Sur youtube tape:
Excel vba: comment réaliser une consolidation de plusieurs feuilles avec une macro
Désolé pour le moment je ne peux pas mettre de lien, je suis trop jeune sur le forum
J'ai pu l'adapter pour moi et cela fonctionne!
Bien à toi.
Bonjour Guillaume
Bon début
Le code que tu as trouvé copie la première feuille de chaque classeur dans ton classeur courant.
il oublie donc de copier toutes les feuilles et je crois même qu'il copie toutes les feuilles en une seule dans la destination. Cela n'a d'intérêt que si les feuilles ont un même format et qu'une colonne spécifie une date.
Attention, excel n'est pas une base de données, on ne peut pas lui insérer un nombre de lignes trop important....
pour un backup, et/ou une recherche rapide ultérieure, je préfère le format csv avec un simple éditeur de texte
où est ton problème?
essaye de préciser en joignant au moins deux fichiers quelconques et le résultat attendu
précise peut être comment tu veux fusionner les classeurs : en gardant autant de feuilles que l'on en dénombre dans l'ensemble des classeurs et alors comment seront nommées celles-ci quand il y aura des doublons.