Sub Redistribue()
Dim tablo, T, NbClients%, RuptCde%, i%, Ligne%, Colonne%
tablo = [A1].CurrentRegion
NbClients = Application.Max([A:A]) ' Nombre de clients
ReDim T(1 To NbClients, 1 To 100) ' Max : 100 articles par client
Sheets("DONNEES HORIZONTALES").[2:1000].ClearContents
RuptCde = 1: Ligne = 1: Colonne = 3 ' Ligne et Colonne écriture
For i = 2 To UBound(tablo)
If tablo(i, 1) = RuptCde Then ' Si code client correct
If T(Ligne, 1) = "" Then ' Si l'entete n'est pas inscrite
T(Ligne, 1) = tablo(i, 1) ' Rupt Cde
T(Ligne, 2) = tablo(i, 2) ' CLI
End If
T(Ligne, Colonne) = tablo(i, 6) ' Article
T(Ligne, Colonne + 1) = tablo(i, 4) ' Qté
Colonne = Colonne + 2 ' Pour prochain article
Else ' Si nouveau code client
RuptCde = RuptCde + 1 ' On incrémente la référence
Ligne = Ligne + 1 ' Nouvelle ligne dans tableau
Colonne = 3 ' Réinit colonne à 3
i = i - 1 ' On recule d'une ligne pour l'analyse suivante
End If
Next i
' Restitution du tableau
Sheets("DONNEES HORIZONTALES").[A2].Resize(UBound(T, 1), UBound(T, 2)) = T
End Sub