affecter planning sous contraintes

newheel

XLDnaute Nouveau
Bonjour,

J'avais grâces au forum réussi à faire un planning très opérationnel, aujourd'hui laissant la main à un autre service j'ai besoin de laisser la main en cadrant les affectations, toutes les personnes n'étant pas polyvalentes.

Voici les données :

onglet EFFECTIF
- une liste d'opérateurs qui travaillent soit du matin M PREPA soit de l'après-midi A PREPA pour chaque jour de la semaine ( le service fait une extraction d'un autre fichier pour obtenir le tableau de cet onglet)

onglet COMPETENCES
- la liste des opérateurs avec leurs compétences aux différents postes

onglet AFFECTATION
- actuellement le même tableau dans l'onglet effectif - Tableau objet de ce post

DEMANDE:
J'aimerais que les cases M PREPA et A PREPA du tableau de l'onglet AFFECTATION soient remplacées pour chaque jour de la semaine par l'affectation aléatoire d'un poste de travail sans doublo, sauf si elle vaut R ou CPO ou ABSO.


Je joins le fichier de départ.o_O:)


Merci de l'intérêt que vous pourrez trouvez à m'aider !!!
 

Pièces jointes

  • Affectation_criteres.xlsm
    18.4 KB · Affichages: 63

Dranreb

