IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Obliger la saisie d'une date


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Obliger la saisie d'une date
    Bonjour à tous,
    Je cherche à obliger l'utilisateur à saisir une date au format dd/mm/aaaa dans une textbox.
    Lorsqu'il quitte la textbox3, si la saisie dans celle-ci n'est pas conforme une userform apparait.
    J'ai écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox3 <> CVDate(Me.TextBox3) Then
    ErreurChampsDate.Show
    Else
    End If
    End Sub
    Comme vous l'avez deviné, ça ne fonctionne pas. Je ne sais pas par quoi remplacer la partie en rouge pour que s'ouvre la userform "Erreur" si la saisie n'est pas une date. J'imagine que la solution est dans la fonction Format mais je patauge un peu.

    Y aurait-il une âme charitable qui puisse m'éclairer?

    Merci par avance.
    Laurent

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Deuxieme service -))
    Re bonjour à tous,
    J'ai un peu avancé sur mon probleme. j'en suis arrivé à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(TextBox3) Then
    Else
    ErreurChampsDate.Show
    End If
    End Sub
    Dans ce cas, la userform d'erreur s'affiche si je saisie du texte dans la textbox3 mais ne détecte pas d'erreur si je saisie ne serait-ce qu'un chiffre.

    Avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(TextBox3) Then
    Else
    ErreurChampsDate.Show
    End If
    End Sub
    L'erreur est détectée jusqu'à la saisie de 21/. Si je saisie 21/1, ça passe comme si il s'agissait d'une date.

    J'ai donc tenté de faire prendre en compte le format complet avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(Format(TextBox3, "dd mm yyyy")) Then
    Else
    ErreurChampsDate.Show
    End If
    End Sub
    Dans ce cas, je n'ai pas plus de succés.

    Ca dit vraiment rien à personne ce genre de soucis ? -))

    HELP

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Dans une cellule, si on tape 21/1 on obtient le 1er janvier de l'année courante.

    5 au format date donne le 5/1/1900 donc une date...

    Si tu veux un contrôle plus fin, il faut tester la longueur de la chaine et la présence des deux / avant tout test ou conversion.

    Par ailleurs si tu veux être sûr que la date est correcte selon la norme française il faut comparer la chaîne en entrée à la conversion en chaîne de la date obtenue par conversion en date sinon le 12/13/2012 passe car le isdate lit 13/12/2012.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Solution
    Bonjour Chris et merci pour tes explications.
    Je suis passé par le contrôle du nombre de caractère dans un premier temps comme tu l'indiques et ensuite par le test. Pour ceux qui suivent la conv, voilà à quoi j'ai abouti :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'exemple pour format xx/xx/xxxx
    Dim Valeur As Byte
    TextBox3.MaxLength = 10 'nb caracteres maxi dans textbox
     
    Valeur = Len(TextBox3)
    If Valeur = 2 Or Valeur = 5 Then TextBox3 = TextBox3 & "/"
    If Not IsDate(TextBox3.Value) Then
            ErreurChampsDate.Show
            TextBox3 = ""
            Exit Sub
            Else
        End If
    End Sub
    Merci encore Chris

    Laurent

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    le plus simple et le plus ergonomique serait peur-être d'utiliser un contrôle Monthview ?

    http://didier-gonard.developpez.com/...et-vba/#LIII-E

    cordialement,

    Didier

Discussions similaires

  1. [Dates] saisie d'une date dans un formulaire
    Par heteroclite dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2006, 09h11
  2. [JSP]Saisie d'une date
    Par parasol007 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/06/2006, 17h26
  3. [VBA-E] Saisie d'une date dans une Input Box
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/05/2006, 20h51
  4. obliger la saisie dans une zone de texte
    Par mat75019 dans le forum Access
    Réponses: 5
    Dernier message: 02/05/2006, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo