Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Range 'déclare la variable PL (PLage)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL = O.Range("B3").CurrentRegion 'définit la plage PL
PL.Sort O.Range("C3"), xlAscending, O.Range("F3"), , xlAscending, Header:=xlNo 'tri de la plage PL selon Récepion et date
O.Range("H3").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données
TV = PL 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs
On Error GoTo suite 'va à l'étiquette suite pour éviter le bug de la dernière ligne
If TV(I, 3) = TV(I + 1, 3) And TV(I, 5) = TV(I + 1, 5) Then 'si les données de la ligne correspondent avec les données de la ligne au-dessous
ReDim Preserve TL(1 To 5, K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
TL(1, K) = IIf(TL(1, K) = "", TV(I, 1) & " - " & TV(I + 1, 1), TL(1, K) & TV(I, 1) & " - " & TV(I + 1, 1)) 'transpose les livraisons dans TL en les concatenant si doublon
TL(2, K) = TV(I, 2) 'transpose la réception dans TL
TL(3, K) = TV(I, 3) 'transpose le nom dans TL
TL(4, K) = CInt(TV(I, 4)) + CInt(TV(I + 1, 4)) 'transpose les quantités dans TL en les ajoutant
TL(5, K) = TV(I, 5) 'transpose la date dans TL
K = K + 1 'incrémente K
I = I + 1 'incrémente I
Else 'sinon
suite: 'étiquette
ReDim Preserve TL(1 To 5, K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
TL(1, K) = TV(I, 1) 'transpose la livraison dans TL
TL(2, K) = TV(I, 2) 'transpose la réception dans TL
TL(3, K) = TV(I, 3) 'transpose le nom dans TL
TL(4, K) = CInt(TV(I, 4)) 'transpose la quantité dans TL
TL(5, K) = TV(I, 5) 'transpose la date dans TL
K = K + 1 'incrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("H3").Resize(UBound(TL, 2) + 1, 5).Value = Application.Transpose(TL) 'renvoie dans H3 le tableau TL transposé
End Sub