Private Sub DateBoxMasK(ByVal tbx As Object, ByVal KeyCode As MSForms.ReturnInteger, Optional MaskVisible As Boolean = True)
    Dim V$, K&, Mask$, X&, Pos&
    Mask = "__/__/____"
    With tbx
        V = .Value & Mid(Mask, Len(.Value) + 1)    'on prend la valeur actuelle du textbox
        Pos = .SelStart + 1:
        Select Case KeyCode
        Case 96 To 105, 48 To 57
            If Pos = 3 Or Pos = 6 Then Pos = Pos + 1
            K = KeyCode:
            If K >= 96 Then K = K - 48:
            If Pos > 10 Then KeyCode = 0: Exit Sub
            Mid(V, Pos, 1) = Chr(K)
            If Pos = 2 Or Pos = 5 Then Pos = Pos + 1
            '*******Contrôle de la validité de la date*********
            If Val(V) > 31 Or Val(Mid(V, 1, 1)) > 3 Then V = Mask: Pos = 0
            If Val(Mid(V, 4, 1)) > 1 Or Val(Mid(V, 4, 2)) > 12 Then Mid(V, 4, 2) = Mid(Mask, 4, 2): Pos = 3
            If Mid(V, 7, 4) Like "####" Then an = Mid(V, 7, 4) Else an = "2004"
            If Mid(V, 1, 5) Like "##/##" Then If Not IsDate(Mid(V, 1, 6) & an) Then Mid(V, 4) = Mid(Mask, 4): Pos = 3
            '****fin de Contrôle de la validité de la date*****
         KeyCode = 0
      Case 8:
            If Pos = 7 Or Pos = 4 Then Pos = Pos - 1
            If Pos > 1 Then Mid(V, Pos - 1, 1) = Mid(Mask, Pos - 1, 1)
            Pos = Application.Max(0, Pos - 2)
         KeyCode = 0
     
        Case 13
           If Len(.Value) < 10 Or InStr(1, V, "_") > 0 Then KeyCode = 0
  
       
        Case Else: KeyCode = 0    'toutes les autres touches sont automatiquement annulées
        End Select
         If V = Mask Then V = ""
        If V <> "" And Not MaskVisible Then V = Split(V, Mid(Mask, 1, 1))(0)
        .Value = V
        .SelStart = Application.Min(10, Pos)
    End With
End Sub