MacOS Générer ordre de passage aléatoire sans doublon avec intervalle donné
Bonjour
Une idée de pourquoi ça plante ainsi ? (là ça fait bien 10min que ça tourne avec excel non réactif...)
A la vue que vous avez postée je comprends oui. Désolé mais en faisant le code j'avais testé en triant préalablement sur la colonne "Groupe contraintes"
Le souci que vous rencontrer vient des cellules vides.
Si votre colonne "Groupes contraintes" contient FED-x sur chaque ligne, le code fonctionne très bien.
Je vous propose en premier de refaire un test en triant au préalable le tableau contraintes sur la colonne "Groupes".
Après je vous poste le code adapté qui, si vous êtes d'accord, fera un tri
Bonjour,
Alors, en triant le tableau des contraintes sur les groupes, donc en ayant les sessions sans groupes en fin, le script a fonctionné.
Par contre, je constate que les dates de passages ne sont pas vraiment aléatoires... et que du coup, les ordres de passages ne servent plus à rien. Ça ce n'est pas grave. En revanche, ne pas vraiment tirer au sort les étudiants (avec les contraintes bien sûr) sur les dates de passages, ça m'embête davantage.
Dans la capture ci-dessus, il n'y a aucun mix entre FED-A et FED-C les lundis, or c'est entièrement possible.
En fait, les ordres de passage précédemment déterminés devraient être supprimés (et même pas déterminés) et remplacés par les dates de passages déterminées aléatoirement en respectant les contraintes.
Est-il possible d'adapter le code pour faire ça ?
En tout cas, merci beaucoup pour l'aide.
Par contre, je constate que les dates de passages ne sont pas vraiment aléatoires... et que du coup, les ordres de passages ne servent plus à rien.
Pas compris ...
Une fois le tableau copié dans le tableau de droite, le code va trier pour mettre l'ordre de passage correct. N'oubliez pas que, dans mon post précédent je vous ai dit d'ajouter un CALL Generer_date dans le code Generer_Ordre_de_Passage.
En revanche, ne pas vraiment tirer au sort les étudiants (avec les contraintes bien sûr) sur les dates de passages, ça m'embête davantage.....
En fait, les ordres de passage précédemment déterminés devraient être supprimés (et même pas déterminés) et remplacés par les dates de passages déterminées aléatoirement en respectant les contraintes.
Ah je n'avais pas compris comme cela. Le code fait le tirage au sort puis attribue les dates de passage selon le groupe trouvé en colonne B.
En fait peut-être que vous voulez que les dates de passage soit réalisées selon l'ordre de passage 1, 2, 3, 4.... comme je vous avais montré ici --> https://forum.excel-pratique.com/s/goto/1118514
Eventuellement pouvez-vous me donner une vue de l'idéal pour vous
Alors, voilà une vue de ce que j'aimerais être trouvé par le script, aléatoirement ;)
Et encore, j'ai modifié manuellement, donc l'aléatoire... c'est parfois un peu trop groupé ^^
(j'ai masqué les colonnes des ordres de passage qui ne sont plus nécessaire et porte à confusion).
Je n'arrive pas à déterminer un algorithme qui fasse la selection...
Mais peut-être ceci :
On affecte un compteur à chaque session de valeur le nombre d'évalués.
On se place sur la première ligne du Tableau1_Tri_Noms, et on choisit aléatoirement une session possible pour lui (dans l'exemple ce sera un des deux lundis ou un des deux jeudis).
Si pas de session possible on affiche une erreur, sinon on diminue un compteur du jour choisi de 1 pour refléter les places restantes et on passe à la suite.
Ligne suivante du tableau : même chose.
Bon c'est une version très édulcorée, mais peut-être que je commence à voir un schéma se dessiner. Et peut-être ça aidera à comprendre mieux ce que je voudrais avoir ^^
J'ai préparé ceci pour generer les dates
1. tri du tableau contraintes selon la valeur des groupes contraintes
2. On genere les dates dans la colonne Date de passage du tableau de gauche
3. ensuite le tableau de gauche est copié dans le tableau de droite
4. Puis on retrie sur la colonne Date de passage dans le tableau de droite.
NB : on peut aussi trier dans le tableau de gauche avant de copier vers le tableau de droite bien entendu.
cela donne au final ceci
Par contre je ne vois plus à quoi servira la colonne de passage et le code associé à la création de l'ordre. Il pourrait servir dans le cas où les dates ne seraient pas nécessaires
Votre avis sur le résultat ?
Bonjour,
J'ai préparé ceci pour generer les dates
1. tri du tableau contraintes selon la valeur des groupes contraintes
2. On genere les dates dans la colonne Date de passage du tableau de gauche
3. ensuite le tableau de gauche est copié dans le tableau de droite
4. Puis on retrie sur la colonne Date de passage dans le tableau de droite.
NB : on peut aussi trier dans le tableau de gauche avant de copier vers le tableau de droite bien entendu.
cela donne au final ceci
Le soucis c'est que pour les séances où il y a les deux groupes, il n'y a aucun mélange avec votre tirage au sort.
J'aimerais quand même que ce soit possible, même si par hasard il se pourrait que les groupes ne soient pas mélangés.
J'ai aussi du mal à comprendre pourquoi il faut impérativement trier le tableau des dates de passages...
Par contre je ne vois plus à quoi servira la colonne de passage et le code associé à la création de l'ordre. Il pourrait servir dans le cas où les dates ne seraient pas nécessaires
La colonne "Ordre de passage" ne sert effectivement plus à rien, et peut être masquée.
Le code créé au début du sujet pour la remplir ne servira plus, à moins qu'on ait juste besoin des ordres de passages, sans aucune contrainte.
En tout cas, merci bien pour votre aide.
Le soucis c'est que pour les séances où il y a les deux groupes, il n'y a aucun mélange avec votre tirage au sort.
J'aimerais quand même que ce soit possible, même si par hasard il se pourrait que les groupes ne soient pas mélangés.
heu... c'est à dire. Je n'ai pas compris
La colonne "Ordre de passage" ne sert effectivement plus à rien, et peut être masquée.
Oui c'est une bonne chose aussi sachant que cela peut toujours servir plus tard
J'ai aussi du mal à comprendre pourquoi il faut impérativement trier le tableau des dates de passages...
C'est dû au traitement à faire lorsque vous avez une cellule vide dans le tableau contraintes.
La solution est de traiter d'abord où vous avez FED puis de faire les cellules vides. D'où le tri. Si vous ne triez pas le code tourne en boucle comme vous l'avez constaté précédemment
Faites un test en remplissant les cellules vides de FED-A et FED-C. vous verrez que le code ne triera pas le tableau des contraintes.
Bonjour,
Désolé pour le délai de réponse
pas mal occupé ce WE
Alors en triant le tableau et en lançant la macro je me suis rendu compte d'un truc, c'est que j'avais fait une faute de frappe dans deux groupes : j'avais mis FED-A au lieu de FED-C, donc je n'avais que des FED-A.
La macro se lançait bien, mais faisait planter excel , probablement parce que dans une boucle infinie.
Il serait judicieux d'introduire un mécanisme de sortie de boucle et donc d'un affichage d'erreur...
Je vais essayer de faire quelque chose en ce sens à l'occasion.
Sinon pour revenir à la macro actuelle, quand je reclic sur le bouton, ça ne change plus rien dans les ordres de passage (là je parle des sessions, jours de passage).
Ça devrait à minima changer les étudiants affectés dans les différents jours.
Bonjour
Pas de souci. WE pour chacun et repos ou autre activité
Alors en triant le tableau et en lançant la macro je me suis rendu compte d'un truc, c'est que j'avais fait une faute de frappe dans deux groupes : j'avais mis FED-A au lieu de FED-C, donc je n'avais que des FED-A.
Je n'ai pas compris de souci de faute de frappe... vous voulez dire qu'il n'y avait pas de FED-C dans le tableaucontraintes ?
La boucle infinie est due au fait que vous avez une cellule vide entre deux FED dans le tableau contrainte.
Si on introduit un message d'erreur et une sortie, vous n'arriverez jamais à compléter le tableau de gauche. Raison pour laquelle le tableau contraintes est trié avant.
Sinon pour revenir à la macro actuelle, quand je reclic sur le bouton, ça ne change plus rien dans les ordres de passage (là je parle des sessions, jours de passage).
Oui c'est logique. Si vous voulez que les dates de passage change, il faut modifier dans la tableau contraintes genre inverser FED-A et FED-C par exemple
Ou alors se recaler sur l'ordre de passage mais là, il faut tout refaire au niveau code et à priori cela va être nettement plus complexe
Votre avis?
Edit : Pour être plus précis, la boucle infinie vient du fait que si vous ne triez pas le tableaucontraintes, les cellules vides vont attribuer une date à FED-A par exemple. Du coup si plus bas vous avez encore une date à attribuer à FED-A et que dans le tableau de gauche vous n'avez plus que des FED-C, le code tourne en boucle sans trouver de solution.
J'avais bien trié le tableau des contraintes, mais il n'y avait que des groupes FED-A... Aucun FED-C. Avec toujours deux cellules sans groupes puisque les deux sont possibles.
Et j'avais une boucle infinie.
Pour le message d'erreur, il est acceptable qu'en ayant ce message, le tableau ne soit pas rempli, car il y a un souci dans les groupes, ou le nombre d'étudiants, etc...
On va analyser pas à pas
Dans le code générer_date, rajoutez cette ligne juste en dessous de Set c = .findnext(c)
If c.Address = prem Then MsgBox "La valeur " & TSContraintes.DataBodyRange(i, 3) & " n'est plus trouvée dans le tableau Tri_noms": Exit Subdites moi
Ok c'est déjà bien mais je pense que ce n'est pas logique que le code vous montre le message à ce moment là
Refaites un test après avoir remis les dates par ordre et désactivé le tri du tableau contraintes au début du code
Pour le tri ce sont ces instructions
If WorksheetFunction.CountA(TSContraintes.ListColumns(3).DataBodyRange) <> TSContraintes.ListRows.Count Then
....
....
end if