XLDnaute Barbatruc
Bonjour
Ce que vous appelez les postes de travail ce sont je suppose les titres COMPETENCES!B4:O4
Sans doublon ça veut dire qu'il doit en être attribué un au hasard une seule fois chaque demi journée ?
(Une seule fois par jour ce n'est pas possible s'il y a plus d'op que de postes)
Et sans en adopter dont la cellule au croisement de sa colonne et de la ligne d'opxx est vide en COMPETENCES!
Pas de solution en l'état puisqu'elles sont toutes vides pour op15 et op16 ?

Si c'est ça, c'est un problème beaucoup plus compliqué qu'il n'y parait.
Parce que les attributions aléatoires des postes aux premiers opé peut très bien ne laisser que ceux pour lesquels les opé restants de la matinée sont incompétents. Pareil pour l'après midi. Ça implique une procédure récursive pour chaque attribution.

Un peu comme pour les tirages aléatoires de rencontres, notamment de pétanque, que je joins.
Nul doute que le module de classe ListeAléat trouvera une application à votre cas.
 

Pièces jointes

  • ListeAléat.xlsm
    120.1 KB · Affichages: 57
Dernière édition:

newheel

XLDnaute Nouveau
Bonjour,

merci pour le retour. Du coup je propose une autre présentation des compétences inspirées par ListAleas et par une idée d'un collègue :

Chiffrer les compétences de chacun pour le poste de 0 à 9 en faisant la somme par opérateur
Mettre une contrainte de personnes affectables par poste
chercher à faire un tirage aléatoire tenant compte
1 - de la maximisation de la somme des compétences pour positionner un opérateur sur un poste
2- de la containte de même tirage pour le même poste ( 1 voulant dire 1 personne seulement)
3 - de n'affecter que si correspond à l'opérateur M PREPA ou A PREPA dans l'onglet effectif.

si ce projet vous intéresse ? Merci de vos popositions
 

Pièces jointes

  • Affectation_criteres2.xlsm
    18.2 KB · Affichages: 48

Dranreb

XLDnaute Barbatruc
Je ne comprends pas trop vos explications, mais ça à l'air plus compliqué encore que la 1ère interprétation.
Je ne saurais comment procéder pour maximiser quelque chose. Retenir ou pas selon que ça convient ou non, d'accord, mais ça…
À moins d'établir 100000 tirages complètement aléatoires et garder chaque fois celui qui maximise mieux quelque chose que le dernier retenu…
Mais ça ne garantira jamais une solution optimale.
 

newheel

XLDnaute Nouveau
Bonjour et merci de ta réponse,

j'espère mieux formuler mon projet dans ce nouveau fichier, mon souhait étant d'avoir un planning sur HUITM et HUITAM qui tienne compte de EFFECTIF pour planifier les opérateurs sur la semaine du lundi au mardi dans un onglet à part qui pourrit s'appeler PLANNING
 

Pièces jointes

  • affecter.xlsm
    34.4 KB · Affichages: 36

newheel

XLDnaute Nouveau
Merci pour la réponse.

J'ai maintenant un planning qui affecte les personnes en fonction de leurs compétences et l'ouverture de leur poste ( 0 je veux personne , 1 une personne : il y a 1 poste par personne) et je voudrais qu'il le fasse en tenant compte de l'onglet EFFECTIF : si apparaît autre chose que M PREPA1 ou A PREPA1 pour op1 pour le 01/09/16 je souhaiterais que cet opérateur ne fasse pas partie les personnes qui peuvent être affecter sur le poste.

Merci de vos réponses.
 

Pièces jointes

  • affecter2.xlsm
    51.8 KB · Affichages: 53

Dranreb

XLDnaute Barbatruc
Bonjour.
Lorsqu'on a besoin d'attribuer une seule fois à certains emplacements des numéros (ou des noms correspondants à des numéros, c'est pareil) avec des contraintes de ne pas pouvoir en employer certains pour certains emplacements, c'est plus simple de travailler avec des objets ListeAléat.
Simplement si on risque de se retrouver avec des numéros restants qui ne peuvent être employés pour les emplacements restants, il faut en plus écrire tout ça à base d'une procédure récursive pour pouvoir en choisir un autre si l'appel récursif pour le suivant montre que les numéros restants ne conviennent pas pour les emplacements restants.
 

newheel

XLDnaute Nouveau
bonjour,

je ne sais pas faire ce que vous me demander.
Je voudrais sur l'idée de mon classeur affecter un opérateur à un poste en fonction
- de sa disponibilité ( s'il travaille APREPA ou MPREPA)
-du besoin du service sur le poste.
je ne sais pas faire le lien entre l'effectif un jour donné avec un tirage sur les présents seulement ( MPREPA ou APREPA)
j'ai esseyé de mettre à côté de la colonne M qui donne le résultat du tirage selon la contrainte de service la fonction index(equiv) pour faire apparaitre MPREPA et après il faudrait que le tirage soit refait.. je ne sais pas faire

le plus simple serait de pouvoir identifier par jour le groupe d'op. qui peut être tirés au sort.
je sais pas aller plus loin dans le projet, je ne sais pas faire.

merci.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Le problème c'est que je ne comprends rien à votre classeur. Trop touffu, trop de choses. Le tout 1er classeur était plus clair mais vous n'avez jamais confirmé que ce que j'avais cru comprendre était ce que vous vouliez.
Faites des petits essais avec un objet ListeAléat, très facile à utiliser, pour vous confirmer que vous avez bien compris les explications. Les avez vous lues ? La possibilité d'en supprimer un numéro notamment pour qu'il ne soit plus tiré dans la suite d'un traitement est très pratique. Pour refaire un tirage complet, réexécutez simplement sa méthode Init
 

Dranreb

XLDnaute Barbatruc
Bonjour
Avancez vous ?
Soit Numéros :
Déclaré par: Dim Numéros As ListeAléat
Créé par: Set Numéros = New ListeAléat
Initialisé par: Numéros.Init NuméroMaxi
Pour éliminer un certain numéro N du tirage il suffit de le supprimer: Numéros.Supprimer N
Pour prélever un des numéros restants contenu dans l'objet, deux solutions:
1) Le prélever selon sa position P aléatoire: N = Numéros.Aléat(P) en incrémentant chaque fois P
2) Prélever toujours le 1er mais le supprimer juste après: N = Numéros.Aléat: Numéros.Supprimer N

Conseil: travaillez toujours avec des tableaux en mémoire, jamais directement sur les cellules: ça nécessite des expressions lourdes et c'est lent.
 
Dernière édition:

Statistiques des forums

Discussions
315 095
Messages
2 116 170
Membres
112 676
dernier inscrit
little_b