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