Limiter Do ... Loop

Fermé
S.Court - 26 mars 2014 à 23:07
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 27 mars 2014 à 09:29
Bonjour,

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

...

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
26 mars 2014 à 23:40
Bonjour,

Rien à voir avec le C donc ?
Je change le post de catégorie...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 312
27 mars 2014 à 09:29
bonjour,

pas compris ta macro pas de loop après do until

je ne bois le pourquoi du comment...

en attendant
si tu veux déclencher que si toutes les valeurs dans B10:L10 sont différentes

If [sum(1/(countif(B10:L10,B10:L10)))] = 11 Then

allégera peut-^tre un code indigeste


0