moi, je le ferais comme ceci
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim LigCoef As Long, MaDate(2), C As Range, bBeep
'part 1 = détecter les 3 plages relevantes pour modifier
If Not LCase(Sh.Name) Like "reconstitution *" Then Exit Sub 'mauvaise feuille
Set C = Sh.Range("C8") 'C = plage relevante pour les modifications
LigCoef = Sh.Cells.Find(What:="Coefficient", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False).Row
If LigCoef > 0 Then
Set C = Union(C, Sh.Range("C" & LigCoef + 2)) 'ajouter cette cellule àla plage relevante
If LigCoef >= 19 Then Set C = Union(C, Sh.Range("D15:E" & LigCoef - 3)) 'ajouter cette plage
End If
If Intersect(Target, C) Is Nothing Then Exit Sub 'target n'est pas une de ces 3 plages
'part 2 = valider la nouvelle date et si valable, remplacer le contenu de la cellule avec cette nouvelle date
With Target
If .CountLarge = 1 Then 'on change une cellele
MaDate(0) = Right("00000000" & .Value2, 8) 'ce ne sont pas 6 chiffres
If MaDate(0) Like "########" And InStr(1, MaDate(0), "+") + InStr(1, MaDate(0), "-") + InStr(1, MaDate(0), ".") + InStr(1, MaDate(0), ",") = 0 Then
MaDate(1) = CLng(CDate(Left(MaDate(0), 2) & "/" & Mid(MaDate(0), 3, 2) & "/" & Right(MaDate(0), 2))) 'la date sous forme "Double"
Debug.Print MaDate(0), Format(MaDate(1), "ddmmyyyy")
If MaDate(0) = Format(MaDate(1), "ddmmyyyy") Then
If WorksheetFunction.Median(1926, Year(MaDate(1)), 2050) = Year(MaDate(1)) Then 'intervalle années = 1926-2050
bBeep = True
Application.EnableEvents = False ' Désactiver les évènements
.Value2 = MaDate(1) 'target est la cellule C8
Application.EnableEvents = True ' Réactiver les évènements
End If
End If
End If
End If
End With
If Not bBeep Then Beep 'un "Beep" quand on n'a pas su le faire
End Sub