Salut mikangel,
Salut André, X Cellus,
voici... à tester, comme toujours!
Le seul cas non prévu : si le premier WE de garde tombe un dimanche 1er janvier! Déso, hein!
Tout ce que tu as à faire est de double-cliquer sur le "SAM" du premier WE de garde souhaité, aussi souvent que l'alternance doit être modifiée puisque le changement ne s'opère qu'à partir de la date exacte sélectionnée.
Le code se trouve dans le module VBA 'ThisWorkbook'.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Dim dDate As Date, dLast As Date, iOK%
'
If Target.Column Mod 8 = 2 And Target.Interior.Color = RGB(172, 185, 202) And Weekday(CDate(Target), vbMonday) = 6 Then
Cancel = True
Application.ScreenUpdating = False
'
dDate = CDate(Target)
For x = IIf(Target.Row < 63, 22, 63) To 63 Step 41
For y = IIf(iOK = 0, Target.Column, 2) To 43 Step 8
dLast = DateAdd("d", -1, DateAdd("m", 1, CDate(Cells(x, y))))
For Z = IIf(iOK = 0, Target.Row, x) To x + Day(dLast) - 1
Cells(Z, y).Interior.Color = IIf(iOK = 1 And (Z = 22 Or Z = 63) Or _
Cells(Z - 1, y).Interior.Color = RGB(175, 234, 255) And Weekday(CDate(Cells(Z - 1, y)), vbMonday) = 6, _
RGB(175, 234, 255), RGB(172, 185, 202))
If Weekday(CDate(Cells(Z, y)), vbMonday) = 6 And CDate(Cells(Z, y)) = dDate Then
iOK = IIf(dDate = dLast, 1, 2)
Cells(Z, y).Resize(iOK, 1).Interior.Color = RGB(175, 234, 255)
dDate = DateAdd("d", 14, dDate)
End If
Next
Next
Next
'
Application.ScreenUpdating = True
End If
'
End Sub
A+