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

Résolu
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -  
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
    2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      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
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Vous avez raison. Mais ça ne marche malheureusement toujours pas...
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      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
    2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      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