Format date - textbox sur feuille - VBA Excel

talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012 - 29 janv. 2012 à 00:26
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 6 juin 2013 à 10:44
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 janv. 2012 à 01:08
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
29 janv. 2012 à 01:17
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
0
Utilisateur anonyme
29 janv. 2012 à 18:53
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
0
Utilisateur anonyme
29 janv. 2012 à 19:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tiesto08 Messages postés 7 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 8 juin 2013
6 juin 2013 à 10:34
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
0
tiesto08 Messages postés 7 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 8 juin 2013
6 juin 2013 à 10:35
c'est a dire format date + format nombre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 juin 2013 à 10:44
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.
0
Rejoignez-nous