Planning tournant chiffre impaire (roulement)
Bonjour,
J'ai un probleme que je n arrive pas à resoudre de maniere simple et efficace :
J ai une equipe de 9 personnes et 2 activités
je dois mettre 5 personnes chaque semaine sur l'activité A et 4 sur l'activité B
Le but est de faire tournée pour que chaqu'un fasse le meme nombre de fois l'activité A et B
Meme probleme avec une equipe de 7 et 2 activité.
Auriez vous une idee pour automatiser ceci ?
Cordialement
bonjour,
une proposition
lancer la macro via alt-F8
Sub aargh()
Dim ctr&(1)
' à adapter
ab = 4 'nombre de personnes pour b
aa = 5 'nombre de personnes pour a
With Sheets("feuil1") '<-à adapter
dl = .Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne
dc = .Cells(2, Columns.Count).End(xlToLeft).Column 'dernière colonne
For i = 3 To dl 'comptage
Erase ctr
For j = 2 To dc
a = j Mod 2
If .Cells(i, j) <> "" Then
ctr(a) = ctr(a) + 1 'ctr activité 0=a, 1 =b
da = a 'dernière activité effectuée par la personne
lcola = Int(j / 2) * 2 ' dernière semaine avec une activité
End If
Next j
.Cells(i, dc + 1) = ctr(0) - ctr(1) ' écart entre les activité, 0 équilibre, positif déficit d'activités b, négatif déficit d'activités a
.Cells(i, dc + 2) = da 'dernière activité
Next i
' tri selon facteur d'équilibre et dernière activité
.Range("A3").Resize(dl - 2, dc + 2).Sort key1:=.Cells(3, dc + 1), order1:=xlDescending, key2:=.Cells(3, dc + 2), order2:=xlAscending, Header:=xlNo
'attribution des activités
ligne = 2
lcola = lcola + 2 'colonne de la semaine à remplir
For i = 1 To ab 'on attribue les activités b
ligne = ligne + 1
.Cells(ligne, lcola + 1) = "x"
Next i
For i = 1 To aa 'on attribue les activités a
ligne = ligne + 1
.Cells(ligne, lcola) = "x"
Next i
'tri selon nom de la personne
.Range("A3").Resize(dl - 2, dc + 2).Sort key1:=.Cells(3, 1), order1:=xlAscending, Header:=xlNo
'suppression des colonnes de travail
.Cells(1, dc + 1).Resize(1, 2).EntireColumn.Delete
End With
End Subre-bonjour,
pour faire suite à cette question, voici une version qui génère le planning pour toutes les semaines qui ne sont pas encore complétées.
Sub aargh()
Dim ctr&(1)
' à adapter
ab = 4 'nombre de personnes pour b
aa = 5 'nombre de personnes pour a
With Sheets("feuil1") '<-à adapter
dl = .Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne
dc = .Cells(2, Columns.Count).End(xlToLeft).Column 'dernière colonne
Do While lcola < dc ' on planifie pour toutes les semaines indiquées en ligne 1
For i = 3 To dl 'comptage
Erase ctr
For j = 2 To dc
a = j Mod 2
If .Cells(i, j) <> "" Then
ctr(a) = ctr(a) + 1 'ctr activité 0=a, 1 =b
da = a 'dernière activité effectuée par la personne
lcola = Int(j / 2) * 2 ' dernière semaine avec une activité
End If
Next j
.Cells(i, dc + 1) = ctr(0) - ctr(1) ' écart entre les activité, 0 équilibre, positif déficit d'activités b, négatif déficit d'activités a
.Cells(i, dc + 2) = da 'dernière activité
Next i
' tri selon facteur d'équilibre et dernière activité
.Range("A3").Resize(dl - 2, dc + 2).Sort key1:=.Cells(3, dc + 1), order1:=xlDescending, key2:=.Cells(3, dc + 2), order2:=xlAscending, Header:=xlNo
'attribution des activités
ligne = 2
lcola = lcola + 2 'colonne de la semaine à remplir
For i = 1 To ab 'on attribue les activités b
ligne = ligne + 1
.Cells(ligne, lcola + 1) = "x"
Next i
For i = 1 To aa 'on attribue les activités a
ligne = ligne + 1
.Cells(ligne, lcola) = "x"
Next i
Loop
'tri selon nom de la personne
.Range("A3").Resize(dl - 2, dc + 2).Sort key1:=.Cells(3, 1), order1:=xlAscending, Header:=xlNo
'suppression des colonnes de travail
.Cells(1, dc + 1).Resize(1, 2).EntireColumn.Delete
End With
End Sub
Bonjour,
Et merci pour ton retour.
J ai testé sur 44 semaines et j ai quelques différences :
les 5 premieres personnes font 24 fois l activite A et 20 fois l activite B
Les 4 dernieres personnes font 25 fois l activite A et 19 fois l activite B
vois tu d où cela peut venir ?
je n arrive pas non plus à le faire fonctionner avec personnes :(
Je modifie ici :
ab = 4 'nombre de personnes pour b > ab = 3 'nombre de personnes pour b
aa = 5 'nombre de personnes pour a > aa = 4 'nombre de personnes pour a
C est bien comme ca ?
bonjour,
quel résultat attendais-tu ?
en semaine 44,
il y a eu 44*5 =220 tâches A et 44*4=176 tâches B
la répartition sur 9 personnes donne 220/9=24.444 et 176/9=19.5555, j'ai fait l'hypothèse qu'on ne coupait pas les tâches en parties de tâche.
en semaine 45 tout le monde aura fait 25 fois la tâche A et 20 fois la tâche B
re-bonjour,
je n arrive pas non plus à le faire fonctionner avec personnes :(
la macro fait l'hypothèse qu'il faut avoir un nombre égal entre le nombre de tâches à répartir et le nombre de personnes.
voici un code adapté pour répartir un nombre de tâches sur un nombre de personnes plus important.
Oui je vois, en effet c est deja tres bien :)
En fait, sur 52 semaines j ai ce resultat :
A B
personne 1 29 23
personne 2 29 23
personne 3 30 22
personne 4 30 22
personne 5 30 22
personne 6 30 22
personne 7 30 22
je m'attendais à un equilibre comme :
A B
personne 1 26 26
personne 2 26 26
personne 3 26 26
personne 4 26 26
personne 5 26 26
personne 6 26 26
personne 7 26 26
Bonjour,
je m'attendais à un equilibre comme :
A B
personne 1 26 26
personne 2 26 26
personne 3 26 26
personne 4 26 26
personne 5 26 26
personne 6 26 26
personne 7 26 26
je recommence mon explication. nombre de tâches A par semaine 4, nombre de tâches B par semaine 3. sur 52 semaines, 208 (52*4) tâches A et 176(52*3) tâches B.à répartir sur 7 personnes. chacun fera la tâche A, 30 fois (208/7) et la tâche B 22 fois(176/7).
Oui j ai vu tu as tout a fait raison.
C est parfait merci beaucoup