Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer '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 TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim T As Double 'déclare la variable T (Total)
Dim PLV As Range 'déclare la variable PLV (PLage des cellule Visibles)
Set O = Sheets("Feuil1") 'définit l'onglet O
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("A2:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère les valeurs uniques (sans doublons) des valeurs de la plage PL dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle 1 : sur toutes les valeurs uniques
T = 0 'réinitialise le total T
O.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) par rapport à la valeur unique TMP(I)
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV des cellules visibles (après filtarge) de la plage PL
For Each CEL In PLV.Offset(0, 1) 'boucle 2 : sur toutes les cellules CEL de la palge PLV décalée d'une colonne à droite (=colonne B)
If CStr(CEL.Value) = "1368" Then T = T + CDbl(CEL.Offset(0, 1).Value) 'si la cellule contient "1368", définit le total T
If CStr(CEL.Value) = "2968" Then T = T + CDbl(CEL.Offset(0, 1).Value) 'si la cellule contient "2968", définit le total T
Next CEL 'prochaine cellule de la boucle 2
For Each CEL In PLV 'boucle 3 : sur toutes les cellules CEL de la palge PLV décalée d'une colonne à droite (=colonne B)
CEL.Offset(0, 3).Value = T 'place le total T dans la cellule en colonne D
Next CEL 'prochaine cellule de la boucle 3
O.Range("A1").AutoFilter 'supprime le filtre automatique
Next I 'prochaine valeur unique de la boucle 1
End Sub