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 :

Ma boucle s'arrête si valeur date nulle


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Par défaut Ma boucle s'arrête si valeur date nulle
    Bonjour, et très bonne année à tous !
    Nous demandons aux professionnels de santé adhérents à notre assoc de réaliser tous les ans un bilan médical pour chaque patient. C'est nous qui devons envoyer cette demande au bon moment (date anniversaire du dernier bilan) aux médecins, pour qu'ils la remplissent et nous la renvoie.
    J'ai fait un petit module access qui permet de gérer une liste de bilans qui auraient dû nous parvenir (si date du dernier bilan + 365 < date actuelle, une alerte apparait dans la liste). Cette liste indique également la date à laquelle nous avons relancé un médecin pour la dernière fois, et pour quel patient.

    Une fonction permet de générer automatiquement un courrier de relance, et ajoute automatiquement une date de relance. Mais j'ai un bug : ce code va chercher dans une zone de liste (Me.Lst_Bilans_Medicaux)
    - le numéro d'un patient ([NumeroPatient]),
    - la date de son prochain bilan médical ([DateAttenteBilanMedical]),
    - la date de la dernière relance pour ce bilan
    et va copier ces infos dans une autre table : [T_Retour_Bilans_Medicaux_Demandes]
    voici une partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim varitem As Variant
    Dim nbselection As Long
     
       For Each varitem In Me.Lst_Bilans_Medicaux.ItemsSelected
     
        DoCmd.RunSQL "INSERT INTO T_Retour_Bilans_Medicaux_Demandes (NumeroPatient,DateAttenteBilanMedical,DateEnvoiBilanMedical) VALUES ( " & Me![Lst_Bilans_Medicaux].Column(0, varitem) & " , #" & Me![Lst_Bilans_Medicaux].Column(9, varitem) & "# , " & choixdate & " );"
        nbselection = nbselection + 1
     
        Next varitem
        End If
    la variable choixdate est récupérée d'une msgbox.
    Ce code marche bien, sauf si un patient n'a jamais eu de bilan médical (donc Me![Lst_Bilans_Medicaux].Column(9) est vide pour cette ligne). La boucle se bloque ("erreur de synthaxe dans l'expression '##'"). L'instruction SQL ne peut-elle pas insérer une valeur nulle pour une date dans une autre table?
    ya-t-il un moyen d'éviter ça?
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,

    pour ma part, je vois tois solutions,
    - autoriser des valeurs vides dans les propriétés du champs de la table
    - faire un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isnull(Me![Lst_Bilans_Medicaux].Column(9))
    et ne pas éxécuter la requête si erreur potentielle soulevée.
    - faire un test iif() dans la requête SQL : mettre une date par défaut si Me![Lst_Bilans_Medicaux].Column(9) est nul.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Par défaut
    merci, ça me donne une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim LValue As Boolean
     
       For Each varitem In Me.Lst_Bilans_Medicaux.ItemsSelected
       LValue = IsNull(Me![Lst_Bilans_Medicaux].Column(9, varitem))
       If LValue = True Then
           DoCmd.RunSQL "INSERT INTO T_Retour_Bilans_Medicaux_Demandes (NumeroPatient,DateEnvoiBilanMedical) VALUES ( " & Me![Lst_Bilans_Medicaux].Column(0, varitem) & " , " & choixdate & " );"
              Else
     
        DoCmd.RunSQL "INSERT INTO T_Retour_Bilans_Medicaux_Demandes (NumeroPatient,DateAttenteBilanMedical,DateEnvoiBilanMedical) VALUES ( " & Me![Lst_Bilans_Medicaux].Column(0, varitem) & " , #" & Me![Lst_Bilans_Medicaux].Column(9, varitem) & "# , " & choixdate & " );"
        End If
        nbselection = nbselection + 1
     
        Next varitem
    le problème c'est que isnull(Me![Lst_Bilans_Medicaux].Column(9, varitem)) retourne la valeur False même s'il n'y a pas de date....
    En tous cas le champ [DateAttenteBilanMedical] autorise la valeur nulle dans sa propriété

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    on peut faire une bidouille avec un test sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Len(Me![Lst_Bilans_Medicaux].Column(9, varitem))
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Par défaut
    hehe, ça marche bien en effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       For Each varitem In Me.Lst_Bilans_Medicaux.ItemsSelected
       LValue = Len(Me![Lst_Bilans_Medicaux].Column(9, varitem))
       If LValue = 0 Then
           DoCmd.RunSQL "INSERT INTO T_Retour_Bilans_Medicaux_Demandes (NumeroPatient,DateEnvoiBilanMedical) VALUES ( " & Me![Lst_Bilans_Medicaux].Column(0, varitem) & " , " & choixdate & " );"
              Else
        DoCmd.RunSQL "INSERT INTO T_Retour_Bilans_Medicaux_Demandes (NumeroPatient,DateAttenteBilanMedical,DateEnvoiBilanMedical) VALUES ( " & Me![Lst_Bilans_Medicaux].Column(0, varitem) & " , #" & Me![Lst_Bilans_Medicaux].Column(9, varitem) & "# , " & choixdate & " );"
        End If
        nbselection = nbselection + 1
        Next varitem
    merci jpcheck!

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

Discussions similaires

  1. Problème de "select" avec des valeurs a null
    Par SchpatziBreizh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2005, 16h08
  2. [Delphi & DBExpress ] Mettre un champs date à null
    Par falcon dans le forum Bases de données
    Réponses: 10
    Dernier message: 03/11/2004, 08h21
  3. Date nulle dans une requete paramétrée avec TParameter
    Par denrette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2004, 08h37
  4. recherche Date nulle dans une table
    Par lol_adele dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2004, 14h06
  5. [DateTimePicker]Recuperation valeur date
    Par jane2002 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/02/2003, 11h29

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