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 :

Interdire la saisie d'une date antérieure au 01/01/1900 [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    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
    Points : 93
    Points
    93
    Par défaut Interdire la saisie d'une date antérieure au 01/01/1900
    Bonjour à tous,
    J'ai un petit code qui me permet de savoir quel jour de la semaine correspond une date saisie dans une textbox.
    Cela me pose un soucis lorsque l'utilisateur saisie une date avant le 01/01/1900 et pour cause.
    J'aimerais donc que si l'utilisateur saisie une date antérieure au 01/01/1900, un message apparaisse lorsqu'on quitte la textbox1.
    J'ai tenté ça mais sans résultat.
    Si la date est postérieure au 01/01/1900 cela fonctionne bien, sinon j'ai un bug avec un message d'erreur 1004 défininis par l'application ou par l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
             If IsDate(TextBox1) < "01/01/1900" Then
            MauvaisFormatDate.Show
           Else
        End If
     
    End Sub
    Quelqu'un pourrait-il m'aiguiller sur les dates car je n'en suis pas très au fait.
    Merci par avance
    Laurent

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    là ce n'est pas vraiment une question de date mais une question de logique …

    Ligne n°2 : je ne crois pas qu'une fonction booléenne comme IsDate,
    renvoyant donc Vrai ou Faux, puisse être comparée à une date !

    A décomposer en deux tests distincts …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut interdire la saisie d'une date anterieure au 01/01/1900
    Bonjour,

    Après plusieurs essais il semblerait que ce qui suit marche.
    Il est vrai que la gestion des dates n'est pas simple sur VBA et qu'il vaut mieux dès lors comparer deux nombres (d'ou clng).

    Sans doute y a t-il plus simple mais je ne l'ai pas trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub essaidate()
        If CLng(DateValue(Range("a1"))) < CLng(DateValue("01/01/1900")) Then
             MsgBox "date non acceptée"
        End If
    End Sub
    Cordialement,

  4. #4
    Membre régulier
    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
    Points : 93
    Points
    93
    Par défaut merci
    Bonsoir Nibledispo,
    en effet la gestion des dates semble complexe pour un débutant comme moi.
    Merci pour ta réponse, je l'essai dés demain.
    Bonne soirée

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    un peu de lecture http://didier-gonard.developpez.com/...-excel-et-vba/

    Pour VBA le 19/01/1900 correspond au chiffre 2 : donc si la date est <=2 c'est antérieur.

    Le problème c'est que pour contrôler des dates il faut vérifier que c'est une date. Mais pour Excel la valeur 2012 correspond à une date située 2012 jours après le 31/12/1899, donc c'est une date.
    Il faut donc vérifier la présence des / et l'ordre jour et mois si on veut être sûr...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut interdire la saisie d'une date anterieure au 01/01/1900
    Bonsoir 78CHRIS,

    J'ai lu le dossier de Didier mais ne suis absolument pas sur de l'avoir bien assimilé : Je suis même sur du contraire. c'est une occasion de me replonger dedans.

    Si je te comprends bien, il faudrait passer par "dateserial" ?

    Tu penses que le passage par clng n'est pas une solution viable et peut poser problème dans certaines circonstances ? mes essais semblent pourtant répondre à la problématique des dates.

    Cordialement,

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Re

    Saisis 2012 ou 5/25/2013 dans ta textbox et vois ce que donne ton code.

    Quand on demande à un utilisateur de saisir il peut faire n'importe quoi : il faut donc tout vérifier et déjà que c'est bien une date au format français.

    Je n'ai pas parlé de dateserial. On peut vérifier la présence des / puis si ce qui se trouve entre les / est compris entre 1 et 12 avant de tenter un isdate qui marche même pour des saisis fantaisistes ou bien comparer par double conversion : clng remis en texte donne-t'il la même chose que la saisie ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  8. #8
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut interdire la saisie d'une date anterieure au 01/01/1900
    Bonjour,

    Voici un code dénicher sur le net qui me semble intéressant concernant la validité de la date saisie.

    Il n'y a qu'à modifier la date mini et maxi dans le code.

    Cordialement.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. comment interdire la saisie dans une combolist
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/10/2006, 23h03
  2. [Dates] saisie d'une date dans un formulaire
    Par heteroclite dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2006, 09h11
  3. [JSP]Saisie d'une date
    Par parasol007 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/06/2006, 17h26
  4. [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

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