Gestion automatique de tours de garde

OlivMan

XLDnaute Nouveau
Bonjour,

Mon père m'a demandé de lui donner un coup de main pour l'organisation des permanences de son personnel, mais sa demande dépasse mes compétences.

En dehors du décompte de perms pour chacun semaine/week-end que j'ai mis en place, il voudrait un tableau/calendrier qui se remplirait de lui meme pour gagner du temps, selon les règles suivantes:
-La personne de garde en week-end fait le vendredi, samedi et dimanche.
-si un employé est de permanence le week-end, il ne le sera pas dans la semaine de celui-ci, ni dans la suivante (par exemple si il est de garde ce week-end, c'est a dire du 5 au 7 octobre inclus, il ne pourra l’être un autre jour entre le 1 et le 14 octobre)
-La répartition sur l'année doit être équitable.

Aujourd'hui, sa méthode est de remplir le tableau à la main en comblant d'abord les week-end, puis le reste des jours de la semaine en suivant la liste de nom dans l'ordre.
Il doit bien être possible d'automatiser cela grace à une formule du type "SI le 1e à être de perm à telle date est...et que ce jour est un week-end ou non, alors..." mais je n'y arrive pas.

Je joins un fichier d'exemple sur 3 mois (meme si le final devra etre sur l'année) pour essayer d’éclaircir mes propos.

Merci d'avance pour lui
 

Pièces jointes

  • Perms2.xls
    76 KB · Affichages: 510

OlivMan

XLDnaute Nouveau
Re : Gestion automatique de tours de garde

Merci

Je suis toujours fasciné par l'implication et le savoir faire des utilisateurs sur ce forum (c'est la première fois que je poste, car j'ai toujours trouvé des réponses dans d'autres topics en général).

J'ai l'impression que cela répond à sa demande, il a l'air satisfait, même s'il à l'air un peu perdu dans l'utilisation (j'te remercie d'avoir évité les macros :) )

Pour ma part et pour et pour comprendre un peu ta démarche, j'aimerai que tu m'expliques en détail la formule en colonne B
=MOD(SI(JOURSEM(A33;2)<6;B32+1;B32);11)

merci encore!
 

Modeste geedee

XLDnaute Barbatruc
Re : Gestion automatique de tours de garde

Bonsour®

SI(JOURSEM(A33;2)<6;B32+1;B32)

on incremente le numero d'ordre du nom dans la liste de 1
si le jour courant est un jour de semaine ('1,2,3,4 ou 5)
sinon on reporte le N°d'ordre précédent

MOD( résultatprécédent ;11)
pour corriger l'incrémentation au-dela de 11 (nombre d'individus de l'équipe)
on utilise la fonction Mod avec un pas égal à ce nombre

à noter que la fonction mod renvoie un nombre ayant pour origine 0
le nombre renvoyé varie donc de 0 à 10 au lieu de 1 à 11
ce décalage est ensuite compensé pour indexer le N°d'ordre vis à vis de la liste des noms
 

Modeste geedee

XLDnaute Barbatruc
Re : Gestion automatique de tours de garde

Bonsour® à Olivman, à tous et notament à ceux souhaitant adapter la solution proposée :


mise en garde comme signalé dans un message précédent.
Non testé pour un nombre variable d'individus (11 dans l'exemple)

cette solution sans macro, répartition par roulement testée sur 11 individus
est ici heureusement relativement équitable car les parametres pris en compte sont tous des nombres premiers :
semaine = 7 jours
5 périodes (lundi, mardi,mercredi,jeudi,W-E)
W-E = 3
individus = 11

cette méthode devient particulierement inégalitaire si le nombre d'individus est un multiple de 5 (5 periodes)

plus le nombre d'individus augmente, plus la durée (années) augmente pour aboutir à une équité.

l'algorithme alors à trouver pour une répartition équitable, devra faire appel à une procédure VBA, procédure complexe à mettre au point , par exemple celle connue sous le nom de "Recuit Simulé".
Cette méthode utilisée dans l'industrie automobile pour équilibrer la charge des opérateurs sur les chaines de montages multi-versions (complexité et durées variables des operations à effectuer selon la succession des différents modèles)
 

Statistiques des forums

Discussions
314 491
Messages
2 110 180
Membres
110 690
dernier inscrit
Zeppelin