XL 2016 Planning agents avec remplissage automatique avec condition

Loc3007

XLDnaute Nouveau
Bonjour,

Vous trouverez ci-joint un calendrier qui calcule les jours fériés automatique sur de nombreuses années.

Mon soucis, j'aimerai que ce tableau se remplisse automatiquement avec le nom des agents en prenant en compte des conditions; c'est a dire par exemple que l'agent A ne travaille pas le mercredi, le B le jeudi... Et je voudrais qu'il y ait un roulement (pas toujours le même agent le 1er du mois). les agents ne travaillent pas le week-end et les jours fériés.

Je vous remercie pour votre aide.
 

Pièces jointes

  • copie-de-essai-tableau-perm.xlsx
    21.7 KB · Affichages: 22
Solution
re
c'est possible
VB:
Sub jour_semaine()
Dim ligne As Integer, ligne_nom As Integer
On Error Resume Next
Call f_precedente
Range("c5:c40").ClearContents
ligne_nom = Range("K1")
For ligne = 5 To 35
If Cells(ligne, 2) <> "" Then
If Weekday(Cells(ligne, 2), 2) = 3 And ligne_nom = 1 Then ligne_nom = 2
If Weekday(Cells(ligne, 2), 2) = 4 And ligne_nom = 2 Then ligne_nom = 3
If Weekday(Cells(ligne, 2), 2) <= 5 And Application.CountIf([Feries], Cells(ligne, 2)) = 0 Then

Cells(ligne, 3) = Sheets("NOM").Cells(ligne_nom, 1)
ligne_nom = ligne_nom + 1
If ligne_nom = 9 Then ligne_nom = 1
End If
End If
Next ligne
End Sub

If Weekday(Cells(ligne, 2), 2) = 3(pour le mercredi) And ligne_nom = 1(pour l'agent A) Then...

GALOUGALOU

XLDnaute Accro
re loc 3007 bonsoir le forum

si j'ai bien compris, cette macro devrait faire l'affaire
VB:
Sub jour_semaine()
Dim ligne As Integer, ligne_nom As Integer
On Error Resume Next
Call f_precedente
Range("c5:c40").ClearContents
ligne_nom = Range("K1")
For ligne = 5 To 35
If Cells(ligne, 2) <> "" Then
If Weekday(Cells(ligne, 2), 2) <= 5 And Application.CountIf([Feries], Cells(ligne, 2)) = 0 Then
Cells(ligne, 3) = Sheets("NOM").Cells(ligne_nom, 1)
ligne_nom = ligne_nom + 1
If ligne_nom = 9 Then ligne_nom = 1
End If
End If
   Next ligne
   
End Sub
la feuille prédédente est identifiée en cellule I1 avec cette macro
Code:
Sub f_precedente()
For n = 1 To Sheets.Count
 If Sheets(n).Name = ActiveSheet.Name Then
  If n = 1 Then
    Sheets(Sheets.Count).Select
    Exit Sub
  Else
    Range("i1") = Sheets(n - 1).Name
    Exit Sub
  End If
 End If
Next
End Sub

je vous ai configuré un classeur exemple pour la mise en application
le principe
1er récupérer le nom de l'onglet précédent pour identifier le dernier collaborateur et la ligne de référence.
en cellule K1 une formule renvoie le numéro de ligne de référence.
du 1 janvier au 31 décembre le roulement est respecté conformément à l'ordre des collaborateurs figurant sur la feuille NOM.

mois par mois il sera possible de modifier cette ordre en inscrivant le numéro de ligne du collaborateur devant intervenir le 1er du mois
comme demandé, aucune affectation, les samedi dimanche et jours fériés.
cdt
galougalou
 

Pièces jointes

  • xld-tableau-permv4.xlsm
    117.8 KB · Affichages: 31

Loc3007

XLDnaute Nouveau
Bonsoir,
Je vous remercie pour ce travail, c'est très bien.
Je voulais savoir s'il était possible d'ajouter des conditions comme par exemple l'agent A ne travaille jamais le mercredi et B le jeudi ?
Encore merci pour le tableau très pratique!
Cordialement
 

GALOUGALOU

XLDnaute Accro
re
c'est possible
VB:
Sub jour_semaine()
Dim ligne As Integer, ligne_nom As Integer
On Error Resume Next
Call f_precedente
Range("c5:c40").ClearContents
ligne_nom = Range("K1")
For ligne = 5 To 35
If Cells(ligne, 2) <> "" Then
If Weekday(Cells(ligne, 2), 2) = 3 And ligne_nom = 1 Then ligne_nom = 2
If Weekday(Cells(ligne, 2), 2) = 4 And ligne_nom = 2 Then ligne_nom = 3
If Weekday(Cells(ligne, 2), 2) <= 5 And Application.CountIf([Feries], Cells(ligne, 2)) = 0 Then

Cells(ligne, 3) = Sheets("NOM").Cells(ligne_nom, 1)
ligne_nom = ligne_nom + 1
If ligne_nom = 9 Then ligne_nom = 1
End If
End If
Next ligne
End Sub

If Weekday(Cells(ligne, 2), 2) = 3(pour le mercredi) And ligne_nom = 1(pour l'agent A) Then ligne_nom = 2(on saute une ligne de 1 à 2))
If Weekday(Cells(ligne, 2), 2) = 4(pour le jeudi) And ligne_nom = 2 (pour l'agent B)Then ligne_nom = 3 (on saute une ligne de 2 à 3))
cdt
galougalou
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 867
Membres
103 007
dernier inscrit
salma_hayek