Option Explicit
Sub VALID()
Dim m As Object 'déclare la variable m (Mois)
Dim ca As Integer 'déclare la variable ca (Code Agence)
Dim dlm As Integer 'déclare la variable dlm (Dernière Ligne du Mois)
Dim plm As Range 'déclare la variable plm (PLage du Mois)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
Dim r1 As Range 'déclare la variable r1 (Recherche 1)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim r2 As Range 'déclare la variable r2 (Recherche 2)
Dim i As Byte 'déclare la variable i (Incrément)
Range("A5:D1200").ClearContents 'efface la plage A5:D1200
Set m = Sheets(Range("B3").Value) 'définit l'onglet m
ca = Range("B2").Value 'définit le code agance ca
dlm = m.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dlm de la colonne A de l'onglet m
Set plm = m.Range("A1:A" & dlm) 'définit la plage plm
Set r1 = plm.Find(ca, , xlValues, xlWhole) 'définit la recherche r1 (recherche le code agence dans la colonne A de l'onglet du mois)
If Not r1 Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
pa = r1.Address 'définit l'adresse de la première occurrence trouvée
Do 'exécute
Set r2 = Columns(1).Find(r1.Offset(0, 1), , xlValues, xlWhole) 'définit la recherche r2 (recherche le code client dans la colonne A de l'onglet "RESULTAT"
If Not r2 Is Nothing Then 'condition 2 : si il existe au moins une occurrence trouvée
r2.Offset(0, 1).Value = r2.Offset(0, 1).Value + r1.Offset(0, 2).Value 'additionne les valeurs de la colonne B
r2.Offset(0, 2).Value = r2.Offset(0, 2).Value + r1.Offset(0, 3).Value 'additionne les valeurs de la colonne C
Else 'sinon
Set dest = Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination dest
For i = 0 To 2 'boucle sur le décalage de 0 à 3
dest.Offset(0, i).Value = r1.Offset(0, i + 1).Value 'récupère la valeur de l'onglet m
Next i 'prochain décalage d'une celllule vers la droite
End If 'fin de la condition 2
Set r1 = plm.Find(ca, r1, xlValues, xlWhole) 'redéfinit la recherche r (occurrence suivante)
Loop While Not r1 Is Nothing And r1.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
End If 'fin de la condition 1
End Sub