'la macro "_Change" de la feuille se déclanche à chaque changement d'une (ou plusieurs)
'cellule de la feuille.
'"Target" représente cette(ces) cellule(s) venant(s) de changer
Private Sub Worksheet_Change(ByVal Target As Range)
Dim jj As Integer, mm As Integer, aaaa As Integer
'ici, on précise sur quelle zone de la feuille doit s'appliquer le code qui suit
'dans cette exemple, la zone "A1:A10"
If Not Application.Intersect(Range("A1:A10"), Target(1, 1)) Is Nothing Then
'si la cellule Target est numérique et est a une longeur de 4 caractères
If IsNumeric(Target(1, 1).Value) And Len(Target(1, 1).Text) = 4 Then
'récupérer jj et mm
jj = CInt(Left(Target(1, 1).Text, 2))
mm = CInt(Right(Target(1, 1).Text, 2))
'si c'est bien une date du type "jjmm" valide
If IsDate(DateSerial(Year(Now), mm, jj)) Then
'modifier et le format la valeur de la cellule Target
Target(1, 1).Value = DateSerial(Year(Now), mm, jj)
Target(1, 1).NumberFormat = "dd/mm/yyyy"
End If
'sinon, si la cellule Target est numérique et est a une longeur de 8 caractères
ElseIf IsNumeric(Target(1, 1).Value) And Len(Target(1, 1).Text) = 8 Then
'récupérer jj, mm et aaaa
jj = CInt(Left(Target(1, 1).Text, 2))
mm = CInt(Mid(Target(1, 1).Text, 3, 2))
aaaa = CInt(Right(Target(1, 1).Text, 4))
'si c'est bien une date du type "jjmm" valide
If IsDate(DateSerial(aaaa, mm, jj)) Then
'modifier et le format la valeur de la cellule Target
Target(1, 1).Value = DateSerial(aaaa, mm, jj)
Target(1, 1).NumberFormat = "dd/mm/yyyy"
End If
End If
End If
End Sub