Sub Macro1()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim d As Object 'déclare la variable d (Dictionnaire)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tt As Variant 'déclare la variable tt (Tableau Temporaire)
Dim t1 As Double 'déclare la variable t1 (Total 1)
Dim t2 As Double 'déclare la variable t2 (Total 2)
Dim t3 As Double 'déclare la variable t3 (Total 3)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
.Range("A1").CurrentRegion.Clear 'efface les éventuelles anciennes données
.Range("A1").Value = "Code Douane" 'en-Tête
.Range("B1").Value = "Total weight" 'en-Tête
.Range("C1").Value = "Total Qty" 'en-Tête
.Range("D1").Value = "Total Trans" 'en-Tête
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
Set pl = .Range("A3:A" & dl) 'définit la plage pl
Set d = CreateObject("Scripting.Dictionary") 'défin it le dictionnaire d
For Each cel In pl.Offset(0, 2) 'boucle sur tous les cellules éditée de la colonne C
cel.Value = "'" & cel.Value 'transforme le code douane en texte (certains étaient sous forme de numéros, d'autre sous forme de texte)
d(cel.Value) = "" 'alimente le dictionnaire
Next cel 'prochaine cellule de la boucle
tt = d.keys 'récupère les valeurs uniques (sans doublon) dans le tableau tempoaire tt
For i = 0 To UBound(tt) 'boucle sur toutes les valeur du tableau tt
.Range("A2").AutoFilter Field:=3, Criteria1:=tt(i) 'filtre la ligne 2, colonne C en fonction de la valeur du tabelau tt(i)
t1 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 4)) 'définit le total t1 (poids)
t2 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 5)) 'définit le total t2 (quantité)
t3 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 6)) 'définit le total t1 (transfert)
.Range("A2").AutoFilter 'supprime le filtre automatique
Set dest = Sheets("Feuil2").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
dest.Value = tt(i) 'place le code douane
dest.Offset(0, 1).Value = t1 'place le total 1
dest.Offset(0, 2).Value = t2 'place le total 1
dest.Offset(0, 3).Value = t3 'place le total 1
t1 = 0: t2 = 0: t3 = 0 'efface les totaux
Next i 'prochaine valeur de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub