Sub dispatch2()
Application.ScreenUpdating = False
Range("C46:EQ53").ClearContents
'zone contenant toutes les commandes à dispatcher
Set CommandToDispatch = Range("C7:EQ36")
'indices Ligne du tableau de destination
Ldest = 46
'pour chaque colonne de la zone source
For i = 3 To CommandToDispatch.Columns.Count + 2
'si il y a au moins une commande dans la journée
If Cells(6, i) <> 0 Then
'on récupère les commandes de la journée: à partir de la ligne 7, on resize du nombre de commandes calculée en ligne 6
Set ListeToDispatch = Cells(7, i).Resize(Cells(6, i))
Couleur = Cells(7, i).FormatConditions(1).Interior.ColorIndex
Couleurpolice = Cells(7, i).FormatConditions(1).Font.ColorIndex
'permet de décaler de 6 jours
Cdest = i + 5
'à partir de la colonne +6, on cherche la première place dispo,
'si la colonne est pleine, on se décale à droite
While Cells(53, Cdest) <> "" And Cells(46, Cdest) <> ""
Cdest = Cdest + 1
Wend
'on récupère l'indice de ligne de la première cellule vide
If Cells(46, Cdest) <> "" Then
Ldest = Cells(53, Cdest).End(xlUp).Offset(1, 0).Row
End If
'pour chaque commande de la journée
For Each commande In ListeToDispatch
'on y colle la commande
Cells(Ldest, Cdest) = commande
Cells(Ldest, Cdest).Interior.ColorIndex = Couleur
Cells(Ldest, Cdest).Font.ColorIndex = Couleurpolice
'petit modulo pour augmenter le numéro de ligne tout en restant inférieur au nombre de commande max par jour
Ldest = (Ldest - 45) Mod 9 + 46
'si le prochain numéro de ligne=54 (donc dépasse les 8 commandes)
If Ldest = 54 Then
'on passe à la colonne suivante et on repasse en première ligne (46)
Cdest = Cdest + 1
Ldest = 46
End If
'commande suivant
Next commande
EndIf
'on vient de placer les commandes d'un jour, on va donc passer au suivant
'on réinitialise à la première ligne
Ldest = 46
Next i
Application.ScreenUpdating = True
EndSub