VBA : condition à vérifier sur deux boucles

Cécile326 -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous

je suis en train de programmer sur un VBA un code qui affecterait à des agents différents des tâches selon les heures et les jours de la semaine. mais je ne sais pas comment coder le fait que je dois vérifier que l'agent est bien libre.
par exemple je dois affecter la tâche "surveillance" tous les jours de la semaine (5jours) de 12 heures à 13 (j'ai séparé les heures en périodes de 10minutes) heures à un agent différent chaque jour : il ne peut y avoir deux fois le même agent occupé à cette tâche dans la semaine (j'ai 7 agents de disponible).
ce que je voudrais écrire c'est :
for i = 1 to nbjour (je fais ma boucle pour affecter la tâche toute la semaine)
Randomize Time
selec = Int(Rnd * nbagent) + 1 (je tire un agent au hasard que j'appelle selec)
et ici ce que je voudrais c'est vérifier qu'il est libre tous les jours sur toute la plage horaire : donc en gros il me faudrait fixer un jour, regarder toute la plage horaire de 12 à 13. si c'est bon je change de jour. si ce n'est pas bon je tire au sort un autre préparateur et je recommence.
si c'est bon pour les 5 jours de la semaine, je lui affecte la tâche (ça je sais faire aussi).
je ne vois juste pas comment je peux imbriquer deux boucles ou je vérifie si ma condition est vérifiée, et surtout comment je sors de ces boucles si ce n'est pas le cas et que je dois tester un nouvel agent.

merci d'avance parce que j'ai du mal!!!!

2 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour Cécile, yg

regarde si cette maquette à adapter peut t'aider
https://www.cjoint.com/?gdm1QFZ6fj
"sem" est le nom de la plage D2:D6 correspond au 5 jours de la semaine

mais en 5 tirages, le 4 n'est jamais sorti! le veinard mais bonjour le masque chez les collègues...
Sub permanence()

Randomize
col = 4
lig = 2
Range("sem").ClearContents
For cptr = lig To lig + 4
flag = True
While flag = True
selec = Int(Rnd * 7) + 1
    If Application.CountIf(Range("sem"), selec) = 0 Then
    Cells(lig, col) = selec
    lig = lig + 1
    flag = False
    End If
Wend
 Next
End Sub
1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
Imbriquer deux boucles for :
for i= ...
...
for j = ...
...
next j
....
next i

L'instruction "exit for" permet de sortir de la boucle. Tu devras sans doute en avoir deux, pour sortir de tes deux boucles.

Ce n'est pas trop propre de faire des "exit for", il vaut mieux utiliser des "do while", pour des raisons de clarté.
0