Bonjour à tous,

Je souhaite faciliter la saisie d'une date dans une textbox. J'ai donc limité les caractères autorisés (seulement numériques) et j'ai fait en sorte que lorsqu'on arrive aux 3ème et 6ème caractères, le caractère "/" s'affiche automatiquement. J'ai également mis une condition IsDate à la validation de la saisie.

Mon problème se situe lorsque je veux supprimer des caractères (erreur dans la saisie), lorsque je veux n'effacer que le caractère avant le "/", cela efface les 2 caractères avant le "/". J'ai essayer en pas à pas de trouver d'où venait le problème, je vois bien à quel moment ça ne va pas, mais n'arrive pas à corriger.

Pouvez-vous m'aider? Ci-dessous le code de la textbox nommée textbox.

Merci


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Private Sub textbox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
'exemple pour format xx/xx/xxxx
textbox.MaxLength = 10
 
If textbox <> "" Then
    If Not IsDate(textbox.Value) Then
        MsgBox "Veuillez entrer une date valide au format JJ/MM/AAA", vbExclamation, "Format de date incorrecte"
        textbox = ""
        Exit Sub
    End If
End If
 
End Sub
 
 
Private Sub textbox_Change()
 
    Dim Valeur As Byte
 
    Valeur = Len(Me.textbox)
    If Valeur = 2 Or Valeur = 5 Then textbox = textbox & "/"
 
End Sub
 
 
Private Sub textbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
    Dim Valeur As Byte
 
    ' Si la valeur n'est pas comprise entre 0 et 9
    If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
      MsgBox "Caractère non autorisé"
      KeyAscii = 0 'on annule la pression sur la touche
    End If
 
End Sub
 
 
Private Sub textbox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
    Dim Valeur As Byte
    Dim Temp As String
 
    Valeur = Len(Me.textbox.Value)
 
    If KeyCode = vbKeyBack And Valeur = 6 Then
        Temp = Left(Me.textbox.Value, 4)
        Me.textbox.Value = ""
        Me.textbox.Value = Temp
    ElseIf KeyCode = vbKeyBack And Valeur = 3 Then
        Temp = Left(Me.textbox.Value, 1)
        Me.textbox.Value = ""
        Me.textbox.Value = Temp
    End If
 
End Sub