Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Commande)
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste commande)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim K As Integer 'déclare la variable K (incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim L As Integer 'déclare la variable L (incrément)
Set OC = Worksheets("Commande") 'définit l'onglet OC
Set OL = Worksheets("liste commande") 'définit l'onglet OL
OL.Range("A3:F" & Application.Rows.Count).ClearContents 'efface d'éventuelles anciennes données de l'onglet OL
TV = OC.Range("A6").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, 7)) = "" 'alimente le dictionnaire avec la donnée en colonne 7 (l'ingrédient)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
K = 1 'initialise la variable K
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TMP(J) = TV(I, 7) Then 'condition : si lélément J de TMP(J) est égal a l'ingrédient en colonne 7 de TV
ReDim Preserve TL(1 To 6, 1 To K) 'redimensionne le tableau des lignes (6 lignes, K colonnes)
For L = 1 To 6 'boucle 3 sur les 6 colonnes du tableau des lignes TL
Select Case L 'agit en fonction de la colonne L
Case 2, 6 'colonnes 2 et 6
TL(L, K) = Round(TL(L, K) + TV(I, L + 6), 2) 'récupère dans la ligne L de TL la donnée en colonne L + 6 de TV en l'ajoutant (=> Transposition)
Case Else 'autre colonnes
TL(L, K) = TV(I, L + 6) 'récupère dans la ligne L de TL la donnée en colonne L + 6 de TV (=> Transposition)
End Select 'fin de l'acion en fonction de la colonne L
Next L 'prochaine colonne de la boucle 3
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
Next J 'prochain élément de la boucle 1
'renvoie dans A3 redimensionnée de l'onglet OL, le tableau TL transposé
OL.Range("A3").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End Sub