Remplissage d'une grille d'emploi du temps
re,
ces 4 colonnes,
- uniquement "filtre" est utile pour vous. Supposons que vous voulez faire la grille pour la moitié des leçons (si une grille est impossible, on commence par exemple avec la 6è, donc toutes les lignes "6e, 6e1, 6e2, 6e/5e" restent "1" et autres lignes, vous les changez en "0" ou vide et vous lancez la macro et voila, la grille pour ces leçons. Puis vous ajoutez les leçons pour la 5e, plus tard pour la 4e, etc. cela peut vous aider plus tard, quand vous avez des problèmes et vous voulez vous concentrer sur une partie des leçons.
- séquence : c'est la séquence semi-aléatoire dans laquelle les leçons seront traitée par la macro et c'est la macro qui la crée. Donc si vous lancez la macro 2 fois, le contenu de cette colonne changera chaque fois. Donc, vous n'avez rien à faire avec cette colonne.
- index : c'est le numéro/index dans le tableau et vous voyez qu'il y a une formule dans ces cellules. Cet index est utilisé par la macro, par exemple, dans la dernière ligne de chaque cellule de la grille de "planning". Exemple, on a 3 leçons "Maths 6e de Arnaud" qui sont complètement identique et c'est seulement l'index qui les distingue. Comme c'est une formule, il n'y a pas de soucis pour vous.
- Check : est maintenant inutile et on peut la supprimer.
Je les déplacerai vers droit pour qu'elles vous embêtent moins ...
un instant.
Oh mais c'est génial le "filtre", si j'ai bien compris. Ça veut dire que je peux décider de ne placer que certaines leçons dans un premier temps en mettant "1" et les autres à "0", puis de placer les autres séances dans un second temps ? Mais ça garde les premières qui ont été placées, dans ce cas, ou bien ça rebrasse tout ?
Et d'autre part, la macro est-elle capable de jouer avec les séances de 2h ou 3h, les modules, les projets etc. ? Ou bien toutes ces séances-là doivent-elles être en Fix ?
Merci !!
re,
non, votre enthousiasme est un peu trop tôt
- nouvelle outil sur la feuille "Double Entree", à gauche, on a ce tableau avec un résumé des leçons, important dans l'entête, on a les classes, donc uniquement 3è à 6è + combinaisons + eventuellement l'index 1 et 2. Puis les 8 premières colonnes sont comme vous les connaissez déjà, et les autres colonnes sont le nombre d'heures. Si vous poussez sur la flèche, une macro dépivotera ce tableau vers le 2eme, qui a le même layout que le tableau "tbl_planning" sans les 3 dernières colonnes. Après cela vous pouvez modifiez ce 2eme colonne, par exemple supprimer un doublon si une lçon a une durée de 2 ou 3 heures ou ajouter des données. Si vous êtes content avec le contenu, vous choississez une cellule dans ce 2eme tableau et vous faites le raccoursi CTRL+MAJ+D et une macro (DoubleEntree2tblPlanning) copie le contenu vers le tableau "tbl_planning" (sans écraser les 3 dernières colonnes). Maintenant, vous pouvez lancer la macro avec des autres données (=l'année 2025-'26 au lieu de 2024-'25), mais aussi ... vous pouvez "fixer" quelques leçons dans ce dernier tableau, comme vous le décrivez ici dessus et puis duplicier (copier&coller) ce tableau "tbl_planning" à droit de ces tableaux de "Double Entree", par exemple c tableau à partir de la colonne BA. Comme çà, vous pouvez créer des scénarios avec de plus en plus leçons fixes, (vous décrivez bien le contenu du tableau dans la première ligne pour facilement retrouver plus tard). Une feuille, c'est +16.000 colonnes, donc vous avez de la place pour 1.000 scénarios que vous pouvez facilement recopier vers tbl_planning avec ce raccoursi CTRL+MAJ+D.
- les colonnes qui vous causaient des problèmes sont maintenant déplacé vers droit et grisées.
Hello !
Encore une nouvelle amélioration, avec un outil super pratique pour essayer plusieurs versions !!! Vous êtes trop fort ! Merciiii !!
Je fais tourner la macro. Déjà, il n'y a plus de bug, toutes les contraintes sont respectées, c'est déjà super.
J'écris ici les points qui restent à améliorer pour que le programme soit vraiment utilisable pour remplacer ce que nous faisons à la main chaque année (à l'occasion, si jamais vous avez encore envie de vous amuser sur ce programme, dans quelques temps...bien sûr ces points d'amélioration ne minimisent en rien la qualité de votre programme qui est déjà absolument génial, et je comprendrais tout à fait que vous me disiez que vous avez déjà largement assez travaillé sur mon problème !! De toute façon c'est toujours utile, même pour moi, d'avoir les points listés clairement) :
- la possibilité de fixer / défixer certaines cellules (en cliquant dessus par exemple), pour pouvoir refaire tourner la macro uniquement sur les cellules qui ne conviennent pas tout en gardant les autres inchangées.
- la possibilité de pouvoir choisir si un cours peut être deux heures d'affilée avec un autre cours de la même matière, ou encore deux heures dans la même journée. Par exemple, dans toutes les classes les 3 heures d'anglais doivent nécessairement être sur 3 jours différents, mais l'histoire géo en 3è peut très bien être 2 heures de suite (préférable d'ailleurs à 2 heures séparées dans la journée), le français peut avoir deux heures dans la même journée, ou encore les maths doivent être sur des jours différents mais en 6è comme il y a 4 heures, une même journée peut en avoir 2 heures...bref, bien évidemment vous ne pouvez pas deviner toutes ces précisions, donc je me dis qu'il pourrait peut-être y avoir une option dans le tbl_planning où on choisirait pour chaque cours oui/non pour deux heures d'affilée, et oui/non pour deux heures dans la même journée... sans que le "oui" impose une obligation, mais juste pour dire que ce n'est pas interdit...
D'ailleurs, désolé, le 10 points / 1 point (10 pour deux heures d'affilée, et 1 pour deux heures même journée) n'est pas très utile du coup, car certaines matières préfèrent avoir deux heures de suite que deux heures dans la même journée...
- la possibilité de faire apparaitre directement les emplois du temps des profs dans un onglet.
- enfin, et surtout (sinon les profs ne vont jamais accepter ma proposition de passer par l'informatique plutôt qu'à la main !!), un moyen que la macro puisse limiter les heures de trou à 2 heures dans la semaine. Pour rappel, une heure de trou est une heure libre entre deux heures travaillées, MAIS si j'ai cours en 4 et pas cours en 5, ce n'est pas considéré comme une heure de trou, de même si c'est le contraire. Je crois que le comptage actuel ne prend pas en compte cela, ce qui explique les grands nombres dans la colonne "trous", même s'il est vrai qu'il y a beaucoup trop d'heures de trou pour le moment pour les profs.
Rien à voir, mais je me demandais... est-ce que l'IA pourrait être utile pour résoudre ce problème d'emploi du temps selon vous ? Je ne sais pas si vous y faites appel... moi je ne m'y connais pas assez pour juger, mais certaines personnes m'ont dit que l'IA pourrait proposer une grille d'emploi du temps répondant aux contraintes, ou bien proposer un code VBA qui correspondrait aux contraintes.... qu'en pensez-vous ?
Merci infiniment !! Je continue mes essais, je vous tiendrai au courant !
re,
- votre remarque concernant IA, je ne sais pas comment traduire ce problème en IA, donc aucune idée ... . Ma solution pour résoudre ce problème, c'est "brute force", sans savoir les conditions, essayer à faire des combinaisons aléatoires et si ma combinaison est mieux que l'avant-dernier, je le conserve, autrement, c'est pour la poubelle. C'est comme jouer le lotto et on fait autant de tirages jusqu'au moment où on obtient 4 ou 5 numéros corrects, une sorte de tricherie sans fin.
- pour les "trous", il faut donc vérifier chaque demie-journée individuellement, voir colonnes EY-FM de "aux", les lignes 4-39 montrent la présence d'un prof, la ligne 2 = le nombre de présences et la ligne 1, c'est le nombre de "trous", cad, si on a plusieurs présences pendant une demie-journée, si on a par exemple "0101", c'est un trou, si on a "1001", ce sont 2 trous. La cellule EW1 compte le nombre de fois que EY1:FM1 est >2. Je n'ai pas encore vu que ce nombre est >0, donc je suppose que ma définition de "trous" est fausse.
- pour les heures la même journée ou demie-journée, j'ai ajouté 2 colonnes, voir colonnes N:O de "input". Si ces cellules sont vides, alors, c'est maximal une leçon par demie-journée et/ou journée. Si ce nombre est >1, c'est le nombre maximum pour une demie-journée ou une journée. Donc vos "maths" en "6è", je l'ai mis à 2 et 2. Attention, si la durée d'une leçon > 1, ce chiffre en colonnes N:O doit être >= à cette durée (il y a une MFC pour cela).
c'est midi, je m'en vais, voici ma dernière version, mais je pense qu'il y a encore un bug, parce qu'elle ne trouve plus une solution, mais vous pouvez déjà voir ma calculation pour les trous (vous pouvez modifiez les "0 et 1", tout le reste est interdit, dans la plage de brouillon FO4:FO39 et vérifiez si le nombre de trous est correct en FO1) et puis ces colonnes N:O
ps. votre version d'excel, c'est bien 2016 ou avez-vous déjà 365 ?
re, une heure est 55 solutions plus tard, dont 3 presque 100% (sauf les heures "SAME")
Etes-vous d'accord avec le nombre de trous dans les cellules EY1:FM1 ?
Re,
J'ai la version 365...
Merci beaucoup encore une fois pour ces améliorations ! Je vais essayer de jouer avec pour tester différentes options et voir ce que ça donne, et je vous dis !
- Pour les trous, j'ai regardé sur la feuille Aux, mais je pense que le comptage n'est pas le bon. Par exemple dans la version que vous m'avez envoyée, par exemple Cécile devrait avoir 3 trous (en 1.4 ou 1.5, en 2.4 ou 2.5, et en 3.3), Laetitia 7 trous (3 heures le mardi, 2 heures le jeudi, et 2 heures le vendredi), Floriane 4 trous (en 2.3, en 3.4 ou 3.5, en 4.2, et en 4.4 ou 4.5), etc. Je ne sais pas si j'ai assez bien expliqué comment on doit compter...
- Question à propos des trous, la macro ne fait que les compter, ou bien y a-t-il une commande dans la macro qui fait en sorte de minimiser les trous pour les réduire à 2 maximum par semaine ?
- De même pour les demi-journées libres, la macro n'est pas capable, je crois, d'imposer que tout le monde ait au minimum 2 demi-journées libres, c'est bien ça ? C'est à moi d'imposer quelles demi-journées doivent être libres, c'est ça ?
- Super pour les colonnes "max demie" et "max jour" sur la feuille input ! Du coup vous avez supprimé l'histoire du 10 points / 1 point pour le 4è triplet des scores des solutions ?
- Question : Est-ce que si la colonne "max demie" est à 2, cela indique qu'on peut mettre 2 heures de suite, ou bien simplement 2 heures dans la même demi-journée (par exemple en 1 et en 4) ? L'idéal serait en fait qu'on puisse choisir oui/non pour faire 2 heures d'affilée, et oui/non pour faire 2 heures dans la même journée (que ce soit sur la demi-journée ou sur la journée complète, peu importe)...
Je vous tiens au courant de mes tests !! Merci encore infiniment, et encore bravo !
re,
je mettrai le problème un moment dans le frigo, j'ai modifié des choses et puis lancé la macro durant 250 tentatives dont 7 (=3%) étaient acceptables (=aucune violation des locaux, profs et leçons), mais le nombre de semie-journées et de trous n'étaient pas okay. Ces 250 tentatives duraient 5 heures, donc assez long. D'où mon dilemme, dois-je encore faire cet effort ? La seule chose qui changera sera la durée, je suppose, quand je fais toutes les calculations en mémoire et j'ajoute de l'intelligence dans les boucles, que je ferai ces 250 tentatives en une heure, mais ce 3% ne changera pas
Donc voici ma dernière version. Dans la bibliotheque, vous trouverez ces 7 solutions acceptables
000|000|000|201|036, ces 3 triplettes 0 sont pour les profs, locaux et leçons, donc okay, ce 2 et ce 1 veut dire que 2 profs n'on pas leur 2 semie-journées libres et qu'un prof a plus 2 "trous" (voir colonnes FA:FU.
Vous pouvez copier&coller une solution de la bibliothèque vers la feuille "planning" avec le raccoursi connu CTRL+MAJ+B, mais après vous pouvez encore essayer à améliorer cette solution avec le bouton ou la macro "améliorer". Il y a une possibilité que la macro supprime encore quelques infractions.
Votre question concernant ces trous, je suppose que mon comptage est correcte maintenant et vous pouvez constater que la macro essaie à minimiser (= respecter le max de 2) les trous et les semie-journées. (Les semie-journées sont plus important que les trous). Pour le moment, j'avais partout des "X" dans ce tableau de la feuille "paramètres". Les demie-journées des profs individuels sont importantes, c'est pourquoi le reste est grisé (sert à rien).
Pour les semie-journées (plage EG:EN) et ces 10 vs 1 point, c'est maintenant 2 vs 1 point pour la même demie-journée ou journée. Je ne sais pas si vous voulez supprimer cette différence, mais pour le moment, cela n'a pas d'avantages, parce que le problème des trous est les démie-journées n'est pas encore résolu.
Pour les jours et demie-jours, si on met 2, pour le moment cela ne veut pas encore dire 2 heures suivantes. Un contournement, si vous modifiez la durée d'une leçon des 2 dans le tableau de "input" de 1 à 2 et le filtre de la 2eme leçon de 1 à 0, comme çà ce seront 2 heures suivantes.
PS. just for the fun, ce soir, je lancerai la macro pour 1000 boucles, juste pour voir si la macro sait éliminer la 4eme triplette (ou améliorer 201) ...
Bonjour !
Merci encore pour cette nouvelle version. Pas de problème pour la mise au "frigo", je vous comprends !! Ce n'est pas la peine de vous embêter pour le moment à réduire la durée, car moi aussi je lance la nuit (en général je fixe 500 boucles, et il faut encore une partie de la matinée pour qu'il finisse). On verra la vitesse de traitement éventuellement plus tard si les autres contraintes sont résolues.
Un contournement, si vous modifiez la durée d'une leçon des 2 dans le tableau de "input" de 1 à 2 et le filtre de la 2eme leçon de 1 à 0, comme çà ce seront 2 heures suivantes.
Vous me dites que je peux modifier la durée d'une leçon en la mettant à "2", mais il me semblait que la macro ne pouvait pas travailler avec des leçons Free qui sont de 2h ou de 3h. Elle le peut maintenant ??
J'ai essayé (sur la précédente version du fichier) en fixant beaucoup plus de choses, pour donner moins de difficultés à la macro. Par exemple, j'ai imposé des demi-journées libres à certains profs, j'ai complètement fixé les LV2, et j'ai fixé les demi-journées pour chaque séance d'anglais, afin d'être sûr qu'elles ne tombent pas sur la même demi-journée. Même si en vrai, lorsqu'on part de zéro en début d'année, c'est impossible de faire ça... mais bon, c'était pour tester ce que donnerait la macro. Résultat : ça m'a donné beaucoup de cours placés exactement comme dans notre vrai emploi du temps de cette année, mais également encore des emplois du temps profs trop plein de trous, et certains cours qui n'avaient pas "le droit" d'être sur la même journée qui l'étaient pourtant (un gros score sur le SAME...par exemple les maths en 4è ou en 3è)... mais c'était déjà largement mieux !!!
Maintenant, j'ai essayé votre dernière version, mais au bout de quelques minutes, la macro me renvoie une erreur d'exécution...pour la macro "améliorer" également...Ça ne vous le fait pas chez vous ?
En attendant, je regarde la solution que vous avez trouvée avec peu d'erreurs pour voir ce que ça donne ! Je vois que vous avez réussi à faire que la macro tienne compte de la minimisation des demi-journées libres et des heures de trou !! Bravo !!! Juste un tout petit truc qui doit être facile à modifier : Le samedi matin (c'est à dire les heures 5.1 et 5.2 uniquement) compte comme une demi-journée, donc si quelqu'un ne travaille pas sur le samedi matin, ça lui fait une demi-journée libre en plus. Je vois que le programme ne compte pas du tout le samedi. A part ça, le comptage me paraît tout à fait bon !! Encore une fois, je suis impressionné !
Si vous avez la possibilité de modifier juste l'histoire du samedi matin avant de "mettre au frigo" ce serait génial !! Et si vous avez une idée de pourquoi cette erreur d'exécution....(???).
Une petite question : je n'ai pas bien compris à quoi sert la grosse flèche "MACRO" dans l'onglet "Double entrée"... désolé...
Merci encore !!! Je vous tiens au courant !
Donc juste pour être plus précis sur l'histoire du samedi matin : si quelqu'un a par exemple le jeudi apres midi de libre, et le samedi matin libre, cela compte bien comme 2 demi-journées libres, donc validé.
Du coup ce sera moins difficile pour la macro de trouver minimum 2 demi-journées libres à tout le monde.
re,
j'avais fait 2 betises hier avant de sauvegarder ce fichier, j'avais supprimé une feuille que j'utilisais encore dans VBA et j'avais grisé ces cellules du tableau "tbl_profs" et pourtant, j'utilisais ses couleur dans la grille de "planning", donc désolé, c'étais ma faute. Donc, hier soir, il n'a rien fait chez moi !!!
Bon, j'ai modifié ce problème du samedi avant-midi et naturellement, c'est plus facile à trouver au minimum 2 demi-jours !
Quand vous lancez la macro pour x tentatives, vous pouvez l'arrêter à chaque moment avec CTRL+Break, donc le matin, il ne faut pas attendre jusqu'au bout. Comme vous pouvez le voir dans la PJ, je l'avais lancer pour 999 tentatives est je l'ai arrêté après 392. Puis vous poussez sur le bouton "meilleur solution" (ici c'était 000|000|000|100|038, donc un prof manque une demie-journée, mais les trous sont okay et il y a 38 penalités pour "Same". Parce que la 2eme boucle de la macro s'arrête après 250 boucles, peut-être il existe encore une autre solution avec ces données, donc j'ai lancé la macro "améliorer" (pousser ce bouton) et la macro n'a pas pu résoudré cette semie-journée, mais les pénalités "same" sont maintenant 28 au lieu de 38, donc mieux. Vous voyez avec cette macro, vous recevez une t une variante de la même solution et peut-être vous préférerez cette variante !!!???
Je n'ai pas encore vérifié pour voir si les "X" du tableau tbl_profs fonctionnent comme prévu, peut-être demain. Mais j'ai ajouté des colonnes à ce tableau avec le nombre de présences, trous et demie-journées.
Bonsoir,
génial merci beaucoup !! Je vais faire tourner ce nouveau fichier !!
Pour les X du tableau des demi-journées, j'ai toujours eu l'impression qu'ils fonctionnaient très bien lorsqu'on imposait des demi-journées libres !!
Par rapport aux séances de 2h ou 3h, vous me confirmez qu'on est obligés de les laisser en Fix ? Je ne peux pas les faire jouer dans la macro ?
re,
non, ces séances de 2-3 heures ne sont pas obligatoire "fix", chaque tentative de la macro et après ces leçons fixes et avant les autres séances d'une heure (la colonne "séquence"), ont leur donne une position aléatoire, mais dans les boucles successives dans ce même tentative, la macro ne les déplace pas, parce que la macro est concu pour déplacer des séances uniques.
C'est pourquoi, je voulais ajouter de l'intelligence et de la vitesse à la macro pourque la macro pourrait faire plus de tentatives /heure, par exemple en s'arrêtant plus tôt si une tentative s'avérait infructueuse
Merci pour votre réponse !
Oui c'est vrai que rajouter de la vitesse et de l'intelligence serait génial, mais faites comme vous pouvez, c'est déjà génial ce que vous avez fait !!
Je fais tourner la macro, je fais des essais en modifiant l'input...
je vous tiens au courant !!