Public Sub CreerOnglets()
' Ctrl + w pour démarrer la procédure
Dim année, debut, fin, i As Long, j, s, s1, sH
année = Val(InputBox("Quelle année ?"))
If année = 0 Then Exit Sub
Application.ScreenUpdating = False
debut = DateSerial(année, 3, 20)
fin = DateSerial(année, 11, 27)
For i = debut To fin 'boucle du premier jusqu'au dernier jour
j = WorksheetFunction.IsoWeekNum(i)
jour = WorksheetFunction.Text(i, "[$-fr-fr]dddd") 'le jour de la semaine
On Error Resume Next
Set sH = Nothing: Set sH = Sheets(jour) 'chercher la feuille nommée lundi, mardi, ....
On Error GoTo 0
If sH Is Nothing Then
MsgBox "la feuille origine du " & jour & " n'existe pas", vbCritical
Else
sH.Copy After:=Sheets(Sheets.Count) 'copiez feuille "modèle" (lundi, mardi, mercredi ....) et collez-la comme dernière feuille
s = Mid("LMMJVSD", Weekday(i, 2), 1) & " " & Format(i, "dd-mm") 'le date en texte, 1 charactère du jour de la semaine et la date
ActiveSheet.Range("B3") = s ' écrivez ce nom dans la cellule B2 de la nouvelle feuille
With ActiveSheet.Range("B2") 'votre cellule B2
.Value = i 'la date
.NumberFormat = "dddd dd mmmm yyyy" 'le format
.Font.Color = RGB(255, 0, 0) 'couleur du texte
.Font.Bold = True 'en gras
End With
ActiveSheet.Tab.ColorIndex = WorksheetFunction.IsoWeekNum(i) 'chaquesemaine un autre couleur pour le tab
On Error Resume Next 'continuer en cas d'erreur
For j = 0 To 99 'on essayera 100 fois à nommer la nouvelle feuille
s1 = s & IIf(j = 0, "", "(" & j & ")") 'le nom de la feuille, si cette feuille existe déjà, on ajoutera un index entre parenthèses
Set sH = Nothing: Set sH = Sheets(s1) 'verifier si cette feuille (avec eventuel parnthèses et index) n'existe pas
If sH Is Nothing Then ActiveSheet.Name = s1: Exit For 'cette feuille n'existe pas encore, donc renommez la nouvelle feuille comme-çà
Next
On Error GoTo 0
End If
Next i
Application.Goto Worksheets("lundi").Cells(1, 1) 'retourner vers A1 de la feuille "Modèle"