VBA : condition à vérifier sur deux boucles
Cécile326
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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!!!!
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!!!!
A voir également:
- VBA : condition à vérifier sur deux boucles
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
2 réponses
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...
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
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é.
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é.