Private Sub TextBox5_Change()
'on veut la date au format "jj/mm/aaaa"
Dim tabVal() As String, jour As String, mois As String, moisS As String, annee As String, mauvaiseSaisie As Boolean
mauvaiseSaisie = False
On Error Resume Next
With TextBox5
'remplace le "." par le "/"
If Mid(.Text, Len(.Text), 1) = "." Then .Text = Mid(.Text, 1, (Len(.Text) - 1)) & "/"
'remplace "X/" par "0X/"
If Mid(.Text, 2, 1) = "/" Then .Text = "0" & .Text
'remplace "XX/X/" par "XX/0X/"
If Mid(.Text, 5, 1) = "/" Then .Text = Mid(.Text, 1, Len(.Text) - 2) & "0" & Mid(.Text, Len(.Text) - 1, 2)
'ajoute le premier "/" si pas présent
If Len(.Text) = 2 And .Text Like "##" Then .Text = .Text & "/"
'ajoute le deuxième "/" si pas présent
If Len(.Text) = 5 And .Text Like "##/##" Then .Text = .Text & "/"
'si ce ne sont pas des chiffres qui ont été saisis
If Not .Text Like Left("##/##/####", Len(.Text)) Then
'annuler la saisie du dernier caractère
mauvaiseSaisie = True
End If
'éclater la chaine de caractère
tabVal = Split(.Text, "/")
jour = tabVal(0)
If jour = "" Then jour = "01"
mois = tabVal(1)
If mois = "" Then mois = "01"
moisS = "jan": moisS = Format(DateSerial(2000, mois, 1), "mmm")
annee = tabVal(2)
If annee = "" Then annee = "2000"
'si le mois est suppérieur à 12, annuler la dernière saisie
If CLng(mois) > 12 Then
mauvaiseSaisie = True
End If
'si ce n'est pas une date valide, annuler la dernière saisie
If Not IsDate(DateValue(jour & " " & moisS & " " & annee)) Then
mauvaiseSaisie = True
End If
If mauvaiseSaisie Then
'annuler la saisie du dernier caractère
.Text = Left(.Text, Len(.Text) - 1)
Exit Sub
End If
End With
End Sub