Sub Macro1()
Dim A As Object 'déclare la variable A
Dim B As Object 'déclare la variable B
Dim C As Object 'déclare la variable C
Dim dla As Long 'déclare la variable dla (Dernière Ligne A)
Dim pla As Range 'déclare la variable pla (PLage A)
Dim dlb As Long 'déclare la variable dlb (Dernière Ligne B)
Dim plb As Range 'déclare la variable plb (PLage B)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim d As Object 'déclare la variable d (Dictionnaire)
Dim temp As Variant 'déclare la variable temp (TEMPoraire)
Dim i As Long 'déclare la variable i (Incrément)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
Set A = Sheets("A") 'définit l'onglet A
Set B = Sheets("B") 'définit l'onglet B
Set C = Sheets("C") 'définit l'onglet C
dla = A.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne édité dla de la colonne 1 (=A) de l'onglet A
Set pla = A.Range("A2:E" & dla) 'définit la plage pla
dlb = B.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne édité dlb de la colonne 1 (=A) de l'onglet B
Set plb = B.Range("A2:A" & dlb) 'définit la plage pla
Set d = CreateObject("Scripting.Dictionary") 'définit le dictionnaire d
For Each cel In plb 'boucle 1 : sur toutes les cellule cel de la plage plb
d(cel.Value) = "" 'alimente le dictionnaire
Next cel 'prochaine cellule de la boucle
temp = d.keys 'récupère les valeurs uniques (sans doublon) du dictionnaire
For i = 0 To UBound(temp, 1) 'boucle 2 : sur toute les valeur unique
Set dest = IIf(C.Range("A2").Value = "", C.Range("A2"), C.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)) 'définit la cellule de destination
A.Range("A1").AutoFilter Field:=1, Criteria1:=temp(i) 'filtre la plage pla par rapport à la valeur unique temp(i)
pla.SpecialCells(xlCellTypeVisible).Copy dest 'copie les cellules visibles de la plage pla et les colle dans dest
A.Range("A1").AutoFilter 'supprime le filtre automatique
Next i 'prochaine valeur unique de la boucle 2
End Sub