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 :

validité d'une date


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut validité d'une date
    bonjour,
    je voudrais connaitre une méthode pour vérifie rla validité d'une date

    exemple 30/11/2010 c'est ok

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Et si tu ouvrais ton aide en ligne sur le mot IsDate ?

  3. #3
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Et d'où vient cette date, inputbox, cellule, UserForm ?
    Tu veux controler via VBA ou par formule (vu qu'on est en VBA j'imagine la réponse mais...)

    Voici un exemple de code pour vérifier la cellule A1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsDate(Cells(1, 1)) Then MsgBox "NOK"
    Un exemple par formule dans la feuille (si date NOK comme 30/02/2010 alors = texte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(ISNONTEXT(A1)=FALSE;"NOK";"OK")
    Et n'oublie pas que tu peux toujours "forcer" l'utilisateur à saisir une date par un format de saisie (par exemple via la Validation sur la feuille)

    A+

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    ben non
    c'est pour ça que je pose la question

    isdate me repond vrai pour les deux cas

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Ah !
    Tiens donc.
    Montre ton code.

  6. #6
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    bonjour,

    MsgBox IsDate("31/11/2009") => renvoie faux

    MsgBox IsDate("31/12/2009") => renvoie vrai

    EDIT : désolé ucfoutu, je n'avais pas vu ta réponse ...

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    voilà pour l'exemple

    test me renvoie toujour vrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub toto()
    date_ok = Cells(1, 1).Value ' contient 30/11/2010
    date_ko = Cells(2, 1).Value ' contient 31/11/2010
    test = IsDate(date_ko)
    test = IsDate(date_ok)
     
    End Sub

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Chez moi le premier test est faux et le second vrai

    A tout hazard quel est le format de date de tes parametres regionnaux

  9. #9
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    pour les paramètres régionnaux je vois pas quoi toucher tout me semble ok

    pour le format que je sois en standard ou en date c'est pareil

  10. #10
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Un test a faire

    Est ce que code genere une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test = IsDate(datevalue(date_ko))

  11. #11
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    pas d'erreur, jai bien vérifié que test_ko est une date erronnée

    "test" me renvoie "vrai"

    je viens de refaire une manip

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub toto()
    date_ok = Cells(1, 1).Value
    date_ko = Cells(2, 1).Value
    test = IsDate(date_ko)
    test = IsDate(date_ok)
    vale = DateValue(date_ko)
    test = IsDate(DateValue(date_ko))
    'MsgBox IsDate("31/11/09")
     
    End Sub
    si je mets
    31/11/10
    vale renvoie :10/11/1931

    si je mets 31/11/2010
    vale renvoie une erreur : incomptibilité de type

    t'as touché sur queleque chose
    je ne sais pas trop comment interpréter cette confusion de date française et américaine

  12. #12
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Sauf erreur de ma part DateValue "recherche" une date dans les formats "reconnus", pour preuve DateValue("12 février 2010") renvoi 12/02/2009, c'est pour ça qu'il passera d'un format GB à un format Fr.
    Alors que 31/11/2010 n'étant pas une date c'est du texte mais qui ne correspond à aucune date quelque soit le "format".
    A+

  13. #13
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    bon donc je suis coincé

    j'aimerai savoir comment on peut imposer la date au systéme de datation français
    et éviter le mélange avec le systéme GB

    ça fait plusieur fois que je bute la dessus

  14. #14
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    si je mets 31/11/2010
    vale renvoie une erreur : incomptibilité de type
    C'est rassurant, cela prouve que ton systeme ne considere pas 31/11/2010 comme une date valide.

    Essai en direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox isdate("31/11/2009")
    Ca doit renvoyer Faux

  15. #15
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Dites les gars, c'est pas que je veux pas discuter des formats mais si le but est de vérifier la validité d'une date saisie dans une cellule sous le format jj/mm/aaaa ce code doit répondre au besoin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub testdate()
     
    If Not IsDate(Cells(1, 1)) Then MsgBox Cells(1, 1) & " n'est pas une date valable"
    If Not IsDate(Cells(2, 1)) Then MsgBox Cells(2, 1) & " n'est pas une date valable"
     
    End Sub
    A+

  16. #16
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    en fait le pb me vient du format de date
    si je mets jj/mm/aaaa on peut détecter une date erronée avec IsDate
    si je mets jj/mm/aa je me retrouve avec une indetermination

    et c'est là où je suis embeté car je n'ai pas souvent le choix dans la date
    ( sans mauvaise contrepeterie)

    ma macro doit fonctionner sur des ordinateurs de plein de gents et je ne peux pas leur demander d'aller vérifier les paramètres régionnaux ou autre

    faudrait que je trouve une formule élégante qui détecterait une erreur sur la date pour éviter de planter tout le fichier excel

  17. #17
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    je comprend de moins en moins ton probleme.
    Le nombre de caractère de l'année ne change rien au fonctionnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MsgBox DateValue("30/11/10")      '31/10/2010
    MsgBox IsDate("30/11/10")           'vrai
    MsgBox DateValue("30/11/2010")   '31/10/2010
    MsgBox IsDate("30/11/2010")        'vrai
    Evidemment si je met 31/11/2010 le datevalue plante et le isdate renvoi Faux

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le problème vient du fait que VBA et Excel ne renvoient pas la même valeur booléenne suite à un test sur certaines valeurs de date
    En Excel, tu saisis en A1
    et excel considère que c'est du texte... Logique, ce n'est pas une date en jj/mm/aaaa
    Un test VBA sur A1
    va renvoyer TRUE, car VBA interprète la date comme si tu avais saisis au format mm/jj/aaaa

    Autre problème, si tu testes la cellule A1 comme étant numérique via Excel ou via VBA, tu n'auras pas le même résultat, car une date valide en Excel n'est pas considérée comme un nombre en VBA, mais bien en Excel ... ^^

    Donc, tu dois combiner les deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheetfunction.IsNumber(range("a1")) and isdate(range("a1"))
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    bon résumons
    c'est une question de format
    si mon format est jj/mm/aaaa on peut verifier avec isdate
    si mon format est jj/mm/aa alors c'est inderterminé

    là je suis bien embété car je n'ai pas le choix dans le format de date
    ( sans mauvaise contrepeterie)

    les utilisateurs mettent le format de date qu'il leur plait et je ne paut rien leur imposer, je peut juste leur signaler qu(ils ont écrit des conneries dans la date

    il faudrait que je trouve la bonne méthode pour imposer le format français et faire le distinguo avec le format GB.

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    As-tu essayé la solution que je te propose?

    De plus, si tu parles bien de la saisie d'une date dans une cellule, passe par une validation qui impose la saisie d'une date, et si tu veux quatre chiffres pour l'année, c'est en forçant le format de la cellule que tu pourras l'avoir, pas en "contraignant" la saisie...

    Version d'excel?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET] Comment tester la validité d'une date ?
    Par Zefree dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/12/2012, 15h49
  2. Validité d'une date.
    Par ishdiane dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 14h03
  3. vérifier la validité d'une date
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 16h11
  4. [Dates] date() validité d'une date
    Par BigBarbare dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 16h45
  5. Réponses: 15
    Dernier message: 03/11/2005, 15h43

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