Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim M As Byte 'déclare la variable M (Mois)
Dim D As Date 'déclare la variable D (Date)
'si le changement a lieu ailleurs que dans la plage C4:C22, sort de la procédure
If Application.Intersect(Target, Sh.Range("C4:C22")) Is Nothing Then Exit Sub
Select Case Sh.Name
Case "Jan": M = 1
Case "Fév": M = 2
Case "Mar": M = 3
Case "Avr": M = 4
Case "Mai": M = 5
Case "Jun": M = 6
Case "Jul": M = 7
Case "Aoû": M = 8
Case "Sep": M = 9
Case "Oct": M = 10
Case "Nov": M = 11
Case "Déc": M = 12
Case Else: Exit Sub'si l'onglet n'est pas un onglet de mois, sort de la procédure
End Select
If IsDate(Target.Value) = True Then 'condition : si la cellule modifiée contient une date
D = DateSerial(Year(Target.Value), M + 1, 1) - 1 'définit la date D
Target.Offset(0, 1).Value = D 'place la date dans la cellule de la colonne D
ElseIf Target.Value = "" Then 'ou : si la cellule est effacée
Target.Offset(0, 1).Value = "" 'efface la cellule de la colonne D
End If 'fin de la condition
End Sub