Répartition groupe

Bonjour,

Je suis professeur au lycée, et dans le cadre d'un projet pédagogique, nous proposons aux élèves de choisir lors du troisième trimestre, un projet a réaliser. Cette année par exemple, il y avait 7 projets différents, mais cela peut varier d'une année à l'autre.

Ils font donc des voeux (classement entre 1 et 7) On souhaite favoriser les voeux 1 évidemment mais comme

Chacun des projets dispose d'un nombre minimal d'étudiant obligatoire, parfois nous nous référons aux voeux 2.

Chaque projet a un nombre maximal d'étudiants différent.

Jusqu'à présent, nous le faisions manuellement, mais je pense qu'avec Excel VBA, il serait possible de gagner du temps.

En regardant sur ce forum, je me suis inspirée, et j'ai essayé de faire quelque chose, mais malheureusement, cela ne fonctionne pas et je ne comprend pas mon erreur.

Serait-il possible de m'aider ?

En vous remerciant par avance,

86a.xlsm (39.08 Ko)

Bonjour,

On peut faire ce genre de choses d'un très grand nombre de façons, la façon de faire est en principe conditionnée par les règles d'attribution définies au départ qui doivent être claires pour tous et définir la méthode utilisée. Car selon la méthode on n'obtiendra pas le même résultat !

Au départ, il est indiqué que les voeux sont formulés par chacun, qui doit donc classer les 7 projets dans l'ordre de ses préférences. Le tableau initial ne fournit pas ces voeux : il indique ce qui est supposé être un rang du choix de chacun par projet, un tableau des voeux de 1 à 7 avec pour chaque voeu le projet choisi serait préférable ; cependant dans un cas comme dans l'autre (voeux ou projets) le tableau ne devrait comporter que des nombres de 1 à 7, sans doublon pour chaque ligne de 7 colonnes...

Ce n'est pas le cas : les données de départ sont donc incorrectes.

Ensuite, il faut préciser les règles d'attribution, dans quel ordre ces règles sont appliquées, dans quel cas et à quelle étape du processus fait-on appel à un tirage au sort...

Sans cela, il est toujours loisible à quelqu'un d'invoquer une règle alternative conforme aux contraintes pour contester le résultat issu de la règle utilisée.

Cordialement.

Merci pour votre réponse,

effectivement, je viens de me rendre compte qu'une erreur s'est glissée dans le re-copiage des voeux, toutes mes excuses.

Il n'y a pas de critère permettant de classer les étudiants, c'est un ordre aléatoire, et le choix ne se basera que sur les voeux des étudiants ainsi que sur le minimum d'étudiants par groupes.

Les étudiants font leur souhait en classant les projets : attribution d'un numéro a chacun des projets (1 si c'est voeu 1, 4 si c'est son 4e choix).

83a.xlsm (34.44 Ko)

Dois-je comprendre que tu présentes les voeux par projet (rang du projet pour chacun) plutôt que de les présenter par voeux (projet mis en voeu 1, projet mis en voeu 2...) pour masquer la façon dont on ne va pas satisfaire certains !!!

D'autant plus qu'il n'est dit nulle part que l'on s'efforcera d'atteindre le taux maximal de satisfaction du voeu 1 !

