Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Répartition équitable de binômes

halecs93

XLDnaute Impliqué
Bonjour,

Je travaille toujours sur un fichier me permettant de répartir le plus équitablement possible des personnes. Le but étant de créer des binômes différents à affecter les samedis.

J'ai, je crois, pas mal avancé, mais je n'arrive pas à finaliser cet aspect "équitable".

Quelqu'un aurait une proposition plus fiable que la mienne ?

Un grand merci.

 

Pièces jointes

  • PLANNING DES SAMEDIS - fonctionnel ter XLD.xlsm
    69.3 KB · Affichages: 13
Solution
La macro avec 3 Dictionary :
VB:
Sub Tirages()
Dim tablo As Range, nNom%, delai%, dferie As Object, c As Range, dinterdit As Object
Dim d As Object, col%, r1%, r2%, txt$, rejet As Boolean, ecart%
Set tablo = [Tableau1] 'tableau structuré
nNom = tablo.Rows.Count
delai = 42 'au moins 42 jours avant de réutiliser un nom
'---jours fériés à éliminer---
Set dferie = CreateObject("Scripting.Dictionary")
For Each c In [feries]
    If Weekday(c) = 7 Then dferie(c.Value) = ""
Next c
'---binômes interdits---
Set dinterdit = CreateObject("Scripting.Dictionary")
For Each c In [Tableau5].Columns(1).Cells
    dinterdit(c & vbLf & c(1, 2)) = ""
    dinterdit(c(1, 2) & vbLf & c) = ""
Next c
Application.ScreenUpdating = False
Randomize
Set d =...

halecs93

XLDnaute Impliqué
Grand merci.

Je vais conserver les deux versions et voir laquelle est la plus efficace à la longue.
 

job75

XLDnaute Barbatruc
Pour le bouclage sans fin signalé au post #30.

Il est dû bien sûr à la boucle Do/Loop et au fait que dans cette configuration des valeurs il n'est pas possible d'obtenir un écart égal à 1.

On pourrait facilement relancer automatiquement le processus pour obtenir une solution mais je trouve préférable de le faire manuellement après la touche <échap>.
 

job75

XLDnaute Barbatruc
Bonjour halecs93, le forum,

Bon il est évident * que quand nSam est multiple de nNom on ne peut pas avoir ecart = 1.

Donc au post #28 je viens de supprimer la ligne :
VB:
If nSam Mod nNom = 0 And ecart Then GoTo 1 'si nécessaire...

* j'explique quand même pour nSam = 51 qui est multiple de nNom = 17.

Pour ecart = 0 toutes les cellules de la plage DONNEES!B3:B19 contiennent 6.

ecart =1 est impossible car si des cellules sont égales à 7 (ou 5) le total ne sera plus 102.

A+
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…