Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Date 'déclare la variable d (date Début)
Dim a As Long 'déclare la variable a (Année)
Dim ms As Byte 'déclare la variable ms (Mois Suivant)
Dim x As Date 'déclare la variable x (incrément de date)
Dim df As Date 'déclare la variable df (Date Fin)
Dim y As Byte 'déclare la variable y (incrément de ligne)
If Target.Address <> "$A$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en A1, sort de la procédure
a = CLng(ActiveSheet.Name) 'définit l'année a
d = Format("1/" & Target.Value & "/" & a, "dd/mm/yyyy") 'définit la date de début
ms = Month(d) + 1 'définit le mois suivant
If ms = 13 Then ms = 1: a = a + 1 'si le mois suivant est égale à 13, ms devient 1, a devient a+1
df = Format("1/" & ms & "/" & a, "dd/mm/yyyy") 'définit la date de fin
Range("A1").CurrentRegion.Offset(0, 1).Resize(, 2).ClearContents 'supprime les anciennes dates
y = 1 'définit la variable y
For x = d To df - 1 'boucle sur toutes les date du mois
Cells(y, 2).Value = Format(x, "dddd") 'place le jour de la semaine
Cells(y, 3).Value = Format(x, "d") 'place les jours du mois
y = y + 1 'redéfinit la variable y
Next x 'prochaine date de la boucle
ActiveCell.Offset(0, 1).Select 'sélectionne B1
End Sub