Bonjour,
Tu avais esquinté une formule MFC par une suppression... comme te l'a signalé Steelson [Salut !]
Etant partisan de ne pas multiplier les MFC pour un même résultat, donc limiter à 2 (Samedi et Dimanche) pour les cellules devant être affectées sur l'ensemble du calendrier, cela donnait une formule conditionnelle du type :
=ET(MOD(LIGNE(B2);4)<>1;JOURSEM(DECALER(B2;2-MOD(LIGNE(B2)-1;4);))=1)
et qui encore n'incorporait pas l'élimination des cellules vides (renvoyant 0, reconnue comme valeur date par Excel,...)
Mais la MFC ne voulant pas la digérer pour l'appliquer, je suis donc passé à 2 fonctions personnalisées (ton classeur étant xlsm...) que la MFC applique sans difficulté :
Function ESTDI(c As Range) As Boolean
Dim lg%
Application.Volatile
lg = c.Row
Set c = c.Offset(2 - ((lg - 1) Mod 4))
If c <> "" And Weekday(c) = 1 And lg Mod 4 <> 1 Then ESTDI = True
End Function
Function ESTSA(c As Range) As Boolean
Dim lg%
Application.Volatile
lg = c.Row
Set c = c.Offset(2 - ((lg - 1) Mod 4))
If c <> "" And Weekday(c) = 7 And lg Mod 4 <> 1 Then ESTSA = True
End Function
Cela simplifie quelque peu par la même occasion la formule conditionnelle appliquée à l'ensemble du tableau :
=ESTDI(B2)
ou
=ESTSA(B2)
Pour ce qui est des boutons (j'ai rajouté les 3 autres qui semblaient déjà prévus), la simplicité s'alliant généralement bien avec l'efficacité, j'ai renommé les boutons par le libellé qu'ils doivent chacun inscrire. La même macro est affectée à tous les boutons :
Sub Planifier()
Dim lib$, lg%
If Selection.Rows.Count > 1 Then Exit Sub
lg = Selection.Row
If lg > 48 Or lg Mod 4 > 0 Then Exit Sub
lib = Application.Caller
Application.ScreenUpdating = False
Selection.Value = lib
End Sub
laquelle récupère le libellé du bouton qui l'appelée, et l'inscrit dans la zone sélectionnée, si la sélection est sur une seule ligne, si cette ligne est dans le calendrier et correspond à une ligne d'inscription.
Cordialement.