(VBA) Date dans TextBox

Hello le forum,

Lorsque j'indique cette date par exemple dans mon Textbox (05/20/2019), mon programme ne génère pas d'erreur .... Je pense avoir oublié d'indiquer un élément ... Pouvez-vous m'aider svp?

Merci à vous

Ci-dessous le code du contrôle :

Private Sub TB_Date_D_EP_AfterUpdate()
If Not IsDate(TB_Date_D_EP.Value) Then
MsgBox "La date saisie n'est pas au format jj/mm/aaaa", vbInformation, "Erreur date"
TB_Date_D_EP.Value = ""
End If
End Sub
Private Sub TB_Date_D_EP_Change()
If TB_Date_D_EP.Value <> "jj/mm/aaaa" Then
    CB_SEM_E_EP.Value = "S" & Format(TB_Date_D_EP.Value, "ww", vbMonday)
    CB_SEM_E_EP.Enabled = False
End If
End Sub
Private Sub TB_Date_D_EP_Enter()
'on enlève la valeur présente à l'entrée dans le TextBox
If Not IsDate(TB_Date_D_EP.Value) Then TB_Date_D_EP.Value = ""
End Sub

Private Sub TB_Date_D_EP_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'si = rien alors on indique "jj/mm/aaaa"
If TB_Date_D_EP.Value = "" Then TB_Date_D_EP.Value = "jj/mm/aaaa"
End Sub
Private Sub TB_Date_D_EP_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 'On limite la saisie aux caractères suivants : 1234567890/
    If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub

Bonjour,

Le problème c'est que le 05/20/2019 c'est bon dans le format "mm/jj/aaaa", il faudrait comparer textuellement "05/20/2019" et la conversion au format "dd/mm/yyyy" (je mets en anglais pour VBA), pour ça il faudra s'assurer que le texte dans la textbox ait bien 2 chiffres/2chiffres/4chiffres, sinon ça capotera... il faudrait donc en premier traiter ton texte pour rajouter des 0 si besoin.

Tu penses t'en sortir?

Hello,

J'ai ajouté ceci pour le format (sur un fichier test) :

Private Sub TextBox1_AfterUpdate()
If TextBox1.Value = "" Then Exit Sub
If TextBox1.Value <> Format(TextBox1, "dd/mm/yyyy") Then
    MsgBox "Probleme format"
    Exit Sub
End If
If Not IsDate(TextBox1.Value) Then
MsgBox "Ce n'est pas une date", vbInformation, "Erreur"
TextBox1.Value = ""
Exit Sub
End If
End Sub

En revanche pour les 0 je ne vois pas ...

En revanche pour les 0 je ne vois pas ...

Bonjour,

Dans ton code tu demandes dès la première instruction de sortir ... sans rien faire ... si la textBox est vide ...

Excel ne fait qu'éxécuter tes instructions ...

Par ailleurs, es-tu totalement sûr d'avoir choisi le bon évènement ...

Dans mon raisonnement :

Ce que je veux c'est que lorsque l'utilisateur appuie sur Tab ou clique sur un autre contrôle il se passe des choses. Donc si je ne dis pas de bêtises, l’événement Afterupdate est le plus approprié.

Ce que je veux qu'il se passe :

Si vide alors tu fais rien

Si ce n''est pas une date alors message

Si ce n'est pas le bon format alors message

Re,

Je comprends ton raisonnement ...

Et ton code est cohérent avec ton raisonnement ...

Donc ... quel est l'obstacle que tu rencontres ...???

j'avais un problème de format sans cette ligne de code :

If TextBox1.Value <> Format(TextBox1, "dd/mm/yyyy") Then

que j'ai rajouté suite au post de Ausecour. Par contre il parle de mettre des "0" et je vois bien pourquoi on peux les rajouter mais je ne sais pas comment faire.

Mais avec cette ligne de code je me demande si c'est necéssaire.

If TextBox1.Value <> Format(TextBox1, "dd/mm/yyyy") Then

Re,

Comme leur nom l'indique les TextBoxes contiennent du Texte ...

Donc valider la saisie d'un masque jj / mm / aa peut être assez complexe ...

surtout si tu veux, par exemple, t'assurer du bon de jours dans le mois ...

Donc, tout dépend du type de validation que tu veux faire ... et aussi à quel moment ...

Question subsidiaire : As-tu jeté un oeil aux Six discussions similaires au bas de cette page ...???

Non je n'ai pas jeté un oeil sur les post

Je pense que le code que j'ai sera largement suffisant merci à vous

Non je n'ai pas jeté un oeil sur les post

Je pense que le code que j'ai sera largement suffisant merci à vous

Pas de problème ...

Bonne continuation

Bonjour,

La raison pour laquelle je voulais que tu gères l'ajout de 0 est la suivante:

Si tu utilises Format avec "dd/mm/yyyy", et la date 5/20/2019, ça te renverra la date comme étant le 20 mai 2019 (en comprenant que comme le 5/20/2019 n'est pas possible, ça doit être une date anglaise, donc dans ce sens "mm/dd/yyyy".

Pour contourner ce problème, voilà ce que je voulais faire: comme la fonction Format te renverra une date avec 2 chiffres pour le jours, 2 chiffres pour le mois, 4 chiffres pour l'année, afin de comparer si la date est toujours la même, il faut que celle qu'on a écrite au départ ait le même format, sinon tu vas par exemple avoir "3/5/19" = "03/05/2019" qui va renvoyer faux. En clair, tu veux tester que la date saisie soit correcte, pour ça il faut vérifier que c'est bien une date, puis que ce ne soit pas une date anglaise, avec isDate tu peux facilement tester la première condition, mais la seconde est plus compliquée à tester, à moins qu'on ait une fonction sur VBA pour tester ça, mais si elle existe, je ne la connais pas...

Bonjour

peux être comme ca a voir

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 8 Then
        If Right(TextBox1, 1) = "/" Then TextBox1 = Mid(TextBox1, 1, Len(TextBox1) - 1)
    ElseIf KeyCode = 46 Then TextBox1 = ""
    End If
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode < 96 Or KeyCode > 105 Then
        If TextBox1 <> "" Then TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    End If
    Select Case Len(TextBox1.Text)
    Case 2: If Val(TextBox1.Value) > 31 Then TextBox1.Value = "": MsgBox "jour trop grand" Else TextBox1 = TextBox1 & "/"
    Case 5: If Mid(TextBox1, 4, 2) > 12 Then TextBox1.Value = Mid(TextBox1, 1, 3): MsgBox "mois  trop grand" Else TextBox1 = TextBox1 & "/"
    Case 10: If Not IsDate(TextBox1) Then MsgBox "tu veux une claque ou quoi?" & vbCrLf & " Ou ta vu que ce jour existe dans le calendrier" & vbCrLf & " allez recommence!!!": TextBox1 = ""
    Case 11: TextBox1 = Mid(TextBox1, 1, 10)
    End Select
End Sub

A+

Maurice

Finalement j'ai fait le masque de saisie

Thks

Finalement j'ai fait le masque de saisie

Thks

Bien vu ... à mon avis ... c'est la meilleure solution ...

Rechercher des sujets similaires à "vba date textbox"