Emploi du temps hebdomadaire

CISCO

XLDnaute Barbatruc
Bonjour à tous

Depuis quelque jours, je rame pour essayer de faire un emploi du temps avec et pour divers collègues.

En simplifiant le problème, il y a 4 professeurs, ce qui offre :
6 combinaisons possibles le lundi après midi (les profs travaillent par binome, et il y a deux classes), 6 possibilités le mardi mat, 4 le mardi après midi (1 seul prof nécessaire)... soit au total 6*6*4*6*6*6*6 = 186624 possibilités (Cf. fichier ci-joint, lignes 6 à 12).

Pour le moment, j'ai essayé manuellement d'organiser tout cela en fonction de critères pédagogiques et des désiderata de chacun. De un, ce n'est pas facile, de deux, on n'est pas sûr de ne pas passer à coté de possibilités intéressantes.

J'envisage maintenant une autre manière de faire :

* Lister toutes les possibilités,
* sélectionner celles donnant le bon nombre d'heures à chacun (avec une MFC par exemple),
* sélectionner ensuite celles répondant aux critères pédagogiques et aux désiderata de chacun.

Il y a du boulot. Par contre, je me vois mal écrire les 186 milles possibilités. Pour cela, quelqu'un pourrait-il me faire une petite macro le faisant dans le fichier ci-joint ?

En exemple, j'ai, sur le fichier ci-joint, lignes 19 à 24, mis les premières possibilités en ne changeant que les possibilités du vendredi.

Si vous avez des questions...

Merci d'avance.

@ plus

P.S : La macro peut aussi n'afficher que les lignes donnant le bon nombres d'heures à chacun, c-à-d avec la condition à droite donnant VRAI. Cela serait plus simple.
 

Pièces jointes

  • EDT base.xlsx
    19.1 KB · Affichages: 157
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour Cisco :) :)

Vois si cela peut t'aider (voir Feuil2)
NB: un peu de patience est necessaire !!

PS: j'ai travaillé sur le 1er fichier posté
 

Pièces jointes

  • EDT base.xlsm
    33.9 KB · Affichages: 141
  • EDT base.xlsm
    33.9 KB · Affichages: 142
  • EDT base.xlsm
    33.9 KB · Affichages: 136
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour à tous

Grand Merci Pierrejean. Ca tourne bien assez vite pour ce que j'en ai à faire, et c'est bien plus rapide que certaines de mes propositions par formules.

Bonsoir Cisco, pierrejean :),

La proc est rapide (env 22s). Cependant je vois que cela fournit tout de même 186624 prétextes à quatre personnes de se fâcher les unes avec les autres dans la salle des profs.;)

Je ne vois pas ce que tu veux dire :). En plus, en réalité, il y en a encore plus (j'ai simplifié la problème pour ne pas avoir 800 mille ou 1 million de combinaisons possibles !).

@ plus
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Re

En voila encore un peu plus
Mais le temps s'allonge (chez moi de 16 secondes à 40 secondes )
Il reste à faire ensuite des filtres sur les colonnes S T U et V
Un exemple de resultat en Feuille 3
NB:En Feuille 1 cellule E11 j'ai interprete C et non D
 

Pièces jointes

  • EDT base.xlsm
    39.6 KB · Affichages: 100
  • EDT base.xlsm
    39.6 KB · Affichages: 99
  • EDT base.xlsm
    39.6 KB · Affichages: 107

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour à tous

Les propositions de pierrejean fonctionnent bien. Encore merci pour ces macros.

J'avais simplifié ma précédente demande. Malheureusement, dans les 12 solutions trouvées grace à ces macros, et à quelques autres trouvées à la main, il ni a pas de possibilités convenant à tous.

Par conséquent, j'essaye de reprendre le problème à la base, sans simplification. Dans ce cas il y a 10 x 20 x .... = 4 320 000 000 possibilités (Ce n'était pas un million de cas comme écrit dans un de mes précédents posts). Aïe, aie, aïe (Cf. le tableau B8:Y27 sur le fichier ci-joint).

Cela fait beaucoup de possibilités, trop pour les afficher toutes ! Il y a en réalité une autre contrainte, à savoir le nombre d'heures hebdomadaires de chaque prof. Comme il y a plusieurs possibilités pour chaque prof, cela donne plusieurs combinaisons (Cf. le tableau AA29:AE43).

J'ai mis un exemple en ligne 46 convenant par rapport à ces 2 critères (respect de l'emploi du temps des élèves et du nombre d'heures hebdomadaires des prof).

Pourriez vous me faire une "petite" macro listant touts les possibilités utilisant le tableau B8:Y27 donnant le bon nombre d'heures à chaque prof ? Autrement dit, il faudrait faire la liste de toutes les possibilités de combinaisons créées à partir du tableau B8:Y27, mais n'afficher que celles donnant le bon nombre d'heures hebdomadaires. Peu importe si cela met 10 minutes pour afficher le résultat :).

Merci d'avance.

@ plus

Cisco.
 

Pièces jointes

  • base tout forum.xlsx
    26.3 KB · Affichages: 112
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonsoir

Personne n'a une idée pour résoudre mon "petit" problème ?

On peut peut être prendre le sujet dans l'autre sens, déterminer pour chacun des professseurs, A, B, C, D et E, les combinaisons permettant de leur attribuer le bon nombre d'heures hebdomadaires (AA29:AE43) (18, 18,5 ou 19 h pour A, C et D, 14, 14,5 ou 15 h pour B et 9, 9,5 ou 10 h pour E), puis essayer de combiner les divers cas obtenus compatibles ensemble pour obtenir les combinaisons du premier tableau (B8:Y27). Peut être...

@ plus
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour Cisco

J'ai fait une petite etude de ton probleme et même pondu une macro mais.....
Il faudrait a la dite macro sur mon ordinateur un mois de travail pour explorer toutes les possibilités
1 000 000 de possibilités examinées en 453 secondes
Des que j'ai un moment , je regarde selon ta derniere idée mais j'ai peu d'espoir
Je pense qu'il serait bon de faire appel à quelques confreres specialisés dans les stats
 

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour

Merci Pierrejean pour ton aide.

Effectivement, si cela met tant de temps que cela pour 1 million de cas, c'est que la méthode envisagée n'est pas la bonne.

Pour ce qui est de ma dernière idée, je m'y suis penché hier soir, mais n'ai pas trouvé de méthode rigoureuse pour lister toutes les combinaisons possibles donnant 18 h (ou 18,5 ou 19 h) au prof A (ou C ou D). Je chercherai davantage dans la journée. Cela ne presse pas, donc, ne te prend pas la tête avec ça.

Encore merci.

@ plus

Cisco
 

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour

En partant du nombre d'heures hebdomadaires des professeurs, j'arrive encore à environ 200 millions de possibilités ! Bien sûr, certaines sont impossibles, mais je ne vois pas comment les éliminer simplement...

Pas évident.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonjour à tous

Je vais essayer de me remettre sur ce sujet. Je ne vois pas trop de possibilité pour simplifier intelligemment le problème. Faute de mieux, Pierrejean, pourrais tu mettre ta macro sur ce fil ? Même si cela prend trop de temps, cela m'apprendra toujours deux ou trois trucs en VBA :).

@ plus et merci.
 

pierrejean

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Salut Cisco

Voila la macro en question
Elle est limitée à 1 000 000 de codes examinés

Code:
Sub calcul()
debut = Timer
ligne = 1
feuille = 2
Set dico = CreateObject("Scripting.dictionary")
a = Array("BD", "AB", "AC", "AD", "AE", "BC", "BE", "CD", "CE", "DE")
b = Array("CDAB", "ABCD", "ABCE", "ACBD", "ACBE", "ADBC", "ADBE", "AEBC", "AEBD", "BCAD", "BCAE", "BDAC", "BDAE", "BEAC", "BEAD", "CDAE", "CEAB", "CEAD", "DEAB", "DEAC")
c = Array("CE", "AC", "AD", "AE", "CD", "DE")
d = Array("BC", "AB", "AC", "AD", "BD", "CD")
e = Array("ACBD", "ABCD", "ADBC", "BCAD", "BDAC", "CDAB")
Valeurs = Array(4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 1.5, 1.5, 1.5, 1.5, 4, 4, 4, 4, 2, 2)
For n = LBound(a) To UBound(a)
  For m = LBound(b) To UBound(b)
    For nn = LBound(c) To UBound(c)
      For nnn = LBound(a) To UBound(a)
        For nnnn = LBound(a) To UBound(a)
          For nnnnn = LBound(a) To UBound(a)
            For nnnnnn = LBound(a) To UBound(a)
             For nnnnnnn = LBound(a) To UBound(a)
               For mm = LBound(d) To UBound(d)
                 For mmm = LBound(e) To UBound(e)
                    Set dico = CreateObject("Scripting.dictionary")
                    code = a(n) & b(m) & c(nn) & a(nnn) & a(nnnn) & a(nnnnn) & a(nnnnnn) & d(mm) & e(mmmm)
                    nbcode = nbcode + 1
                    If nbcode > 1000000 Then
                    MsgBox (Timer - debut)
                    Exit Sub
                    End If
                    For p = 1 To Len(code)
                     x = Mid(code, p, 1)
                     dico(x) = dico(x) + Valeurs(p - 1)
                    Next p
                    aa = dico.keys
                    bb = dico.items
                    For q = LBound(aa) To UBound(aa)
                       'Sheets("Feuil" & feuille).Range(aa(q) & ligne) = bb(q)
                       If aa(q) = "A" And bb(q) = 18 Then ok = ok + 1
                       If aa(q) = "B" And bb(q) = 14 Then ok = ok + 1
                       If aa(q) = "C" And bb(q) = 19 Then ok = ok + 1
                       If aa(q) = "D" And bb(q) = 18 Then ok = ok + 1
                       If aa(q) = "E" And bb(q) = 9 Then ok = ok + 1
                    Next q
                    If ok = 5 Then
                     Sheets("Feuil" & feuille).Cells(ligne, 6) = code
                      For q = LBound(aa) To UBound(aa)
                        Sheets("Feuil" & feuille).Range(aa(q) & ligne) = bb(q)
                      Next q
                     ligne = ligne + 1
                     Exit Sub
                    End If
                    If ligne = Rows.Count Then
                     feuille = feuille + 1
                     ligne = 1
                    End If
                    Set dico = Nothing
                    ok = 0
                 Next mmm
              Next mm
            Next
           Next
         Next
        Next
       Next
    Next nn
  Next m
Next
End Sub

PS: Si besoin je peux le commenter ( bien que ce ne soit ps mon point fort !!!)
 

CISCO

XLDnaute Barbatruc
Re : Emploi du temps hebdomadaire

Bonsoir à tous, bonsoir Pierrejean

Merci pour cette macro. Je vais essayer de comprendre tout cela... Pas évident vu mon niveau en VBA... Faut que je m'y mette.

@ plus et encore merci
 

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 887
dernier inscrit
MarcVeretz