Je rencontre un gros probleme pour paramétrer un format date, au niveau d'une textbox inséré sur une feuille Excel.
Ma textbox est paramétré avec l'évenement Change.
Mon objectif est que l'utilisateur ne puisse saisir qu'une date entière en format dd/mm/yyyy, sinon, je veux que les données s'effacent et se bloquent si l'utilisateur sort de ce format.
J'ai commencé à paramétrer ce code, mais il est incomplet et j'ai l'impression que je me complique la vie. Voici ce que cela donne :
......................
Private Sub Textbox1_Change()
If Len(Textbox1.Text) = 2 Then
If Val(Textbox1.Text) > 31 Or Val(Textbox1.Text) < 1 Or IsNumeric (Textbox1.Text) = False Then
Textbox1.Text = ""
Else
Textbox1.Text = Textbox1.Text & "/"
End If
End If
If Len(Textbox1.Text) = 5 Then
If Val(Right(Textbox1.Text, 2)) > 31 Or Val(Right(Textbox1.Text, 2)) < 1 Or IsNumeric(Right(Textbox1.Text, 2)) = False Then
Textbox1.Text = Left(Textbox1.Text, 3)
Else
Textbox1.Text = Textbox1.Text & "/"
End If
End If
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Pour tester si le format est cohérent :
If Valeur Like "##/##/####" Then 'Test si je format est numérique séparé par des /
Ensuite, tu peux utiliser Split pour extraire chacunes des valeurs.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
Je reprends donc mon code de la première discussion, où je t'ai laissé réfléchir un peu.
C'est quand-même pas trop te demander?
Au passage (très important), regarde le point numéro 2 de la signature de NHenry.
Private Sub TextBox1_Change()
If Len(TextBox1.Text) = 2 Then
If Val(TextBox1.Text) > 31 Or Val(TextBox1.Text) < 1 Or IsNumeric(TextBox1.Text) = False Then
TextBox1.Text = ""
Else
TextBox1.Text = TextBox1.Text & "/"
End If
End If
If Len(TextBox1.Text) = 5 Then
If Val(Right(TextBox1.Text, 2)) > 31 Or Val(Right(TextBox1.Text, 2)) < 1 Or IsNumeric(Right(TextBox1.Text, 2)) = False Then
TextBox1.Text = Left(TextBox1.Text, 3)
Else
TextBox1.Text = TextBox1.Text & "/"
End If
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If IsNumeric(Chr(KeyAscii)) False Or Len(TextBox1.Text) > 9 Then KeyAscii 0
End Sub
'Dans ce cas l'utilisateur est forcé à entrer des valeurs au format "/0x/" et non "/x/"
Bon, je l'ai fait un peu "a l'arrache", une variable booléenne en plus va permettre à l'utilisateur l’effacement de la saisie avec BackSpace.
Dim Deleting As Boolean
Private Sub TextBox1_Change()
If Deleting = False Then
If Len(TextBox1.Text) = 2 Then
If Val(TextBox1.Text) > 31 Or Val(TextBox1.Text) < 1 Or IsNumeric(TextBox1.Text) = False Then
TextBox1.Text = ""
Else
TextBox1.Text = TextBox1.Text & "/"
End If
End If
If Len(TextBox1.Text) = 5 Then
If Val(Right(TextBox1.Text, 2)) > 31 Or Val(Right(TextBox1.Text, 2)) < 1 Or IsNumeric(Right(TextBox1.Text, 2)) = False Then
TextBox1.Text = Left(TextBox1.Text, 3)
Else
TextBox1.Text = TextBox1.Text & "/"
End If
End If
End If
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Then
Deleting = True
Else
Deleting = False
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If IsNumeric(Chr(KeyAscii)) False Or Len(TextBox1.Text) > 9 Then KeyAscii 0
End Sub
'Dans ce cas l'utilisateur est forcé à entrer des valeurs au format "/0x/" et non "/x/"
Cordialement
CF2i - Guadeloupe
Ingénierie Informatique
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bonjour,
Ouvre ta propre discussion sur cette difficulté qui n'a rien à voir avec le présent sujet !
Ne le fais toutefois qu'après avoir ouvert ton aide VBA aux rubriques : cdate et DatyeAdd
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.