Horaire aléatoire avec conditions

Bonjour le Forum,

cela fait un sacré bout de temps que je n'ai plus "jouer" avec Excel et le VBA et je suis complètement rouillé . J'ai donc plus que jamais besoin de votre aide.

je dois créer un horaire en jour de semaine sur une période définie (23 octobre au 30 novembre dans un premier temps) et y inclure aléatoirement 49 personnes, sachant que c'est une personne différente qui doit effectuer le rôle de garde le matin et l'après midi, chaque jour et que tout le monde doit y passer de façon la plus équitable possible, mais si certain preste une garde de plus ce n'est pas grave.

ce serait tellement facile s'il n'y avait pas de condition me direz vous. En effet, certains ont des brevets et sont donc prioritaires à certains moments. Aussi il faudrait que le tirage se fasse de façon prioritaire dans les breveté, le demi jour du brevet.

dans le tableau joint, j'ai donc colorer les cases. Il faudrait que ce soit un breveté "vert" qui apparaisse dans les cases "vertes" et idem avec les deux autres brevets certains ont plusieurs brevets).

rien n'empêche de mettre un non breveté mais ce serait bien si cela pouvait être évité... Si ce n'est pas possible, je ferai les changement manuellement ^^

dans l'idéal mais je ne pousse pas jusque là ma demande (sauf si vous êtes capable de le faire), il faudrait séparer le groupe en deux (de 1 à 24 et de 25 à 49) et que ce soit une personne d'un groupe différent, également aléatoirement, le matin et l'après midi pour que ce ne soit pas toujours le même groupe le matin ou l'après midi. Si ce n'est pas possible, on s'adaptera.

Chalenge trop important pour moi, je le ferai manuellement si personne n'a une idée de comment faire, via macro ou non ...

Merci déjà à qui pourra m'aider ou m'apporter de pistes de solution.

bonsoir,

regarde si ceci peut te convenir, sur base d'un outil disponible en téléchargement planning selon disponibilités

34rekiss.xlsm (96.41 Ko)

Bonjour à tous,

pas mal h2so4.
Bien pensé et parait complet. Tu as dû bien te prendre la tête bravo
eric

Bonjour Rékiss, H2SO4, Eriic,

une autre proposition aléatoire,

K3:BZ3 = une plage contiguë avec vos dates

C1:C2 = min et max allocations d'une personne (vous voulez une différence max de 1)

I12:I13 = nombre des restrictions non respectées pour "AM<>PM" ou couleur (I12 doit être 0, I13 n'est qu'un compteur)

Le bouton "Participants" sert à lancer la macro.

Bonjour tout le monde,

H2so4, je n'avais pas vu cet outil sinon je n'aurais pas demandé car il s'agit exactement de ce dont j'ai besoin. Quel travail titanesque et très bien fait !

Merci beaucoup à toi :D

Petite question toutefois, il y a une manière d'ajouter/changer automatiquement les nombre de jours d'une période ? Par exemple 1 mois ou 2 mois ou 6 semaines, ... ou on change manuellement la première date puis on étire et on incrémente en jour de semaine pour supprimer les weekend .

Concernant les personnes, je suppose qu'il faut simplement faire le changement manuellement également, ou y a-t-il une manière automatique de décider le nombre de personnes ?

merci beaucoup encore pour ce tableau :)

Bonjour BsAlV,

ton tableau correspond également à ce dont j'ai besoin, bravo pour le travail. Je vais voir à l'usure lequel des deux me parait le plus pratique mais il est indégnable que c'est très bien fait !

merci beaucoup également

bonjour,

entretemps BsAlv t'a fourni une réponse spécifique à ton besoin, mais voici les réponses à tes questions :

on change manuellement la première date puis on étire et on incrémente en jour de semaine pour supprimer les weekend .

oui, la gestion des libellés des créneaux n'est pas prévue dans ce classeur. Utiliser les possibilités d'excel pour les gérer (formules, introduction manuelle, autre macro, ...)

Concernant les personnes, je suppose qu'il faut simplement faire le changement manuellement également

effectivement

re, salut h2so4, (??? c'est maintenant en miniscules ou est-ce que je me trompe ???)

concernant les jours, vous pouvez aussi modifier la première date et puis utiliser la formule suivante avec K3 = la cellule de la première date et puis copier et coller cette formule jusqu'au fin du période. (Si nécessaire, on peut aussi utiliser des jours fériés)

=SERIE.JOUR.OUVRE.INTL(K3;1)

re,

nouveau PJ avec correction d'une erreur

@BsAlv,

c'est maintenant en miniscules ou est-ce que je me trompe ???

Cela a toujours été en minuscules, h2so4 est un minuscule contributeur.

Bonjour

re,

nouveau PJ avec correction d'une erreur

BsAlv, j'ai un peu fait évolué mon tableau, peux tu m'indiquer où se trouvait l'erreur dans le code que je puisse la corriger également sans devoir tout refaire ? Ou un copier coller du nouveau code sera suffisant ?

merci encore pour le travail 😉

re,

oui, copier & coller le code suffit.

Si cela fous intéresse, entre autres, il y avait cette ligne où ce "clearformat" devait être "Clearcontents" et le msgbox, vous pouvez le supprimer aussi, s'il vous embête

Range(sp(r)).ClearFormats 'vider cette cellule

Ok je vais faire le copier coller alors ;)

par contre pensez-vous qu'il est possible d'ajouter une condition ? à savoir que la différence entre le nombre de AM et le nombre de PM soit la plus petite possible ? afin d'éviter que ce soit toujours le même qui fasse le matin ... Ici j'arrive parfois avec une personne qui fait 7 pauses dont 6 AM et 1 PM (j'ai allongé le calendrier) et j'aimerais que ce soit plus équitable à ce niveau aussi.

Bien entendu je modifierai manuellement si cela n'est pas possible.

J'ai essayé de lire le code mais je sens bien que je n'ai pas le niveau ^^

encore merci

re,

L2 =début de la période et K2 = nombre de jours ouvrables (une année = 365 jours * 5 / 7 = environ 260 jours ouvrable). La macro réagit aussi sur des couleurs MFCs.

la prochaine fois, la complainte sera qu'une personne est 3 fois en janvier ?

Re,

Merci beaucoup, c'est parfait comme ça

la prochaine fois, la complainte sera qu'une personne est 3 fois en janvier ?

Il n'y aura pas de prochaine fois, les râleurs n'auront plus leur mot à dire

Encore merci

re,

pour une distribution plus égale (mais tout dépend de vos priorités); Colonne G vous montre les colonnes où une personne se trouve, donc si la séquence est par exemple 41,62,85, ... alors, entre 2 assignements il y as 62-41 = 21 et 95-62 = 33 jours ouvrables ...

Rechercher des sujets similaires à "horaire aleatoire conditions"