Macro pour roulement de personnel
Bonjour
Je veux créer une macro qui me réalise un roulement de personnel, je m'explique :
Données tableur :
T4/U4 (fusionné) : Nom engin
T5 : Numéro
T6 : 1
T7 : 2
T8 : 3
T9 : 4
T10 : 5
U5 : Nom agent
U6 : A
U7 : B
U8 : C
U9 : D
U10 : E
Je voudrais que quand je clique sur un bouton la liste des noms exécute un roulement (le A passe en U7, le B passe en U8, le C passe en U9, le D passe en U10 et le E passe en U6) Comment je peux réaliser cela ?
Merci de votre aide
Bonjour,
Sub Roulement()
Dim Tbl, i%
With ActiveSheet
Tbl = .Range("U6:U10").Value
For i = 5 To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Range("U10")
.Range("U6:U10").Value = Tbl
End With
End SubCordialement.
Merci pour la solution, il me reste à copier la même chose pour les autres roulements en sélectionnant les cellules
MFerrand
J'ai essayé de dupliquer pour le faire sur plusieurs roulement, exemple pour deux roulements :
Sub ROULEMENT()
Dim Tbl, i%
With ActiveSheet
Tbl = .Range("U6:U10").Value
For i = 5 To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Range("U10")
.Range("U6:U10").Value = Tbl
End With
Dim Tbl, i%
With ActiveSheet
Tbl = .Range("U14:U19").Value
For i = 6 To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Range("U19")
.Range("U14:U19").Value = Tbl
End With
End Sub
Le Tbl surligné m'indique une erreur : déclaration existante dans la porté en cours, comment faire ? merci
MFerrand a écrit :Bonjour,
Sub Roulement() Dim Tbl, i% With ActiveSheet Tbl = .Range("U6:U10").Value For i = 5 To 2 Step -1 Tbl(i, 1) = Tbl(i - 1, 1) Next i Tbl(1, 1) = .Range("U10") .Range("U6:U10").Value = Tbl End With End SubCordialement.
Merci pour la solution
J'ai essayé de dupliquer pour le faire sur plusieurs roulement, exemple pour deux roulements :
Sub ROULEMENT()
Dim Tbl, i%
With ActiveSheet
Tbl = .Range("U6:U10").Value
For i = 5 To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Range("U10")
.Range("U6:U10").Value = Tbl
End With
Dim Tbl, i%
With ActiveSheet
Tbl = .Range("U14:U19").Value
For i = 6 To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Range("U19")
.Range("U14:U19").Value = Tbl
End With
End Sub
Le Tbl surligné m'indique une erreur : déclaration existante dans la porté en cours, comment faire ? merci
Bonjour,
Il faut rendre générique la procédure que j'ai fourni et la doter d'un argument de type Range (on lui fournit la plage concernée, et elle opèrera pour tous les cas...
Pour l'instant je suis en reposage de rideaux et de luminaires (juste en pause pour souffler un peu !
Voilà pour la macro :
Sub Roulement(Plg As Range)
Dim Tbl, i%, n%
With Plg
n = .Rows.Count
Tbl = .Value
For i = n To 2 Step -1
Tbl(i, 1) = Tbl(i - 1, 1)
Next i
Tbl(1, 1) = .Cells(n, 1)
.Value = Tbl
End With
End SubTu n'as plus besoin de dupliquer. Elle la même chose pour toute plage pour laquelle tu lui demanderas de le faire.
Pour tester :
Sub Test()
With ActiveSheet
Roulement .Range("U6:U10")
Roulement .Range("U14:U19")
End With
End SubChaque fois que tu as besoin de réaliser cette opération, tu fais appel à la macro dans ton code...
Cordialement.
MFerrand a écrit :Voilà pour la macro :
Sub Roulement(Plg As Range) Dim Tbl, i%, n% With Plg n = .Rows.Count Tbl = .Value For i = n To 2 Step -1 Tbl(i, 1) = Tbl(i - 1, 1) Next i Tbl(1, 1) = .Cells(n, 1) .Value = Tbl End With End SubTu n'as plus besoin de dupliquer. Elle la même chose pour toute plage pour laquelle tu lui demanderas de le faire.
Pour tester :
Sub Test() With ActiveSheet Roulement .Range("U6:U10") Roulement .Range("U14:U19") End With End SubChaque fois que tu as besoin de réaliser cette opération, tu fais appel à la macro dans ton code...
Cordialement.
Merci pour la solution ça marche nickel sauf que je viens de remarquer que quand je fais le roulement j'ai du personnel qui se retrouve au même endroit, car j'ai des roulements qui sont plus nombreux que d'autre
Pas compris ce que tu veux dire. Le roulement se fait sur la plage que tu indiques...
MFerrand a écrit :Pas compris ce que tu veux dire. Le roulement se fait sur la plage que tu indiques...
J'ai mis en pièce jointe mon fichier,
Quand je clique sur "feuille suivante" le roulement de chaque engin ce fait grâce à ta macro, sauf que le problème c'est qu'il ne faut pas que les noms soit dans plusieurs engins sur une même tranche
Exemple :
le vendredi il ne faut pas que A soit dans l'engin1 et dans l'engin 2 en même temps
Je pense que le problème vient du fait que le nombre de nom soit différent
La base du roulement est la trame présenté dans le fichier
Une fois le roulement pour la feuille suivante, le bouton feuille précédente sert à revenir en arrière
Merci pour l'aide, désolé j'ai du mal a réaliser mon fichier
Je vois !
S'il s'agit d'équilibrer en tenant compte des compétences, c'est dès le départ impossible !
Il y a 5 postes à tenir (par vacation ou "journée", les SA et DI étant dédoublés, cela fait 9 journées par semaine).
Globalement, 9 unités pour tenir 5 postes par journées, l'équilibre purement numérique est atteint sur 9 "journées", chacun en aura fait 5 sur un poste quelconque.
Mais inutile de se lancer sur le calcul d'autres facteurs d'équilibre cyclique, car nous avons 3 unités dont la compétence se limite à un seul poste (le 5). Sur 9 "journées" ces 3 unités devront tenir 5 fois ce seul poste qui leur est dévolu, ce qui fait 15 utilisations sur ce poste pour un besoin de 9 ! S'il ne font que 9 utilisations sur ce poste (3 chacun) ils devraient en faire 6 (chacun 2 autres) sur d'autres postes. Or, ils ne le peuvent !!! ? En étant en outre les seuls à tourner sur le 5.
Il faut donc que tu précises un peu mieux et en détail ton organisation et les règles à appliquer... Car il manque apparemment toutes les informations essentielles pour commencer à s'attaquer au problème.
Cordialement.
J'ai indiqué le poste 5 au lieu du 3 dans le post précédent.
Les 3 se partageant seuls le poste 5, peuvent l'assurer et auront à compléter sur d'autres postes, en y participant plus faiblement que les autres. Mais les 3 que l'on ne peut mettre que sur le poste 3, l'assureront mais ne pouvant aller ailleurs laissent à découvert 6 séances hebdo sur les postes 1, 2 et 4.
MFerrand a écrit :Je vois !
Mais là c'est un problème de cycle que tu n'as pas posé et qui n'a rien à voir avec le problème posé ! S'il s'agit d'équilibrer en tenant compte des compétences, c'est dès le départ impossible !
Il y a 5 postes à tenir (par vacation ou "journée", les SA et DI étant dédoublés, cela fait 9 journées par semaine).
Globalement, 9 unités pour tenir 5 postes par journées, l'équilibre purement numérique est atteint sur 9 "journées", chacun en aura fait 5 sur un poste quelconque.
Mais inutile de se lancer sur le calcul d'autres facteurs d'équilibre cyclique, car nous avons 3 unités dont la compétence se limite à un seul poste (le 5). Sur 9 "journées" ces 3 unités devront tenir 5 fois ce seul poste qui leur est dévolu, ce qui fait 15 utilisations sur ce poste pour un besoin de 9 ! S'il ne font que 9 utilisations sur ce poste (3 chacun) ils devraient en faire 6 (chacun 2 autres) sur d'autres postes. Or, ils ne le peuvent !!! ? En étant en outre les seuls à tourner sur le 5.
Il faut donc que tu précises un peu mieux et en détail ton organisation et les règles à appliquer... Car il manque apparemment toutes les informations essentielles pour commencer à s'attaquer au problème.
Cordialement.
Merci et je pense que tu as cerné le problème, je prépare ça au mieux.
Car en effet il y a des personnes qui ne peuvent pas être dans un engin du a un manque de formation et il faut essayer d'avoir une répartition équitable des postes
Cordialement
Bonjour Mr Ferrand
tout d'abord merci pour le partage de votre savoir qui nous est très utile , à nous les debutant…….
votre macro permet en cliquant sur suivant de dérouler vers le bas
est il possible avec un bouton precedent de dérouler vers le haut?
merci