Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim F As String 'déclare la variable F (Fichier)
Dim CT As Integer 'décare la variable C (Compteur)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim T(1 To 18, 1 To 6) As Double 'déclare le tableau de variables T (Total)
Dim C(1 To 18, 1 To 16) As String 'déclare le tableau de variables C (Commentaire)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable F (incrément)
Dim PL As Range 'déclare la variable PL (PLage)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
CA = ThisWorkbook.Path & "\" 'définit le chemin d'accès CA (à adapter)
Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination (à adapter)
F = Dir(CA & "*.xls*") '1er fichier du dossier
Do While F <> "" 'exécute tant qu'il existe des fichiers
If F <> CD.Name Then 'condition : si le fichier n'est pas le classeur destination CD
CT = CT + 1
Set CS = Workbooks.Open(CA & F) 'définit le classeur source en l'ouvrant
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source
TV = OS.Range("B3:G20")
For I = 1 To UBound(TV, 1)
For J = 1 To UBound(TV, 2)
T(I, J) = T(I, J) + TV(I, J) 'définit le total indexé T
C(I, J) = IIf(C(I, J) = "", F & " : " & TV(I, J), C(I, J) & Chr(10) & F & " : " & TV(I, J)) 'définit le commentaire indexé C
Next J
Next I
CS.Close False 'ferme le classeur source sans enregistrer
End If 'fin de la condition
F = Dir 'fichier suivant
Loop 'boucle
Set PL = OD.Range("B3:G20") 'définit la plage B3:G20 de l'onglet destination OD
For I = 1 To PL.Rows.Count 'boucle 1 : sur toutes les lignes I de la plage PL
For J = 1 To PL.Columns.Count 'boucle 2 : sur toutes les Colonnes J de la plage PL
With PL.Cells(I, J) 'prend en compte la cellule ligne I colonne J de la plage PL de l'onglet OD
.Value = T(I, J) 'renvoie le total indexé T(I,J)
On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
.Comment.Delete 'supprime un éventuel commentaire existant (génère une erreur si pas de commentaire)
.AddComment C(I, J) 'ajoute le commentaire indexé C(I,J)
.Comment.Shape.Height = 50 'hauteur du commentaire (à adapter ou supprimer)
.Comment.Shape.Width = 250 'largeur du commentaire (à adapter ou supprimer)
.Comment.Visible = False 'masque le commentaire
End With 'fin de la prise en compte de la cellule ligne I colonne J de la plage PL de l'onglet OD
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox CT & " Fichiers consolidés " 'message
End Sub