Private Sub Tb_Date_de_Naissance7_Change()
Dim TBX As Object, t$, r$, test As Boolean
Dim flag As Boolean 'pour années antérieures à 1930
Static memo% 'pour le retour arrière
Set TBX = Tb_Date_de_Naissance7
t = TBX: r = Right(t, 1): test = Not IsNumeric(r)
flag = Mid(t, 7, 1) = "*"
If Len(t) < 6 And Len(t) < memo Then memo = Len(t): Exit Sub
memo = Len(t)
Select Case memo
Case 1
If test Then TBX = "": Exit Sub
If Val(r) > 3 Then TBX = 0 & r
Case 2
If test Or Val(Left(t, 2)) = 0 Or Val(Left(t, 2)) > 31 _
Then TBX = Left(t, 1) Else TBX = t & "-"
Case 3: If r <> "-" Then TBX = Left(t, 2) & "-" & r
Case 4
If test Then TBX = Left(t, 3): Exit Sub
If Val(r) > 1 Then TBX = Left(t, 3) & 0 & r
Case 5
If test Or Val(Mid(t, 4, 2)) = 0 Or Val(Mid(t, 4, 2)) > 12 _
Then TBX = Left(t, 4) Else TBX = t & "-"
Case 6: If r <> "-" Then TBX = Left(t, 5) & "-" & r
Case 7: If test And Not flag Then TBX = Left(t, 6)
Case 8, 10
If test Then TBX = Left(t, 7): Exit Sub
If flag Then Exit Sub
If Not IsDate(t) Then TBX = "": Exit Sub
If Day(CDate(t)) <> Val(t) Then TBX = "": Exit Sub
TBX = Format(CDate(t), "dd-mm-yyyy")
Case 9: If Not flag Or test Then TBX = Left(t, 6)
Case Is > 10: TBX = Left(Replace(t, "*", ""), 10)
End Select
End Sub