TextBox avec date qui se modifie (année raccourcie)

Résolu/Fermé
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Bonjour,

Je suis bien embêté avec un code que je n'arrive décidément pas à faire fonctionner...

Le code :

Private Sub TextBox_DATE_CHARGEMENT_AfterUpdate()

Dim Valeur As Byte
Dim GAUCHE_DATE_CHARGEMENT As String
Dim DROITE_DATE_CHARGEMENT As String

GAUCHE_DATE_CHARGEMENT = Left(Me.TextBox_CP_CHARGEMENT, 6)
DROITE_DATE_CHARGEMENT = Right(Me.TextBox_CP_CHARGEMENT, 2)

Valeur = Len(Me.TextBox_DATE_CHARGEMENT)

If Valeur = 8 Then Me.TextBox_DATE_CHARGEMENT = GAUCHE_DATE & "20" & DROITE_DATE

End Sub


J'ai également ce code qui me permet d'avoir des "/" automatiques.

Private Sub TextBox_DATE_CHARGEMENT_Change()

Me.TextBox_DATE_CHARGEMENT.BackColor = &H80000005
Dim Valeur As Byte
Me.TextBox_DATE_CHARGEMENT.MaxLength = 10
Valeur = Len(Me.TextBox_DATE_CHARGEMENT)
If Valeur = 2 Or Valeur = 5 Then Me.TextBox_DATE_CHARGEMENT = Me.TextBox_DATE_CHARGEMENT & "/"
End Sub


Voilà mon soucis. J'essaye dans le premier code que si la personne écrit : 01/01/15 par exemple (010115 du coup avec les "/" automatiques du deuxième code), la textbox affiche immédiatement 01/01/2015 donc rajoute l'année en entier. Mais je n'y arrive pas...

Merci d'avance pour votre aide.

Cordialement.

3 réponses

Messages postés
7653
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
Bonjour,

essaie ceci:

Option Explicit
Dim num As Boolean
Dim caract As String
Dim Valeur As Byte
Private Sub TextBox1_Change()
If num = True Then '1er caractère
'ancien
TextBox1.MaxLength = 10 'nb caracteres maxi dans textbox
 Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
Else
'nouveau
TextBox1.MaxLength = 9 'nb caracteres maxi dans textbox
 Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 6 Then TextBox1 = TextBox1 & "-"
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
caract = Left(TextBox1.Value, 1)
If IsNumeric(caract) Then
num = True
Else
num = False '
End If
End Sub




Messages postés
7653
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
Ne tiens pas compte de cela:

Else
'nouveau
TextBox1.MaxLength = 9 'nb caracteres maxi dans textbox
 Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 6 Then TextBox1 = TextBox1 & "-"
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Bonjour cs_Le Pivert,

Mon ancien code pour les "/" marche parfaitement. Je n'ai donc pas besoin d'y toucher.

Le problème est vraiment cette histoire de 01/01/15 que je voudrais qui se transforme en 01/01/2015.

Cordialement.
Messages postés
2232
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
22 janvier 2022
332
Bonjour
Dans votre premier code, êtes-vous sûr de n'avoir rien oublié, en particulier dans la ligne suivante?
If Valeur = 8 Then Me.TextBox_DATE_CHARGEMENT = GAUCHE_DATE & "20" & DROITE_DATE


If Valeur = 8 Then Me.TextBox_DATE_CHARGEMENT = GAUCHE_DATE_CHARGEMENT & "20" & DROITE_DATE_CHARGEMENT

a voir
Cdlt
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Vous avez raison. Mais ça ne marche malheureusement toujours pas...
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 678
Bonjur,

Une possibilité en trois événements :

'transforme le contenu du textbox au format souhaité
Private Sub TextBox1_AfterUpdate()
   If Len(TextBox1) < 10 Then TextBox1 = Format(TextBox1, "dd/mm/yyyy")
End Sub

'ajoute les "/" de la date au fur et à mesure de la saisie
Private Sub TextBox1_Change()
Dim Valeur As Byte
   Valeur = Len(TextBox1)
   If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
End Sub

'vérifie si la saisie est une date
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox1) Then Cancel = True: TextBox1 = ""
End Sub

Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Bonjour,

J'ai testé mais c'est bizarre, je rentre 10/10/15 (donc 101015, les slashs marchent bien) et lorsque je change de case dans mon formulaire donc "After_Update", la case devient vide.

Edit : Erreur sur mon code, la solution de Pikaju est parfaite. Merci infiniment !
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Au passage, je me disais que l'utilisateur lambda pouvait dans sa course au remplissage écrire quand-même 10/10/2015 au lieu de 10102015, ce qui génère 2 fois "/".

Une petite astuce que j'ai trouvé serait la suivante (si cela peut servir un jour) :

If valeur = 4 And Right(TextBox1, 1) = "/" Then TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
If valeur = 7 And Right(TextBox1, 1) = "/" Then TextBox1 = Left(TextBox1, Len(TextBox1) - 1)


Cordialement.