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

81test-roulement.xlsm (17.96 Ko)
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 Sub

re-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
28test-roulement.xlsm (18.23 Ko)

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

Rechercher des sujets similaires à "planning tournant chiffre impaire roulement"