Bonjour tout le monde, j'ai un petit souci avec une ligne en vba.
Je souhaite inscrire dans un textbox la date, un contrôle m'empêche de saisir autre chose que des chiffres, ainsi que des valeurs absurdes (jour>35 par exemple), cependant, ce bout de code m'empêche de saisir "0" comme premier caractère de mon textbox.
Auriez vous une idée de ce qui cloche svp? Merci beaucoup tout plein d'avance
'GESTION DATE
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
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 supérieur à 12, annuler la dernière saisie
If CLng(mois) > 12 Then
.Text = Left(.Text, Len(.Text) - 2)
Exit Sub
End If
If Len(.Text) = 6 Then .Text = .Text & Year(Date)
'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
If Len(TextBox5) = 10 And IsDate(DateValue(jour & " " & moisS & " " & annee)) Then TextBox8.SetFocus
End Sub
Je souhaite inscrire dans un textbox la date, un contrôle m'empêche de saisir autre chose que des chiffres, ainsi que des valeurs absurdes (jour>35 par exemple), cependant, ce bout de code m'empêche de saisir "0" comme premier caractère de mon textbox.
Auriez vous une idée de ce qui cloche svp? Merci beaucoup tout plein d'avance
'GESTION DATE
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
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 supérieur à 12, annuler la dernière saisie
If CLng(mois) > 12 Then
.Text = Left(.Text, Len(.Text) - 2)
Exit Sub
End If
If Len(.Text) = 6 Then .Text = .Text & Year(Date)
'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
If Len(TextBox5) = 10 And IsDate(DateValue(jour & " " & moisS & " " & annee)) Then TextBox8.SetFocus
End Sub
Dernière édition: