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

VBA Access Discussion :

Code VBA pour comparer des dates [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut Code VBA pour comparer des dates
    Bonjour à tous,

    Je souhaite comparer deux dates dans deux formulaire différents liés par un numéro identifiant. J'ai essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ComparDate()
     If DateValue(Formulaire1.Date1.Value) < DateValue(Formulaire2.Date2.Value) Then
       MsgBox " La date du formulaire 2 est antérieure à la date du formulaire 1, merci de corriger"
    End Sub
    Or, il ne fonctionne pas...

    Quelqu'un pourrait-il m'aider en m'indiquant ce qui ne vas pas ou ce qu'il manque dans mon code ?

    Merci beaucoup,

    Tagada_or

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Plutôt comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ComparDate()
     If Forms!Formulaire1!Date1< Forms!Formulaire2!Date2 Then
     MsgBox " La date du formulaire 2 est antérieure à la date du formulaire 1, merci de corriger"
     End Sub
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour ClaudeLELOUP,

    Merci pour votre retour mais même avec ce code, le contrôle ne s'effectue pas...
    J'ai saisi le code dans le formulaire 1, je ne comprends pas pourquoi cela ne fonctionne pas.

    Tagada_or

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Il faut voir le contexte pour t'aider.

    Peux-tu poster une BdD format Access2000 avec ton formulaire et me dire comment je peux produire l'erreur ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    J'ai joint la base de donnée que j'ai simplifié. En fait j'ai un formulaire PREOPERAROIRE et un formulaire INTERVENTION et la date de l'intervention ne peut pas être antérieure à la date de l'examen préopératoire. Le code est saisi dans le formulaire intervention.

    Merci encore,

    Tagada_or
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Désolé, j'utilise Access2000 je ne peux pas lire ton format !


    http://claudeleloup.developpez.com/F...access2000.pdf
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Je ne parviens pas à convertir ma BDD au format Access 2000, le VBA ne marche pas lorsque je passe en 2000.

    Pour faire simple :
    - j'ai une table PREOPERATOIRE avec le numéro de patient (NUMPAT) et la date de la visite (DATE_VIS)
    - j'ai une table INTERVENTION avec le numéro de patient (NUMPAT) et la date de la visite(DATE_VIS)
    Ces deux tables sont lié par intégrité référentielle par le champ NUMPAT et donne lieu à deux formulaires.

    Dans le formulaire INTERVENTION, sur la champ NUMVIS, catégorie EVENEMENT<Après MAJ, j'ai tapé le code suivant dans générateur de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ComparDate()
     If Forms!INTERVENTION!DATE_VIS < Forms!PREOPERATOIRE!DATE_VIS Then
     MsgBox " Vous avez saisi une date d'intervention antérieure à la date de la visite préopératoire, merci de corriger"
     End Sub
    Or même si je saisie une date d'intervention antérieure à la date de la visite préopératoire, il ne se passe rien....

    Merci

    Tagada_or
    Images attachées Images attachées  

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Or même si je saisis une date d'intervention antérieure à la date de la visite préopératoire, il ne se passe rien....
    Ce que tu montres, c'est le code d'une sous-routine qui fait le travail.


    Encore faut-il qu'un événement déclenche ce code !

    Place plutôt les instructions dans l'événement Après mise à jour du contrôle dans lequel tu saisis la date.

    N.B. Un tel code implique que les deux formulaires soient ouverts.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Place plutôt les instructions dans l'événement Après mise à jour du contrôle dans lequel tu saisis la date.
    Bon là j'avoue être un peu perdu, je ne connais pas énormément ACCESS.... J'ai pourtant saisi le code dans la catégorie "Après mise à jour" du champs DATE_VIS du formulaire INTERVENTION, champ dans lequel je saisi la date...

    Je n'ai peut être pas compris le sens de votre remarque,

    Merci

    Tagada_or

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Ecoute, je ne connais pas les versions plus récentes que Access2000.

    Mais, au lieu de

    je te fiche mon billet qu'il faudrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub NUMVIS_AfterUpdate()
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour Tagada_Or et Claude,

    En fait Tagada_Or, tu confonds l'utilisation des relations entre les objets Access
    Même si tes formulaires sont reliés
    comparer deux dates dans deux formulaire différents liés par un numéro identifiant
    ça ne veut rien dire parce que ton formulaire INTERVENTION peut pointer sur un patient "différent" dans ton formulaire PREOPERATOIRE. Donc ...
    Déjà, il faut lancer l'action sur un évènement du formulaire "INTERVENTION" comme expliqué par Claude.
    Il faut "retrouver" la date préopératoire pour le patient sélectionné dans ton formulaire "INTERVENTION" en allant interroger la table "PREOPERATOIRE" correspondante avec la fonction DlookUp (Rechdom) en français. Le tuto de référence sur les fonctions de domaines se trouve ICI
    Et c'est après que tu compares la "valeur" de la date de visiste que tu viens de saisir avec cette valeur récupérée.

    Ci-joint la base corrigée (version 2000).

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  12. #12
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour madefemere,

    Merci beaucoup je viens de comprendre mon erreur !!

    Par contre, ce que je ne comprends pas c'est l'enchainement des deux codes :
    - je vais avoir mon premier code pour rechercher la date associé au numéro de patient dans le formulaire PREOPERATOIRE
    - et mon deuxième code pour comparer la date du formulaire INTERVENTION et de la date recherchée dans le formulaire PREOPERATOIRE

    Mais, est-ce que le seul fait de se placer sur le même champs (DATE_VIS) dans le formulaire INTERVENTION pour les deux codes suffit pour que Access comprenne que je veux comparer la date qui a été recherché précisément ?

    Merci beaucoup,

    Tagada_Or

  13. #13
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Re-Bonjour,

    Après vos conseils, j'en suis arrivé aux codes suivants :

    1) Le premier pour retrouver la date du patient sélectionné dans le formulaire PREOPERATOIRE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DATE_RECHERCHE As Date
    DATE_RECHERCHE.Value = DLookup([DATE_VIS], "PREOPERATOIRE", ["INTERVENTION.NUMPAT = PREOPERATOIRE.NUMPAT"])
    2) Le second pour comparer mes dates

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub DATE_VIS_AfterUpdate(Cancel As Integer)
     If DATE_VIS.Value < DATE_RECHERCHE.Value Then
     MsgBox " Vous avez saisi une date d'intervention antérieure à la date de la visite préopératoire, merci de corriger"
     End Sub
    Or, cela ne marche toujours pas, je patauge... Est-ce que vous pourriez me dire ce qui ne va pas dans ces codes ?

    Merci encore,

    Tagada_or

  14. #14
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Les 2 actions doivent s'exécuter à la suite lors de l'évènement mise à jour de ton champ DATE_VIS.
    Donc la totalité de ton code doit être entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Date_VIS_AfterUpDate ()
     
    ton code ici ......
     
    End Sub
    Là, tu mets la première partie hors de l'évènement.
    De plus DATE_RECHERCHE, étant un variable, n'a pas besoin de la méthode VALUE.

    Au final, tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub DATE_VIS_AfterUpdate(Cancel As Integer)
    Dim DATE_RECHERCHE as Date
    DATE_RECHERCHE = DLookup("[DATE_VIS]", "[PREOPERATOIRE]", "[NUMPAT]= & Me.NUMPAT)
    If DATE_VIS.Value < DATE_RECHERCHE Then
    MsgBox " Vous avez saisi une date d'intervention antérieure à la date de la visite préopératoire, merci de corriger"
    End if
    End Sub
    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  15. #15
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Bonjour Madefemere,

    Merci pour votre retour, malheureusement le code ne fonctionne toujours pas, je ne vois vraiment pas d'où peut bien venir le problème.
    J'obtiens le message d'erreur suivant :


    Nom : Capture.PNG
Affichages : 1120
Taille : 43,4 Ko


    J'ai essayé de modifier la syntaxe (guillemets, crochets de l'expression DLookup) mais rien n'y fait...
    Je mets en pièce jointe ma base simplifié avec ces deux formulaires et le code.

    Merci,

    Tagada_or
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z BDD.7z (1,94 Mo, 66 affichages)

  16. #16
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Tagada_Or, madefemere,

    Je crois que madefemere a fait son code à la volée et il a fait une petite erreur en te le postant. Un AfterUpdate ne peut avoir de Cancel As Integer, ce qui selon moi te cause un problème. Voici à quoi devrait ressembler ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Compare Database
    Option Explicit
     
    Private Sub DATE_VIS_AfterUpdate()
     
        Dim DATE_RECHERCHE As Date
     
        DATE_RECHERCHE = DLookup("DATE_VIS", "PRE_OPERATOIRE", "[NUMPAT]=" & Me.NUMPAT)
     
        If DATE_VIS.Value < DATE_RECHERCHE Then
            MsgBox " Vous avez saisi une date d'intervention antérieure à la date de la visite préopératoire, merci de corriger"
        End If
     
    End Sub
    De plus tu devrais toujours avoir Option Explicit (obligation de déclarer), ce qui permet à l'outil d'Access une vérification du code et évite beaucoup d'erreur.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  17. #17
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Petite question pour bien comprendre la base. Telle que je vois la conception (2 tables reliées par une relation 1 à 1) cela signifie qu'à une seule date Pré_Operatoire ne correspond qu'une seule date d'Intervention.
    Dans ce cas pourquoi utiliser deux tables.
    Il me semble qu'une seule table suffit et le controle est beaucoup plus facile.
    Fichiers attachés Fichiers attachés
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  18. #18
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 40
    Points : 18
    Points
    18
    Par défaut
    Merci à tous pour vos conseils, j'ai enfin réussi à mettre en place ces contrôles !

    Tagada_or

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

Discussions similaires

  1. Fonction pour comparer des dates en matlab
    Par mihaispr dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/07/2009, 16h40
  2. [XL-2003] Code VBA pour fusion des Dossiers
    Par em_bengue dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/04/2009, 00h03
  3. DATE_FORMAT pour comparer des dates
    Par Maryy dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/03/2008, 20h50
  4. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  5. Probleme Pour Comparer Des Dates
    Par Domingo60 dans le forum VBScript
    Réponses: 7
    Dernier message: 25/04/2007, 09h33

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