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

Résolu/Fermé
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 20 oct. 2015 à 11:44
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 20 oct. 2015 à 14:38
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

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
20 oct. 2015 à 11:58
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




0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
20 oct. 2015 à 12:03
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 & "-"
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
20 oct. 2015 à 12:09
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.
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 oct. 2015 à 12:13
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
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
20 oct. 2015 à 14:16
Vous avez raison. Mais ça ne marche malheureusement toujours pas...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 oct. 2015 à 13:18
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

0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 20/10/2015 à 14:26
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 !
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 20/10/2015 à 14:39
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.
0