Format date - textbox sur feuille - VBA Excel

Signaler
Messages postés
44
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
14 mars 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

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

End Sub
.....................

Quelqu'un aurait-il une proposition à me faire??

Merci bien.

7 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Tapez le texte de l'url ici.

____________________
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
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

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

Re-salut,

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/"


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

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
Messages postés
7
Date d'inscription
lundi 16 juin 2008
Statut
Membre
Dernière intervention
8 juin 2013

bonjour à tous.

s'il vous plait j'ai besoin de votre aide, j'ai 3 textbox dans ma userforme nomméé "contrat".


textbox1 = date_retour_prevu
textbox2 = nombre_de_jour_prevu
textbox3 = tarif_prevu


je veux faire: textbox3 = textbox1 + textbox2


merci de votre aide je compte sur vous
Messages postés
7
Date d'inscription
lundi 16 juin 2008
Statut
Membre
Dernière intervention
8 juin 2013

c'est a dire format date + format nombre
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.