Dans le cadre de mon stage, je dois créer une planning automatique par le biais de VBA.
J'ai donc mis en place un système de fiche de présence à remplir avant de procéder à une affectation automatique et aléatoire du personnel.
De ce fait, lorsqu'un salarié est présent, un poste lui est affecté aléatoirement et si ce dernier est absent, "Absent / Congé" doit apparaitre.
Cependant, j'ai également fixé une condition qui fait que deux cellules d'une même feuille ou la même cellule d'une feuille sur l'autre ne peuvent contenir la même valeur afin d'éviter les doublons.
La condition marche bien, voir même trop bien ... C'est à dire qu'en admettant que deux salariés soit absent en même temps ou qu'un salarié soit absent deux semaines d'affilées et la condition effectue une boucle infinie.
Est il possible d'y remédier ? Voici un passage de la formule :
Public Sub Affectation2()
Do Until (Sheets(5).Range("B10") <> Sheets(5).Range("C10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("D10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("E10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("F10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("G10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("H10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("I10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("B10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("C10") <> Sheets(5).Range("D10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("E10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("F10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("G10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("H10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("I10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("C10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("D10") <> Sheets(5).Range("E10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("F10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("G10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("H10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("I10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("D10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("E10") <> Sheets(5).Range("F10")) And (Sheets(5).Range("E10") <> Sheets(5).Range("H10")) And (Sheets(5).Range("E10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("E10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("E10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("F10") <> Sheets(5).Range("G10")) And (Sheets(5).Range("F10") <> Sheets(5).Range("H10")) And (Sheets(5).Range("F10") <> Sheets(5).Range("I10")) And (Sheets(5).Range("F10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("F10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("F10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("H10") <> Sheets(5).Range("I10")) And (Sheets(5).Range("H10") <> Sheets(5).Range("J10")) And (Sheets(5).Range("H10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("H10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("J10") <> Sheets(5).Range("K10")) And (Sheets(5).Range("J10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("K10") <> Sheets(5).Range("L10")) _
And (Sheets(5).Range("B10") <> Sheets(3).Range("B10")) And (Sheets(5).Range("C10") <> Sheets(3).Range("C10")) And (Sheets(5).Range("D10") <> Sheets(3).Range("D10")) And (Sheets(5).Range("E10") <> Sheets(3).Range("E10")) And (Sheets(5).Range("F10") <> Sheets(3).Range("F10")) And (Sheets(5).Range("G10") <> Sheets(3).Range("G10")) And (Sheets(5).Range("H10") <> Sheets(3).Range("H10")) And (Sheets(5).Range("I10") <> Sheets(3).Range("I10")) And (Sheets(5).Range("J10") <> Sheets(3).Range("J10")) And (Sheets(5).Range("K10") <> Sheets(3).Range("K10")) And (Sheets(5).Range("L10") <> Sheets(3).Range("L10"))
If Range("J2") = 0 Then
Sheets(5).Range("B10") = "Absent / Congé"
ElseIf Sheets(3).Range("B10") = "PT 9 S" Then
Application.Run ("Samedi")
Else: Application.Run ("BoucleCampergue2")
End If