Sub Traitement_DateSemaine_BD_9_Ter()
Dim i&, j&, n&, x#, A As Range, B(), C(), D(), O(), oDat()
With Range("B3") 'Première donnée de la colonne "Fournisseur"
Set A = Range(.Cells, Cells(Rows.Count, .Column).End(xlUp)).Offset(0, -1) 'Plage de destination.
'Ici, colonne A, c'est-à-dire colonne des données "Fournisseur" décalée d'une colonne à gauche.
End With
n = A.Count 'Nombre de lignes à traiter.
ReDim oDat(1 To n, 1 To 1)
B = A.Offset(0, 1).Value 'Plage des données "Fournisseur".
'Ici, colonne B, c'est-à-dire plage de destination décalée d'une colonne à droite.
C = A.Offset(0, 2).Value 'Plage des données "Commande ou livraison".
'Ici, colonne C, c'est-à-dire plage de destination décalée de deux colonnes à droite.
D = A.Offset(0, 3).Value 'Première plage des données "Date".
'Ici, colonne D, c'est-à-dire plage de destination décalée de trois colonnes à droite.
O = A.Offset(0, 14).Value 'Deuxième plage des données "Date".
'Ici, colonne O, c'est-à-dire plage de destination décalée de quatorze colonnes à droite.
For i = 1 To n
Select Case C(i, 1)
Case "Commande": oDat(i, 1) = ISO(D(i, 1))
Case "Livraison"
x = 0
For j = 1 To n
If B(j, 1) = B(i, 1) Then If O(j, 1) > x Then If D(i, 1) >= O(j, 1) Then x = O(j, 1)
Next
If x Then oDat(i, 1) = ISO(x)
End Select
Next
A.Value = oDat 'Dépôt du résultat dans la colonne de destination.
End Sub