Remplissage d'une grille d'emploi du temps
nouvelle version avec ces demi-journées,
si vous lancez la macro, pour le moment, il n'y a pas encore une solution, les cellules rouges des colonnes B:I et R:Y causent des problèmes, les cellules oranges des colonnes J:Q vous disent la matière de ce problème (oubien local oubien prof).
Re,
je vous renvoie le fichier avec mon idée de tableau à double entrée, qui va certainement pouvoir nous aider.
J'ai modifié plusieurs choses dans la liste "à faire" (en effet elle n'était plus correcte sur beaucoup de choses, c'est normal), mais je n'ai pas eu le temps encore de tout retoucher pour que les données soient bien conformes.
J'ai déjà joué avec la macro en modifiant la liste "à faire" et ça prend super bien en compte les contraintes spécifiées !!
Merci beaucoup pour la feuille paramètres, si vous pouvez la faire par demi-journées, cela permettrait de spécifier les demi-journées non-travaillées des enseignants...mais en vérité, les enseignants demandent à avoir par exemple, de manière variable, "une après-midi libre" ou "une matinée libre" (sans spécifier laquelle, et c'est nous qui voyons en fonction de ce qui est faisable dans l'emploi du temps), ou parfois "le vendredi après midi libre" en spécifiant, mais je ne sais pas si c'est programmable de la sorte, ou s'il faut fixer en amont les demi-journées des enseignants...Parfois il y a même certains professeurs qui ont besoin de ne pas avoir cours le mardi en 1ere heure par exemple ou le jeudi en dernière heure ... Je ne sais pas si cela pourrait être spécifié...
Du coup mon idée serait que la grille "paramètres" pourrait avoir en colonnes non pas juste les jours ou les demi-journées mais carrément les heures (donc 4 fois 8 heures + 2 heures pour le samedi), ce qui permettrait de cocher les heures possibles / impossibles. Mais je ne sais pas du tout si c'est programmable au niveau de la macro de tenir compte de ces contraintes supplémentaires. Ou encore s'il est possible de spécifier "une matinée" ou "une après midi" sans préciser laquelle (ça me parait moins faisable, ça).
Merci aussi pour Local X j'ai compris ce que vous vouliez faire ! En fait, on peut spécifier les salles pour vérifier si la même salle n'est pas utilisée deux fois au même moment, si j'ai bien compris ! Ce sera bien utile, ça ! Et la macro prendrait donc en compte les données de salles ?
Le nom Free me convient très bien. Mais par contre, pensez-vous qu'il soit aussi possible de faire du "semi-free", comme par exemple dire qu'un cours peut être placé uniquement sur le lundi matin par exemple mais sans le fixer complètement... ?
Pour le samedi après midi, après mes modifications, ça ne fait plus l'erreur, donc ne vous embêtez pas avec ça.
Est-ce que vous pensez qu'il est possible que la macro ne renvoie pas qu'une seule solution à chaque fois, mais toutes les solutions possibles ?
Désolé d'ajouter encore des questions et des contraintes, et merci pour cet impressionnant travail !!
Mince, on s'est écrit en même temps !
du coup j'avais utilisé votre fichier précédent pour faire mes modifications, que je vous ai renvoyées...
re, je n'ai pas encore fait quelque chose avece cette grill à double entrée, c'est pour plus tard.
- feuille "parametres" tableau "Tbl_Profs", vous pouvez choisir le couleur de la cellule et du font pour chaque professeur et leurs couleurs seront utilisés dans la feuille "planning".
- 9eme colonne du tableau "tbl_planning" (dans BDD), par exemple "lecon053", j'utilise une chaîne de 10 charactères "0/1" pour définir les demi-journées pour chaque leçon. Si la cellule est vide, alors il n'y a pas de restrictions, sinon 2 charactères par journée, lecon053 = "0000111100" (mais à cause de la formatage de la cellule, vous voyez "00|00|11|11|00" >>> les 2 premiers jours = 0, donc lundi et mardi sont interdit, puis les 2 suivant sont 1 et puis le dernier est de nouveau 0, donc "lecon053" est pour le jeudi ou le vendredi.
- je n'ai pas encore mis à jour les MFCs qui vous montrent les problèmes pour le planning (ces cellules rouges).
ma dernière version :
cela commence à compliquer les choses, tous ces restrictions
Bonsoir,
"On ne lâche rien BsAlv !" Aller c'est bientôt fini !
Et surtout bravo à vous pour le travail accompli ! J'ai hâte de pouvoir en faire autant !
@ bientôt
LouReeD
Et oui, bravo BsAlv, vous êtes vraiment impressionnant. Encore bravo pour ces nouveaux changements. Oui je sais qu'il y a beaucoup de restrictions...voulez-vous que je refasse une liste des différents points que j'ai écrits sur mes messages précédents, d'ailleurs ?
Je viens d'essayer de faire des modifications, en changeant les noms des leçons, en rendant Free des leçons qui étaient Fix, en spécifiant les demi-journées, ... mais cette fois la macro ne fonctionne plus, mais je n'explique pas pourquoi. "Impossible de lire la propriété RandBetween de la classe WorksheetFunction". Je ne sais pas ce que cela veut dire...
J'ai peut-être modifié quelque chose qu'il ne fallait pas ...
Merci encore !!
re, bonjour LouReeD,
@LouReeD, en effet, j'ai commencé quelque chose de fou..., je ne sais pas encore où cela va finir !
@nonoparadox, un nouveau essai,
- vos leçons comme "LV2 3è" avec des demi-journées différentes, je les ai renommé (=ajouté un index) pour pour voir la différence
- ce problème du "Randbetween" est resolu, j'éspère ...
- Dans ma macro, je déplace les leçons simples (=juste une cellule, pas ces type comme 6è/5è ou 4è, qui sont plusieurs, de 2 à 8, cellules), je n'ai pas encore trouvé une méthode pour faire cela
Un nouveau essai
la cellule D1 de "Aux" est une liste déroulante avec laquelle on voit le prof durant toute la semaine avec une MFC.
Pour le moment, j'y suis presque, juste encore quelque conflits ...
Re,
ah oui donc si j'ai bien compris, la macro ne peut pas jouer avec les modules et les projets, c'est bien cela ? Il faut donc laisser les séances de 2h ou 3h en Fix ?
re,
je n'avais pas pensé que vous vouliez traiter les leçons de cette manière, mais je m'adapte !
je pense que ceci est maintenant une version fonctionnante ...
Merci !
Ça s'affine, c'est super.
Je fais des essais avec le nouveau programme. Je n'ai pas compris dans l'onglet Paramètres a quoi servent les colonnes C et D, ni comment utiliser l'onglet Aux.
Dans l'onglet Paramètres, j'ai essayé de supprimer le X sur le prof1 par exemple pour le lundi matin, pour dire qu'il ne doit pas avoir de cours le lundi matin, mais ça n'a pas l'air de le prendre en compte...qu'en pensez-vous ? Ca fonctionne chez vous ?
En faisant des essais, je me rends compte de trois choses :
- il faudrait réussir à travailler non pas avec les demi-journées, mais avec chaque heure, pour placer les leçons... je ne sais pas si ça complique énormément le programme de pouvoir avoir une chaine de 34 caractères et non pas de 10 caractères pour la colonne I de l'onglet BDD, pour indiquer par heure où peut se situer telle ou telle leçon ? (4 heures pour chaque demi-journée du lundi mardi jeudi vendredi et 2 heures pour le samedi matin ; le samedi apres midi ne sert à rien, il n'y a jamais de cours).
Cela est notamment assez important pour indiquer au programme que par exemple les heures libres (X) en 6è et 5è doivent obligatoirement être des débuts ou des fins de journée.
Si c'est vraiment trop compliqué, on pourra fixer "à la main" comme avant, les modules, projets, LV2 etc. même si on est pas sûrs d'obtenir la meilleure solution, et de faire tourner ensuite uniquement les heures simples qui resteraient sur Free. Mais pour les heures vides, ça ne résoudrait pas le problème...
- il faudrait pouvoir indiquer au programme qu'il faut éviter 2 heures du même prof dans la même classe la même journée, mais cela n'est pas interdit non plus. Dans la pratique, ce n'est pas dérangeant d'avoir dans certaines matières par exemple 2 heures de suite, mais pour d'autres c'est impossible. Je ne sais pas s'il y a un moyen de spécifier cela...
- il faudrait que les professeurs aient tous 2 demi-journées libres pour les corrections de copies et préparations des cours.
Je vais remettre à jour toutes les heures dans le tableau BDD "à faire" pour que l'on puisse travailler sur une base parfaite avec toutes les bonnes heures...
Merci encore pour vos prouesses !!
- parametres colonnes C:D, la colonne C set comme source pour la liste déroulante pour la colonne 'Classe' (colonne B) du premier tableau de "BDD". La colonne D dit combien de colonnes, qu'on doit traiter avec cette classe ou combinaison, normallement 1, mais par exemple 4è = 2 (4è1 et 4è2) et 6è|5è sont 4 ...
- J'ai ajouté un "F" en face de chaque cellule de la grille de la feuille "Planning" pour indiquer que cette leçon est du type "Fix", donc si vous indiquez qu'on ne peut pas utiliser ce jour, la macro ignore cela pour ce type, désolé.
- J'ai ajouté 5 colonnes dans ce tableau, une pour chaque jour et là-dedans vous indiquez les heures avec une chaine de 4 chiffres pour l'avant-midi, puis un "-" et de nouveau 4 chiffres pour l'après-midi, donc par exemple "0101-1010". Pour le samedi, ce n'est qu'une chaine de 4 chiffres. On peut remplacer "0000-0000" par un "X" (plus facile pour vous).
- trop compliqué = je pense que ce problème est résolu comme çà, non ?
- 2 heures affilées, oui, cela est possible, mais je ne sais pas encore comment.
- 2 demi-journées libre, cela est difficile
J'éspère que je ne suis pas trop tard avec ce nouveau fichier avant que vous changez vos heures ...
Encore des nouveautés, vous êtes incroyable.
Je vais regarder ça demain.
Pour les demi-journées des enseignants, je me demande si on ne peut pas raisonner avec le même tableau que dans l'onglet paramètres, mais que ce soit la macro qui mette un X lorsqu'un enseignant est présent sur une demi-journée. Et qu'on spécifie au programme que X doit être inférieur ou égal à 7. Mais bon, je dis ça, mais je n'y connais rien dans la manière de programmer, donc je laisse votre génie s'exprimer... !!
J'ai ajouté un "F" en face de chaque cellule de la grille de la feuille "Planning" pour indiquer que cette leçon est du type "Fix", donc si vous indiquez qu'on ne peut pas utiliser ce jour, la macro ignore cela pour ce type, désolé.
Je n'ai pas bien compris ce que vous dites sur ce point. C'est sur prof1 que j'ai essayé d'enlever le lundi matin, mais prof1 n'a pas de leçon du type Fix. Pourtant j'ai l'impression que la macro n'a pas tenu compte du lundi matin où j'ai enlevé le X. Mais peut-être que je n'ai pas compris comment on devait utiliser cette fonctionnalité...
Ah au fait un dernier point : je crois que je vais mettre les vrais prénoms des profs, et les vrais noms des matières, ce sera plus simple. Je dois changer cela dans le tableau paramètres, et également dans la grille "à faire" de la BDD, c'est bien ça ?
Merci encore infiniment pour tout cet investissement !
Et au fait, la colonne "Demi-journée" du tableau de la BDD est toujours d'actualité quand même ? Je choisis d'utiliser soit la colonne demi-journée, soit les colonnes Lundi, Mardi, Jeudi, Vendredi, Samedi ? Ou bien il faut enlever la colonne demi-journée pour ne pas qu'elle rentre en contradiction avec les 5 autres ?
Merci !
Re,
je n'ai pas du tout compris pourquoi des F se placent dans le planning de cette manière, pas nécessairement sur les cours que j'ai mis en Fix, et à chaque essai ça ne se place pas sur les mêmes cours... je n'ai pas réussi à saisir cette fonctionnalité, désolé...
J'ai fait tourner la macro avec les nouvelles options, notamment les colonnes Lundi jusqu'à samedi où on peut remplir par exemple 1100-0011... ça fonctionne mais pas complètement, c'est assez bizarre, on dirait bien que la macro en tient compte, mais elle ne respecte pas complètement ces contraintes.... Vous l'avez constaté aussi ?
Merci encore !
C'est super de voir ce projet prendre forme petit à petit... !!
re,
encore une nouvelle version
Le problème des "F" est résolu, je crois.
On voit le nombre de leçons par professeur par demi-journée dans ce tableau de la feuille "BDD" à partir de la colonne AE. Si une cellulle est orange (par MFC) cela indique que normallement ce prof est libre pendant cette demi-journée si on consulte le tableau des profs de la feuille "Paramètres".
Si on consulte la colonne CA, les cellules roses (par MFC) sont des profs avec <= 2 semi-journées (inclu le SA-PM, c'est bien cela ?). Donc je sais vous montrer la manque de demi-journées, mais je ne sais pas l'éviter avec la macro ...
Maintenant, je pense que toutes les restrictions demandées sont dans ce modèle. (aussi par exemple 1 leçon par matière par journée pour une classe)
Que pensez-vous ? Voyez-vous déjà des erreurs ?
Je m'en vais pour le moment, je reviens ce soir avec des explications.
Peut-être qu'il faut renommer les "leçons" de la colonne A de "BDD", par exemple les leçons de "prof7" dans la 5eme, Si vous les renommez vers "Chemie", la macro sait éviter ces doublons par journée. "Leçon80" et "leçon81" sont trop vagues
re,
je les ai renommé moi-même et le resultat est presque parfait, il y a 6 doublons de leçons (voir les cellules mauves des colonnes J:Q) et ... tous les profs ont min 2 demi-journées libre
Oh je vais regarder ça !! Génial, merci !
inclu le SA-PM, c'est bien cela ?
Non, le samedi après midi ne doit pas du tout rentrer en compte dans le programme, on ne compte pas le samedi PM comme une demi-journée libre, l'école est fermée, il n'y a de cours pour personne.
Pour la colonne "Demi-journée", est-ce que la macro en tient toujours compte, malgré les 5 colonnes de Lundi à Samedi ? Est-ce que je peux remplir soit l'un soit l'autre ?
Est-ce que vous avez pu constater si la macro prend bien en compte les données de ces 6 colonnes ? J'ai l'impression qu'elle n'en tient pas compte, car sur l'exemple que vous avez fait tourner sur la v6, il y a LV2 le lundi aprem, ou encore mardi, alors que les colonnes "demi-journée" et "Lundi" et "Mardi" indiquent le contraire...
Merci pour cette nouvelle version en tout cas ! Je vais essayer de la faire tourner en modifiant des choses, et je vous dis !
Désolé, deuxième message.
Je viens de retoucher toutes les heures, il y en avait en trop, ça explique sûrement en partie pourquoi on n'arrivait pas à des solutions idéales. Là normalement toutes les heures sont exactes.
J'ai nommé chaque matière avec la classe, et j'ai mis les vrais prénoms des profs pour mieux m'y retrouver. J'ai décidé pour le moment de remettre en Fix tous les projets et modules, dans un premier temps, pour voir déjà ce que ça donne sur la rotation des autres matières. Dans un second temps j'essaierai de faire tourner les modules et projets également. J'ai également écrit Sc dans "local" pour désigner la salle de sciences qui ne peut pas être prise par deux cours en même temps.
Mais en lançant la macro, ça me renvoie une erreur d'exécution... Je ne sais pas ce qui a pu la faire bugger dans mes changements... J'espère que je n'ai pas fait de bêtise...Voici le fichier modifié.
Merci !!!!!!
Pour la colonne "Demi-journée", est-ce que la macro en tient toujours compte, malgré les 5 colonnes de Lundi à Samedi ? Est-ce que je peux remplir soit l'un soit l'autre ?
Bon, le choix est à vous, mais c'est l'un ou l'autre et je suppose que ce sera les 5 colonnes, parce qu'avec celles, vous avez plus de possibilités. La macro n'utilisait plus la colonne des "semi-jours", donc c'est normal que vous avez des conflits là ! Bon, après votre réaction suivante, je supprimerai l'un ou l'autre.
Avec vos restrictions, je ne suis plus capable à vous fournir une solution 100%, voir cellule EG2. J'ai 2 conflits de profs, 8 conflits de local, 3 conflits de leçons (au moment imprévu) et 14 conflits de leçons (même leçon le même jour). Si vous regardez aux colonnes B:BE, vous avez déjà une indication.
Feuille "BDD", tableau "tbl_Planning2", j'ai ajouté 4 colonnes pour vérifier le choix. Avec la dernière colonnes, vous pouvez filtrer les conflits. (Choisir les cellules non-vides).
Feuille "BDD", tableau "tabel5", on doit avoir 3 demi-jours maintenant, comme le samedi après-midi ne compte plus.
Feuille "paramètres", cellules B2:B3,
- B2 = le nombre de tentatives la macro fait en essayant de résoudre cette grille, pour le moment 50, mais si on ne trouve pas une solution, cela peut durer une demie-heure avant la macro s'arrête. Donc peut-être plus tard, vous pouvez modifier ce chiffre dependant votre patience. Souvent après 10 tentatives, on a déjà une indication concernant la solution et vous pouvez abandonner le processus avec "CTRL+BREAK" et puis lancer la macro "Recuperer_Meilleur_Solution", qui copie et colle la meilleur solution jusqu'à ce moment. Une possibilité = changer ce chiffre à 1.000, le soir avant d'aller dormir et le matin, peut-être ovus avez une solution 100%
- B3 = le nombre de tentatives à améliorer le résultat pendant ce tentative d'ici dessus, pour le moment 150. Vous pouvez vérifier le "statusbar" en dessous l'écran et là vous voyez le numéro du tentative de B2, puis la meilleur solution jusqu'à maintenant, puis le numéro du tentative "B3" pendant le tentative actuel et le résultat jusau'à maintenant. Si au bout de ces tentatives, le résultat est meilleur, on copie& colle les 50 premières lignes de "Aux" vers les lignes 100-150 comme backup et on ajuste ces chiffres dans le statusbar. Donc ce chiffre 150 est aussi arbitraire et depend aussi de votre patience.
PS. avec la solution actuelle, oubien il faut avoir plus de patience oubien il faut vérifier si vous pouvez résoudre ces 2 conflits des profs (et puis le conflits de locaux, etc)