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 :

Valider un format date à 100% [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut Valider un format date à 100%
    Bonjour,
    J'ai créé un programme sous VBA Excel me permettant d’élaborer un planning de maintenance en fonction de butées calendaires.
    Les ensembles à suivre placés sur la première colonne sont composés de sous-ensembles eux-mêmes composés d’éléments. Ce qui fait environ 300 dates à contrôler.
    Pour vérifier la validité des dates entrées par l’utilisateur, j’utilise cette routine pour chaque cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Cells(x, 3).Select
                Selection.NumberFormat = "m/d/yyyy"
                If IsDate(Cells(x, 3)) = False Then
                    MsgBox "Le contenu de la cellule C" & x & " n'est pas valide."
                    Application.ScreenUpdating = True
                    Cells(x, 3).Select
                    Exit Sub
                End If
    Je compare ensuite ces dates à une date de butée calendaire pour élaborer un planning de maintenance.
    Jusque là tout avait l’air de bien aller…

    Je décide ensuite de créer un userform pour changer les dates à partir de ce dernier.
    J’extrait bien les dates des élément dans mon userform par un textbox mais quand je les retranscris dans ma feuille Excel il ne sont plus pris en compte comme date dans mon programme de comparaison. Par contre ma routine de vérification des cellules au format de date valide cité plus haut n’a pas signalé d’erreur. Je résous le premier problème en forçant la valeur de mon textbox au format date par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LDATE = CDate(datebutée)
      Cells(x, 3) = LDATE
    Mais cela me démontre que ma routine de vérification du format date n’est pas fiable à 100%. Cela prouve qu’un utilisateur peut entrer directement sur la feuille Excel une date non valide qui ne sera pas prise en compte par le programme de comparaison.
    Ma question est donc :
    Existe-t-il un moyen fiable à 100% de valider le format date d’une cellule ?
    Peut-être par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Cells(x, 3).Select
    Selection.NumberFormat = "0"
    If len(Cells(x,  3)) <> 5 then
    MsgBox "Le contenu de la cellule C" & x & " n'est pas valide."
                    Application.ScreenUpdating = True
                    Cells(x, 3).Select
                    Exit Sub
    End If
    Selection.NumberFormat = "m/d/yyyy"
    Mais cela fait un peu bricolage, non ?

    Merci de votre attention.

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Ce que tu décris ne démontre en rien que la vérification n'est pas fiable.

    Ce qui n'est probablement pas fiable est la façon dont tu retranscris le contenu d'une TextBox dans ta feuille Excel.
    La TextBox ne contient que du texte et jamais des dates (même si ce qui y est tapé a l'aspect d'une date).
    Il faut toujours passer par un CDate pour convertir le texte en Date.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour,
    je suis tout à fait d'accord.
    Citation Envoyé par AlainTech Voir le message
    Bonjour,

    Ce que tu décris ne démontre en rien que la vérification n'est pas fiable.

    Ce qui n'est probablement pas fiable est la façon dont tu retranscris le contenu d'une TextBox dans ta feuille Excel.
    La TextBox ne contient que du texte et jamais des dates (même si ce qui y est tapé a l'aspect d'une date).
    Il faut toujours passer par un CDate pour convertir le texte en Date.
    tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LDATE = CDate(datebutée)
      Cells(x, 3) = LDATE
    mais si LDATE n'est pas défini en type date
    ça revient a faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cells(x, 3) = datebutée
    LDATE n'est pas utile!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cells(x, 3) =CDate(datebutée)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut
    Bonjour et merci de votre réponse "rdurupt" et "AlainTech".
    Mon probème premier venait bien de la retranscription de la date de mon textbox sur ma feuille Excel. Je l'ai effectivement résolu par l'emploi de CDATE. Et effectivement il est possible de faire plus court.
    Mon problème est le suivant :
    Avant l'emploi de CDATE mon textbox était retranscrit en format texte sur ma feuille Excel. Normal donc. Je m'en suis rendu compte en lançant mon programme et en entrant une date dans mon textbox qui aurait dû réapparaitre sur mon planning de maintenance. Mais en vain. Alors pourquoi lors de la vérification de chaque cellule au type date qui se fait à chaque élaboration du planning cette routine ne me l'indique pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Cells(x, 3).Select
                Selection.NumberFormat = "m/d/yyyy"
                If IsDate(Cells(x, 3)) = False Then
                    MsgBox "Le contenu de la cellule C" & x & " n'est pas valide."
                    Application.ScreenUpdating = True
                    Cells(x, 3).Select
                    Exit Sub
                End If
    J'en déduis donc qu'elle n'est pas fiable à 100% si l'utilisateur rentre une date directement sur la feuille excel sans passer par le textbox, ce qui doit rester une option valide.

  5. #5
    Invité
    Invité(e)
    Par défaut
    car un numérique est bien une date ou plus exactement une date est un numérique avec une représentation sous forme de date à l’affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isDate("01/01/2013") = true
    ici on test une date sous forme de string la fonction fait une conversion implicite de string en date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If IsDate(Cells(x, 3)) = True and instr(Cells(x, 3),"/")<>0 Then
    est le test le plus approchant de la vérité car exclus un numerique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.NumberFormat = "m/d/yyyy"
    fausse les règle du jeux car format un numérique en date!

    en revanche il est peut probable qu'Excel face une mauvaise interprétation d'une date saisie au clavier par un utilisateur directement dans la cellule.
    Dernière modification par Invité ; 26/12/2013 à 19h45.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut
    Merci pour toutes ces explications.
    Je vais modifier ma routine de vérification en conséquence.
    Ah les dates sous VBA !!!
    Je suis un autodidacte de VBA sous Excel et c'est grâce à votre site que j'ai pu progresser depuis des années.
    Bravo et encore merci à ceux qui prennent de leur temps pour faire avancer des gens comme moi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. valider un format de date
    Par ttttnht dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/06/2009, 17h24
  2. Problème format date et règle de validation
    Par piere42 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/02/2009, 13h17
  3. Réponses: 2
    Dernier message: 25/03/2008, 11h39
  4. format date validator javascript?
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 10
    Dernier message: 31/12/2007, 13h42
  5. format date validator javascript?
    Par cyrano_de_bergerac dans le forum C#
    Réponses: 1
    Dernier message: 21/12/2007, 14h06

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