Gestion de la touche "Retour en arrière" dans une TextBox

Bien le bonjour,

J'ai une TextBox dans laquelle l'utilisateur entre une date. J'ai donc mis au point un code permettant de faciliter la saisie en ajoutant automatiquement les "/" :

    'On autorise la saisie de 10 caractères maximum
    TextBox_dateFinCFO2.MaxLength = 10

    'Quand la date ou le mois est inscrit, ajoute un "/"
    Dim Valeur As Byte

    Valeur = Len(TextBox_dateFinCFO2)
    If Valeur = 2 Or Valeur = 5 Then TextBox_dateFinCFO2 = TextBox_dateFinCFO2 & "/"

    'Si la date est inscrite
    If Valeur = 10 Then

        'Si la date n'est pas valide alors met un message d'erreur et supprime le contenu de la TextBox_dateFinCFO2
        If Not IsDate(TextBox_dateFinCFO2) Then

            MsgBox "Veuillez entrer une date valide."
            TextBox_dateFinCFO2.Value = ""

        End If

    End If

J'ai également un autre code qui n'autorise que les chiffres 0123456789.

Mon problème est, si l'utilisateur se trompe et souhaite se corriger en utilisant la touche "Retour en arrière" (Backspace ; Au dessus de la touche entrée), cela pose un soucis et c'est débordant. Il faut que l'utilisateur sélectionnes toute la TextBox, supprime son contenue et recommence.

C'est pourquoi j'ai essayé de gérer ça avec Application.OnKey "{BACKSPACE}" :

Private Sub TextBox_dateFinCFO2_Change()

    'On autorise la saisie de 10 caractères maximum
    TextBox_dateFinCFO2.MaxLength = 10

    Application.OnKey "{BACKSPACE}", procedure:="DoNothing"

    'Quand la date ou le mois est inscrit, ajoute un "/"
    Dim Valeur As Byte

    Valeur = Len(TextBox_dateFinCFO2)
    If Valeur = 2 Or Valeur = 5 Then TextBox_dateFinCFO2 = TextBox_dateFinCFO2 & "/"

    'Si la date est inscrite
    If Valeur = 10 Then

        'Si la date n'est pas valide alors met un message d'erreur et supprime le contenu de la TextBox_dateFinCFO2
        If Not IsDate(TextBox_dateFinCFO2) Then

            MsgBox "Veuillez entrer une date valide."
            TextBox_dateFinCFO2.Value = ""

        End If

    End If

End Sub

Private Sub DoNothing()

    MsgBox ("ok")

End Sub

Mais cela ne fonctionne pas... J'ai également essayé avec un boucle if, mais ça semble être incompatible...

Saurez-vous comment je pourrais gérer ça ?

Merci d'avance !

Bonjour

pour la gestion des date mettre un KeyUp a voir

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode < 96 Or KeyCode > 105 Then
        If TextBox1 <> "" Then TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    End If
    Select Case Len(TextBox1.Text)
        Case 2: If Val(TextBox1.Value) > 31 Then TextBox1.Value = "": MsgBox "jour trop grand" Else TextBox1 = TextBox1 & "/"
        Case 5: If Mid(TextBox1, 4, 2) > 12 Then TextBox1.Value = Mid(TextBox1, 1, 3): MsgBox "mois  trop grand" Else TextBox1 = TextBox1 & "/"
        Case 10: If Not IsDate(TextBox1) Then MsgBox "tu veux une claque ou quoi?" & vbCrLf & " Ou ta vu que ce jour existe dans le calendrier" & vbCrLf & " allez recommence!!!": TextBox1 = ""
        Case 11: TextBox1 = Mid(TextBox1, 1, 10)
    End Select
End Sub

A+

Maurice

Salut Maurice,

Merci beaucoup !

Cela marche, y'a juste un petit soucis, c'est que lorsque je supprime avec "Retour en arrière", ça me supprime deux caractère à la fois ! Tu saurais d'où ça vient ?

Et comme j'aime bien comprendre le code que j'utilise, ByVal KeyCode As MSForms.ReturnInteger signifie quoi ?

Un grand merci encore, ça m'aide beaucoup !!

J'ai réussi à trouver tout seul. Le KeyCode de la touche "Retour en arrière" est 8, ce qui donne dans mon code :

Private Sub TextBox_dateFinCFO2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    'Quand la date ou le mois est inscrit, ajoute un "/"
    Dim Valeur As Byte

    If KeyCode = 8 Or KeyCode = 46 Then

        Exit Sub

    Else

        Valeur = Len(TextBox_dateFinCFO2)

        If Valeur = 2 Or Valeur = 5 Then TextBox_dateFinCFO2 = TextBox_dateFinCFO2 & "/"

        'Si la date est inscrite
        If Valeur = 10 Then

            'Si la date n'est pas valide alors met un message d'erreur et supprime le contenu de la TextBox_dateFinCFO2
            If Not IsDate(TextBox_dateFinCFO2) Then

                MsgBox "Veuillez entrer une date valide."
                TextBox_dateFinCFO2.Value = ""

            End If

        End If

    End If

End Sub

Merci encore à Maurice qui m'a mit sur la piste

EDIT : J'ai rajouté Or KeyCode = 46 dans le If ce qui permet de gérer également la touche "Suppr."

Rechercher des sujets similaires à "gestion touche retour arriere textbox"