Problème lors de la modification d'une texte box contenant une date

Bonjour à tous,

J'ai une texte box renvoyant la date d'une colonne d'une liste box. J'ai convertit le format texte en format date et ma valeur correspondant à la date s'affiche correctement. Le problème se situe lorsque je souhaite modifier la date à partir de ma texte box lors de l'exécution de mon formulaire. Soit mon curseur reste bloquer sur l'année de la date, ou il modifie le format en heure : 00:00:00....

Je vous fais joindre en copie d'écran les types de problèmes rencontrés lors du changement de date.

Texte box :

txtdate

Selection :

selection

Probleme lors de la modification de la texte box, transformation de la date en autre date :

changement en une autre date

Autre probleme pouvant survenir lors de la modifcation de la texte box, transformation de la date en heure :

changement en heure

Merci à vous pour vos retours !

Mon code VBA pour le format date :

Private Sub TxtDate2_Change()
TxtDate2.value = CDate(TxtDate2.Value)

End Sub

Bonjour,

Merci de joindre à minima le code VBA associé, et idéalement un fichier type avec code + quelques données.

Bonjour,

Ne pas changer le format de date dans le TextBox, mais à la validation du formulaire.

Supprimez ce code :

Private Sub TxtDate2_Change()
TxtDate2.value = CDate(TxtDate2.Value)
End Sub

Il intervient à chaque saisie dans votre TextBox...

Si vous saisissez 1, il affiche CDate(1) soit le 31/12/1899...

Quelle est la finalité, le but de cette "manœuvre"?

Le code a été publié plus haut :

Private Sub TxtDate2_Change()
Me.TxtDate2 = CDate(TxtDate2.Value)

End Sub

Mon code VBA pour le format date :

Private Sub TxtDate2_Change()
TxtDate2.value = CDate(TxtDate2.Value)

End Sub

Utilisez plutôt l’événement "after update" que "change", car ce dernier est exécuté à la moindre modification. Donc dès la saisie d'un nombre, il va chercher à le convertir en date.

Le code pour l'affichage de la date a partir de la listebox :

Private Sub ListRecherche_Click()
'Déclaration de variable
Dim NumLigne As Integer

NumLigne = Me.ListRecherche.ListIndex

Me.TxtDate2.Value = Me.ListRecherche.Column(8, NumLigne)

End Sub

Alors, je me répète :

Quelle est la finalité, le but de cette "manœuvre"?

Salut Pedro!

Merci pour vos retours.

Le but est de modifier une base de donnée a partir de mon formulaire. La texte date renvoi la donnée en liste box, je la modifie dans le formulaire et apres validation ma base de donnée est actualisée.

ou plutot la texte box contenant la date est alimenté a partir de la selection d'une ligne sur ma listebox.

D'accord pour l'événement After update. Cependant, apres modification lorsque je selectionne une ligne de ma listebox, il me renvoi un nombre type "43381" dans ma texte box, il formate donc mon format date.

Que ce soit une ListBox ou un TextBox, les données sont de type String.

Donc, il ne faut rien toucher dans l'affichage de l'Userform, sauf pour le confort de l'utilisateur.

On peut, par exemple, changer le format de date (exemple :"mm/dd/yyyy" au lieu de "dd/mm/yyyy") mais simplement pour un confort d'affichage.

L'important est de transformer cette donnée "Texte" (String) en date au moment du transfert dans la bdd.

Donc, modifiez votre format de date au transfert de la listbox vers le textbox et, ensuite, vous n'y toucherez qu'au moment du transfert dans la bdd...

Private Sub ListRecherche_Click()
'Déclaration de variable
Dim NumLigne As Integer

NumLigne = Me.ListRecherche.ListIndex
'Peut-être ajouter un test ici au cas ou...
'If IsDate(Me.ListRecherche.Column(8, NumLigne)) Then
    Me.TxtDate2.Value = CDate(Me.ListRecherche.Column(8, NumLigne))
'End If
End Sub

Si l'utilisateur a le loisir de modifier cette date, dans la TextBox, il vous faudra vous assurer, avant le transfert vers la bdd, que vous avez toujours une date.

Comment faites vous ce transfert?

Salut pijaku !

D'accord pour l'événement After update. Cependant, apres modification lorsque je selectionne une ligne de ma listebox, il me renvoi un nombre type "43381" dans ma texte box, il formate donc mon format date.

43381 est bien une date valide, pour l'afficher sous forme JJ/MM/AAAA on peut utiliser la fonction Format(TextBoxMachin, "dd/mm/yyyy"), dont le résultat est alors un texte qui ressemble à une date. Comme le souligne pijaku, la conversion en date valide est plutôt à effectuer lors de l'exportation du contenu de la Textbox vers une cellule du classeur.

Merci à vous pour vos retours et cette explication. Cela fonctionne bien à présent !

Très bonne journée.

Rechercher des sujets similaires à "probleme lors modification texte box contenant date"