bonjour anarium,
la macro assume que vous commencez votre roulement le 01/01/2024 avec "RRMMAANNRR" et cela pendant 10 années, donc vous pouvez choiser votre année entre 2024 et 2033. C'est seulement au moment au vous changez ce roulement que vous devez modifier "Roulement" et "debut", le reste se fait sur les feuilles.
Sub Shifts()
Dim Jour1, aR, Nombre, Delta, Roulement, s
Roulement = "RRMMAANNRR" 'les équipes pendant 10 jours suivants
debut = CLng(DateSerial(2024, 1, 1)) 'le premier jour où on a aplliqué ce roulement (pas nécessairement ce jour de F20 de janvier
s = WorksheetFunction.Rept(Roulement, 366) 'roulement pour 366 tours de 10 jours = 3660 jours = 10 années à partir du jour de début = 2024-2033
annee = Sheets("janvier").Range("B3").Value
If WorksheetFunction.Median(Year(debut), Year(debut) + 9, annee) = annee Then
aa = Evaluate("TEXT(DATE(2024, column(A1:L1) ,1),""[$-Fr-fr]mmmm"")")
For i = 1 To UBound(aa)
Set sh = Sheets(Replace(Replace(aa(i), "é", "e"), "û", "u")) 'nom du mois
'Application.Goto sh.Range("F20"), 1
Jour1 = CLng(DateSerial(annee, i, 1)) 'premier jour
Nombre = WorksheetFunction.EDate(Jour1, 1) - Jour1 'nombre de jours
Jours = Evaluate("transpose(row(offset(A1," & Jour1 - 1 & ",," & Nombre & "," & Nombre & ")))") 'les dates
Delta = Jour1 - debut
ReDim aR(1 To Nombre)
For j = 1 To Nombre
aR(j) = Mid(s, Delta + j, 1)
Next
With sh.Range("F20")
.Resize(, Application.Max(29, Nombre)).ClearContents 'vider les dates de ce mois
.Resize(, Nombre).Value = Jours 'remplacer ces cellules vides par les dates calculées
.Offset(2).Resize(, Application.Max(29, Nombre)).ClearContents 'vider les "roulements" de ce mois
.Offset(2).Resize(, Nombre).Value = aR 'remplacer ces cellules vides par les nouveaux roulements
End With
Next
Else
MsgBox "l'année est hors de l'intervalle prévu"
End If
End Sub