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
Le calendrier me semble un petit peu lourd à utiliser si c'est juste pour les dates de naissances, mais combo et masque de saisie sont relativement light à utiliser : joint ton fichier avec juste un enregistrement pour permettre le fonctionnement du UserForm et on te fera la mise au point...

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

Rechercher des sujets similaires à "format date userform"