Ordre aléatoire, sans critère de classement, le choix ne se basant que sur les voeux des étudiants (qui sont tenus d'en faire pour tous les projets, donc un voeu sera toujours satisfait !!!). On est dans une totale manipulation.

Je suis prêt à donner des conseils aux intéressés pour faire exploser une telle façon de gérer au détriment de tous...

Seul point positif que je trouve : cela m'a évoqué (non sans quelque émotion) l'analyse institutionnelle développée par feu Georges Lapassade (professeur un peu trop oublié aujourd'hui).

Effectivement, Chacune des colonnes, représente le numéro que chaque élève a attribué au projet i dans sa liste.

Je ne comprend pas en quoi cela serait pour masquer? ni en quoi cela serait une manipulation ?

Je ne suis absolument pas experte en la matière.. C'est pourquoi je m'adresse à vous.

Les élèves ordonnent les projets selon leur préférence.

Il y a 7/8 projets par an, et je cherche à satisfaire les étudiants au mieux. Bien qu'une petite quantité d'élèves peut ne pas être affectée si les conditions ne le permettent pas.

Tout en ayant comme contraintes : les projets ne contiennent pas le même nombre d'élèves (le nombre d'élève maximum est variable d'un projet à un autre) et chaque projet dispose d'un nombre minimal d'élèves (propre au projet également).

Je vois mes collègues le faire manuellement depuis des années avec l'entrée des données sur excel manuellement, depuis un échange de mails avec les élèves.. Je pense que l'automatiser un peu pourrait simplifier le problème, et peut être rendre l'affectation un peu plus juste. C'est tout ce que je cherche.

La conversion par voeu a déjà au moins le mérite de faire apparaître les données erronées :

Pas de voeu n° 1 : lignes 36, 41, 45, un voeu n° 8 ou un voeu doublé.

Pas de voeu n° 5 : ligne 58, un voeu n° 8.

Pas de voeu n° 6 : ligne 53, 2 voeux n° 3.

Pas de voeu n° 7 : ligne 21, un voeu n° 8.

Voilà déjà de quoi fausser les calculs !

Bonjour,

Un essai avec le solveur (ruban Données).

Le principe est d'attribuer une note fonction du choix retenu. Si c'est son 1er choix la note est maximum.

L'objectif du solveur est de maximiser le total des notes.

Là j'ai ajouté un poids (au feeling, met ce qui te parait le mieux) en ligne 19 pour favoriser les 1ers choix, les notes sont calculées en M21:M63

Libre à toi du complexifier le calcul cette note pour, par exemple, favoriser les 1ers choix des étudiants ayant une réussite dans un domaine ou une assiduité supérieure à d'autres etc. Toute la finesse du réglage réside dans cette note, tout comme un logiciel d'échec note une position pour choisir son coup. Un mauvais système de notation et il joue comme un pied.

Comme michel j'ai remarqué des anomalies dans les choix, j'ai corrigé. Il faudrait ajouter un contrôle là-dessus.

eric

Edit: pourquoi j'ai dit Michel moi ? MFerrand tu t'es reconnu je pense

PS : Tiens, j'avais raté l'ajout du fichier.

Précision : le solveur ne te fourni pas LA meilleure solution, mais la meilleure parmi celles qu'il a exploré. S'il a une branche qui semble non prometteuse il l'élague et ne poursuit pas dans cette direction.

Il permet d'avoir une réponse très correcte respectant les critères en un temps raisonnable.

Pour tout explorer là ça serait en vba avec éventuellement un temps plus ou moins conséquent selon le problème.

120a.xlsm (30.44 Ko)

Tout d'abord merci beaucoup pour la réponse. C'est une très bonne idée de passer avec le solveur.

Je suis désolée pour les erreurs, j'ai récupéré le fichier de l'an dernier pour mon projet d'optimisation, et je n'ai pas vérifier les données, en cherchant d'abord a comprendre la logique d'un code VBA.

Selon vous, cela n'est pas possible ? Dans le code (ou l'ébauche de code) que j'ai essayé de faire et qui va avec le fichier,

qu'elle pourrait être l'erreur ?

il n'est pas possible d'obtenir, une feuille de classeur, avec les groupes formés (sheet " Données après répartition") ?

Merci encore !

Bien sûr que c'est possible. Cela est fait fréquemment !

Mais il est préférable de travailler sur des données rationnelles et propres...

Voilà une procédure pour faire la répartition.

Son fonctionnement repose sur 3 plages nommées qui devraient assurer sa pérennité, la possibilité de la réutiliser dès lors qu'on assurera la permanence de ces plages.

Une plage Voeux qui couvrent les voeux formulés les étudiants : autant de colonnes que de voeux (donc que de projets) et sur chaque ligne les numéros des projets correspondant à chaque voeu, dans l'ordre de préférence donc.

Une plage ProjMM qui couvre les maximum et minimum de chaque projet : 2 colonnes donc, et autant de lignes que de projets.

Une plage Noms, les noms des étudiants (dans l'ordre des numéros étudiants).

Sub Répartition()
    Dim TRP(), Prj(), che$, cht$, p%, n%, v%, x%, i%, j%
    p = [ProjMM].Rows.Count 'nb de projets
    ReDim Prj(1, 1 To p) 'Tableau projets (suivi niveau lors répart.)
    With [ProjMM]
        For i = 1 To p
            Prj(0, i) = .Cells(i, 1) 'Affecte Max (pour décrémentation)
            Prj(1, i) = -.Cells(i, 2) 'Affecte Min négatif (pour incrémentation)
        Next i
    End With
    n = [Voeux].Rows.Count 'nb d'étudiants
    ReDim TRP(1 To n)  'Tableau recueil des voeux retenus lors répart.
    'Constitution chaîne caractères (1 car.=1 étudiant) pour tirage aléatoire
    For i = 1 To n
        che = che & ChrW(i + 32)
    Next i
    Randomize  'Initialisation générateur nb aléatoires
    'On tire un caractère qu'on transfère à la suite dans une nouvelle chaîne
    ' afin de définir un ordre de choix parmi les étudiants
    For i = 1 To n
        x = Int(Len(che) * Rnd + 1)
        cht = cht & Mid(che, x, 1)
        che = Replace(che, Mid(che, x, 1), "")
    Next i
    'On reprend chaque caractère de la chaîne tirée qu'on convertit en n° étudiant
    ' On retient le premier de ses voeux (en passant au suivant lorsque le max est
    ' déjà atteint pour le projet souhaité
    For i = 1 To n
        x = AscW(Mid(cht, i, 1)) - 32
        For j = 1 To p
            v = [Voeux].Cells(x, j)
            If Prj(0, v) > 0 Then
                TRP(x) = v
                Prj(0, v) = Prj(0, v) - 1
                Prj(1, v) = Prj(1, v) + 1
                Exit For
            End If
        Next j
    Next i
    'Correctif pour les cas où Min non atteint pour un projet
    j = n
    For i = 1 To p
        If Prj(1, i) < 0 Then
            Do While Prj(1, i) < 0
                x = AscW(Mid(cht, j, 1)) - 32
                v = TRP(x)
                If Prj(1, v) - 1 >= 0 Then
                    Prj(1, v) = Prj(1, v) - 1
                    Prj(1, i) = Prj(1, i) + 1
                    TRP(x) = i
                    j = j - 1
                End If
            Loop
        End If
    Next i
    'Transfert résultats dans tableaux par projet
    With Worksheets("Données après répartition")
        For i = 1 To p
            x = (i - 1) * 4 + 2
            v = 2
            For j = 1 To n
                If TRP(j) = i Then
                    v = v + 1
                    .Cells(v, x) = j
                    .Cells(v, x + 1) = [Noms].Cells(j, 1)
                End If
            Next j
        Next i
    End With
End Sub

Je te renvoie le classeur après l'avoir nettoyé de mes annotations, pour que tu puisses tester. Note qu'il te faut modifier la plage de recueil des voeux des étudiants.


Voici le fichier pour tester : les plages nommées sont celles colorées en jaune.

J'ai composé la plage Voeux à partir du recueil existant pour l'inverser par ordre des voeux formulés (de façon pour puisse prendre les voeux dans l'ordre de préférence). Il faudra réorganiser cette page pour mettre des noms dynamiques et la rendre plus facilement réutilisable.

103manon-a.xlsm (33.28 Ko)

Le même fichier un peu réaménagé. Pas encore le top (il reste des éléments qui pourraient se calculer ou se mettre à jour automatiquement lors d'une réutilisation...)

Les emplacements ont été redéfinis, les plages sont nommées de façon dynamiques, on n'a à mettre à jour que la liste d'étudiants, la liste des projets (et les max-min), bien sûr servir les préférences formulées. On peut faire varier les projets jusqu'à 10 sans autre retouche.

Pour la répartition, les numéros d'ordre s'affichent dans la limites des max définis par projet. Une procédure d'effacement est défini.

C'est au moins un premier pas.

170manon-a-2.xlsm (35.70 Ko)

Merci beaucoup !

J'ai une dernière question, si je peux me permettre.

Ces élèves ont chacun des options (art plastique, mesures physiques, anglais avancé...), il y a 5 options.

Cependant, on cherche a maximiser pour les projets le nombre d'options département, et parfois on nous impose des minima (au moins deux élèves d'art plastiques dans tel projet, ou encore, pas du tout d'anglais avancé dans tel autre projet). Ce qui fait qu'en plus des minimum et maximum de chaque projet, on dispose parfois de minimum par département par projet.

Pensez-vous que cela peut être traité en une seule fois?

Ou je fais un tri par option, puis traite, avec le fichier précédent?

Je vous remercie encore une fois, pour toute l'aide apportée !

Pour Eriiic :

Pour l'utilisation du solver, est-il possible de faire varier le nombre de voeu à uniquement trois par exemple ?

De plus, comment, faites-vous apparaitre les couleurs vertes sur les cases, la colonne L du choix retenu reconnait comment que ce sont les valeurs a gauche (voeux des projets) qu'il faut retenir ?

Bonjour,

On en revient à la définition des règles devant présider à la répartition dont tu disais qu'elles n'existaient pas !!!

Là, de plus, tu fais appel à un critère non présent dans le fichier. Il faudrait donc d'abord l'introduire, et ensuite définir plus précisément la règle le concernant, de façon que l'on puisse étudier si son application est intégrable à la méthode de répartition utilisée, ou s'il faut redéfinir complètement la méthode pour l'intégrer (les deux possibilités extrêmes avec éventuellement des variantes intermédiaires).

Pour ma classe, je n'en tiens moi, personnellement pas compte, mais quelques collègues estiment que cela permet d'obtenir des groupes plus hétérogènes.

Voici, un fichier, avec l'exemple de cette année, pour le nombre de projet, et les contraintes associées. Elles peuvent varier tous les ans en fonction du projet bien évidemment.

En vous remerciant encore !

Bonjour,

Tout d'abord bravo à MFerrand, il y a beaucoup à apprendre là dedans.

Je n'aurais jamais pensé une telle concision possible. Riche en astuces, avec efficacité.

Pour l'utilisation du solver, est-il possible de faire varier le nombre de voeu à uniquement trois par exemple ?

Faut voir la construction du modèle pour le solver qui sera plus compliquée. Mais plus tu restreins les choix, plus tu t'exposes à des blocages insolubles. Si ils choisissent tous les projets 1, 2 et 3 tu fais quoi ? Dangereux donc.

Tu peux avoir un autre système où ils ont un quota de points à répartir , par exemple 10 par projet soit 70 ici (auquel cas le poids par choix ligne 19 n'a plus de raison d'être). Un étudiant peut choisir de miser 60 pts sur un projet et 10 sur un autre, il augmente ses chances de l'avoir mais il sait qu'il risque aussi d'avoir un choix non voulu. Un autre plus prudent répartira sur plus de projets.

C'est ce que disait MFerrand au début, il faut des règles claires et complètes dès le début. Surtout si c'est fait en vba où parfois une évolution qui parait minime oblige à tout revoir. Donc bien préparer le projet avant et le blinder pour éviter les contestations.

De plus, comment, faites-vous apparaitre les couleurs vertes sur les cases

Une simple Mise en Forme Conditionnelle (MFC) avec formule.

Tu pourrais en faire une pour faire ressortir les anomalies type 2 fois le même choix en rouge.

la colonne L du choix retenu reconnait comment que ce sont les valeurs a gauche (voeux des projets) qu'il faut retenir ?

Le modèle ne s'en préoccupe pas puisque tous les projets de 1 à 7 sont sensés être présents.

Il faut regarder les contraintes imposées au solveur.

eric

Suite...

J'ai essayé avec ton nouveau fichier, ça dépasse les limites du solveur.

10x10 contraintes supplémentaires, il refuse.

Comme seulement 3 servaient réellement j'ai créé le modèle différemment pour pouvoir définir 8 seuils supplémentaires tout confondu, mais ces nouveau blocages sont suffisants pour qu'il ne trouve aucune solution intermédiaire.

En insistant on arriverait peut-être à lui faire sortir une solution mais je crains qu'elle ne soit guère optimisée.

Là je crois que vba s'impose.

eric

Bonsoir eriiic, on sort de l'été tout doucement, la température se tempère , du repos pour mes mollets, mais évite de me les faire enfler ...

Manon, il faut que je vois comment repositionner les contraintes (pour qu'on y accède de façon fiable quelles qu'en soient les variations).

Je pense que les contraintes doivent être traitées en priorité, on ne pourra y satisfaire par de simples correctifs à la fin, du moins pour ce qui concerne les Min. Pour les Max il faudra des tests supplémentaires en cours de procédure, ce qui accroît pareillement les tests lors des correctifs à apporter.

Je n'ai que survolé, je laisse un peu décanter pour voir si une solution plus simple va émerger...

Autre chose : le passage de voeux formulés sous forme préférences classant tous les projets pour chaque étudiant à un nombre de voeux limités ne serait pas un changement d'option mineur : dans un tel cas, on efface tout et on reprend la conception d'une procédure à zéro.

Cordialement.

Rechercher des sujets similaires à "repartition groupe"