Sub Macro3()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnsaire)
Dim I As Long 'déclare la variable I (Incrément)
Dim TP As Variant 'déclare la variable TP (Tableau Temporaire)
Dim TS() As Variant 'déclare la variable TS (Tableau des Sommes)
Set O = Sheets("file1.csv") 'définit l'onglet O
O.Range("H1:I" & O.Range("H" & Application.Rows.Count).End(xlUp).Row).ClearContents 'efface d'enventuelles anciennes sommes
TV = O.Range("J1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TP = D.keys 'récupère dans le tableau temporaire TP la liste des éléments du dictionnaire sans doublon
ReDim TS(1, UBound(TP)) 'redimensionne le tableau des sommes TS (deux lignes, autant de colonnes que TP a de lignes)
For J = 0 To UBound(TP) 'boucle 1 : sur tous les éléments du tableau temporaire TP
TS(0, J) = "Somme " & TP(J) 'définit la valeur de la première ligne de TS(J)
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
'si la données ligne I colonne 1 de TV est égale à l'élément TP(J), définit la valeur de la seconde ligne de TS
'(en faisant la somme des valeurs en colonne 3 de TV)
If TV(I, 1) = TP(J) Then TS(1, J) = TS(1, J) + TV(I, 3)
Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
O.Range("H1").Resize(UBound(TP) + 1, 2).Value = Application.Transpose(TS) 'renvoie dans H1 redimensionnée le tableau TS transposé
End Sub