Sub Macro1()
Dim cr As Workbook 'déclare la variable cr (Classeur Resultat)
Dim re As Object 'déclare la variable re (onglet REsumé)
Dim ch As String 'déclare la variable ch (CHemin)
Dim f As Variant 'déclare la variable f (Fichier)
Dim cd As Workbook 'déclare la variable cd (Classeur de Données)
Dim o As Object 'déclare la variable o (Onglets)
Dim rc As Range 'déclare la variable rc (Recherche de la Colonne)
Dim col As Byte 'déclare la variable col (COLonne)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim rl As Range 'déclare la variable rl (Recherche de la Ligne)
Dim li As Integer 'déclare la variable li (LIgne)
Set cr = ThisWorkbook 'définit le classeur resultat cr
Set re = cr.Sheets("Resumé") 'définit l'onglet Resumé re
re.Range("A1").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données du classeur resultat
ch = cr.Path 'définit la chemin
f = Dir(ch & "\*.xlsx") 'définit le premier fichier f (fichier dont l'extension est ".xlsx" dans le dossier ch)
Do While f <> "" 'boucle 1 : tant qu'il existe des fichiers avec les caractéristiques au-dessus
Workbooks.Open f 'ouvre le fichier
Set cd = ActiveWorkbook 'définit le classeur de données cd
Set rc = re.Rows(1).Find(cd.Name, , xlValues, xlWhole) 'définit la recherche de la colonne (recherche le nom du fichier dans la première ligne [classeur cr, onglet re])
'si aucune occurrence n'est trouvée, définit la colonne col comme la colonne de la première cellule vide de la ligne 1
'sinon col est définie comme la colonne de la première occurrence trouvée
If rc Is Nothing Then col = re.Cells(1, Application.Columns.Count).End(xlToLeft).Column + 1 Else col = rc.Column
re.Cells(1, col).Value = cd.Name 'place le nom du fichier dans la cellule ligne 1, colonne col
For Each o In cd.Sheets 'boucle 2 : sur tous les onglets du fichier cd
dl = o.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A) de l'onglet o
Set pl = o.Range("A1:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle 3 : sur toutes les cellules de la plage pl
Set rl = re.Columns(1).Find(cel.Value, , xlValues, xlWhole) 'définit la recherche de la ligne (recherche la valeur de la cellule cel dans la colonne A)
'si aucune occurrence n'est trouvée, définit la ligne li comme la première ligne vide de la colonne A
'sinon li est définie comme la ligne de la première occurrence trouvée
If rl Is Nothing Then li = re.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 Else li = rl.Row
re.Cells(li, 1).Value = cel.Value 'place la valeur de la colonne A
re.Cells(li, col).Value = cel.Offset(0, 1).Value 'place la valeur de la colonne B
Next cel 'prochaine cellule de la boucle 3
Next o 'prochain onglet de la boucle 2
cd.Close 'ferme le classeur de données
f = Dir 'définit le prochain fichier dont l'extension est ".xlsx" dans le dossier ch
Loop 'boucle
End Sub