Sub Macro1()
Dim BC As Worksheet 'déclare la variable BC (onglet Bon de Commande)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Set BC = Worksheets("Bon de Commande") 'définit l'onglet BC
BC.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données du Bon de Commande
K = 1 'initialise la variable K
For Each O In Worksheets 'boucle 1 : sur tous les onglets O du classeur
If O.Name <> "Bon de Commande" Then 'condition 1 : si l'onglet ne se nomme pas "Bon de Commande"
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 3 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième)
'condition 2 : si la donnée en colonne 7 du tableau des valeurs n'est ni nulle, ni vide
If TV(I, 7) <> "" And TV(I, 7) <> 0 Then
ReDim Preserve TL(1 To 7, 1 To K) 'redimensionne le tableau des lignes TL (7 lignes, K colonnes)
For L = 1 To 7 'boucle 3 : sur toutes les colonnes du tableau des valeurs TV
TL(L, K) = TV(I, L) 'récupères dans la ligne L de TL la donnée en colonne L de TV (=> Transposition)
Next L 'prochaine colonne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition 2
Next I 'prochaine ligne de la boucle 2
End If 'fin de la condition 1
Next O 'prochaine onglet de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1
'renvoie dans la cellule A2 redimensionnée de l'onglet BC, le tableau TL transposé
BC.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
BC.Range("H2:H" & K).FormulaLocal = "=G2*E2" 'renvoie la formule du calcul du total dans la colonne H
BC.Cells(K + 1, "H").FormulaLocal = "=Somme(" & "H2:H" & K & ")" 'place la formule de la somme
'efface les quantités des onglets MARQUE...
For Each O In Worksheets 'boucle sur tous les onglet O du classeur
'si l'onglet ne se nomme pas "Bon de Commande" efface les quantités marquées en colonne G
If O.Name <> "Bon de Commande" Then O.Columns(7).SpecialCells(xlCellTypeConstants).ClearContents
Next O 'prochain onglet de la boucle
End If 'fin de la condition
End Sub