Gestion de la touche "Retour en arrière" dans une TextBox
- Messages
- 1'025
- Excel
- 2016 FR // 365
- Inscrit
- 19/04/2019
- Emploi
- Étudiant en 5e année d'école d'Ingénieur
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
- Messages
- 1'025
- Excel
- 2016 FR // 365
- Inscrit
- 19/04/2019
- Emploi
- Étudiant en 5e année d'école d'Ingénieur
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 !!
- Messages
- 1'025
- Excel
- 2016 FR // 365
- Inscrit
- 19/04/2019
- Emploi
- Étudiant en 5e année d'école d'Ingénieur
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."