Bonjour le fil, bonjour le forum,
Grillé par GMB (il est trop fort mais un jour j'exigerai un contrôle anti dopage !...). C'est pratiquement le même code mais comme je l'ai commenté, j'envoie quand même :
Sub Macro1()
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 (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Set O = Worksheets("Feuil1") 'définit l'onglet O
O.Range("F3:G" & Application.Rows.Count).ClearContents 'efface d'eventuelles anciennes données
TV = O.Range("A3").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionanire 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, 2)) = D(TV(I, 2)) + TV(I, 3) 'alimente le dictionnaire D avec les données en colonne 2 de TV (et somme les données en colonne 3 d'un même fournisseur)
Next I 'prochaine ligne de la boucle
O.Range("F3").Resize(D.Count, 1) = Application.Transpose(D.Keys) 'renvoie en F3 la liste des éléments du dictionnaire D sans doublon
O.Range("G3").Resize(D.Count, 1) = Application.Transpose(D.Items) 'renvoie en G3 la somme de chaque fornisseur de la liste sans doublons
Set PL = O.Range("G4:G" & O.Cells(Application.Rows.Count, "G").End(xlUp).Row) 'définit la plage PL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
CEL.Value = CEL.Value * 1 'multiplie la valeur par 1 (transforme un nombre considéré comme texte en nombre)
Next CEL 'prochaine cellule de la boucle
PL.NumberFormat = "$ #,##0.00" 'mise au format spécifique de la plage PL
End Sub