FORMAT Date dans un USERFORM
Bonjour
Je suis un débutant en programmation et aimerais avoir une solution face à un soucis.
En effet je veux savoir comment forcer la saisie d'une date correcte .
Le format n'est pas un soucis pour moi je pense
juste que j'aimerais q'un msgbox s'affiche par exemple si la saisie est 12/13/2019 puisqu'il n'existe pas de mois (13)
je ne veux pas que la macro intervertisse le jour et le mois mais qu'il exige un format correcte ou que le msgbox affiche par exemple que cette date n'existe pas.
Merci pour l'aide
Bonjour,
Je te renvoie vers les fiches de Jacques Boisgontier :
http://boisgontierjacques.free.fr/pages_site/FonctionsDates.htm
Ta saisie sous format date sera considérée comme du texte. Tu peux convertir un texte au format Date en date valide avec CDate(). Si la formule plante, c'est sans doute que ta saisie n'est pas valide.
Bonjour,
Je te renvoie vers les fiches de Jacques Boisgontier :
http://boisgontierjacques.free.fr/pages_site/FonctionsDates.htm
Ta saisie sous format date sera considérée comme du texte. Tu peux convertir un texte au format Date en date valide avec CDate(). Si la formule plante, c'est sans doute que ta saisie n'est pas valide.
OK j'essaie voir ce que cela donne puis je te reviens
Bonjour,
Le problème avec l'exemple cité est que CDate va surement transformer le 12/13 en 13/12 et ne provoquera pas d'erreur...
Il faudrait donc procéder à diverses vérifications pour s'assurer que le mois est inférieur à 13 et que le mois considéré comporte bien 31 jours... (pour ne pas parler de Février !)
C'est la raison pour laquelle la plupart des programmeurs se débrouillent pour fournir un instruments de saisie du type calendar ou utilisent un masque de saisie du type "00/00/0000"
A+
Bonjour,
Le problème avec l'exemple cité est que CDate va surement transformer le 12/13 en 13/12 et ne provoquera pas d'erreur...
Ce n'est pas obligatoire mais cela dépend parfois des config !
A+
Bonjour,
Le problème avec l'exemple cité est que CDate va surement transformer le 12/13 en 13/12 et ne provoquera pas d'erreur...
Il faudrait donc procéder à diverses vérifications pour s'assurer que le mois est inférieur à 13 et que le mois considéré comporte bien 31 jours... (pour ne pas parler de Février !)
C'est la raison pour laquelle la plupart des programmeurs se débrouillent pour fournir un instruments de saisie du type calendar ou utilisent un masque de saisie du type "00/00/0000"
A+
Merci et c'est exactement le soucis que je viens d'avoir
Quand je mets 25/25/2019 , il me notifie le msgbox qui me dit que ce n'est pas valable
mais dès que je mets 10/25/2019 il transfort cela en 25/10/2019 et l'introduit dans mon fichier excel
C'est grave
Moi je veux juste qu'il me dise que ce n'est pas valable dès que le mois est >12
[quote=Barrymax post_id=780463 time=1563207623 user_id=63932]
Bonjour,
Le problème avec l'exemple cité est que CDate va surement transformer le 12/13 en 13/12 et ne provoquera pas d'erreur...
Il faudrait donc procéder à diverses vérifications pour s'assurer que le mois est inférieur à 13 et que le mois considéré comporte bien 31 jours... (pour ne pas parler de Février !)
C'est la raison pour laquelle la plupart des programmeurs se débrouillent pour fournir un instruments de saisie du type calendar ou utilisent un masque de saisie du type "00/00/0000"
A+
Merci et c'est exactement le soucis que je viens d'avoir
Quand je mets 25/25/2019 , il me notifie le msgbox qui me dit que ce n'est pas valable
mais dès que je mets 10/25/2019 il transfort cela en 25/10/2019 et l'introduit dans mon fichier excel
C'est grave
Moi je veux juste qu'il me dise que ce n'est pas valable dès que le mois est >12
Pour moi les jours importes peu
mais juste le mois
Au faite c'est pour saisir les dates de naissance des individus
il est plus facile de gérer une erreur de jour que celle du mois
L'erreur du mois tourne le programmeur dans le ridicule puis que le moi n'est jamais >12
Tu as le choix entre 3 solutions,
- installer un calendrier
- saisir la date avec 3 combos, 1 avec les jours de 1 à 31, 1 avec les mois, janvier, Février... et un avec l'année.
- ou utiliser un masque de saisie
A+
Bonsoir
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