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 :

Recordset avec nom de requête [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut Recordset avec nom de requête
    Bonjour,

    je souhaite parcourir les enregistrements retournés par une query.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     ' Ouverture de la requête
      strsql = "SELECT truc, muche"
     
      strsql = strsql & " FROM table "
     
      strsql = strsql & "WHERE truc=True;"
     
    'on affecte à 'rst' le résultat de la requête
     
     
      Set rst = CurrentDb.OpenRecordset(strsql)
     
    Do While Not rst.EOF 'tant qu'il reste des lignes dans le résultat de la requête
     
    'traitement
    Cela fonctionne.

    Ce que je souhaite, c'est de ne pas inscrire dans mon code le code sql, mais appeler une requête enregistrée dans la base :
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      ' Ouverture de la requête
     
    Dim qdf As DAO.QueryDef
    Dim rcs As DAO.Recordset
     
      ' Référence à la requête
    Set qdf = CurrentDb.QueryDefs("requete")
     
    Set rcs = qdf.OpenRecordset  
     
    Do While Not rcs.EOF 'tant qu'il reste des lignes dans le résultat de la requête
    La requête "requete" existe et retourne des enregistrements (6), mais quand j'exécute ce code j'ai une erreur '3061' : trop peu de paramètres : 32 attendu

    Cette requête est basé sur les champs d'un formulaire, qui est ouvert, et est u peu longue (d'où ma volonté de vouloir mettre le nom de la requête dans le vba plutôt qu'un c/c hasardeux).

    Merci

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Salut,

    le formulaire est-il bien ouvert quand tu executes la requete ?

    Peux-tu nous montrer le contenu SQL de la requete de depart ? 32 parametres c'est un probleme de formulaire ferme au moment de l'execution a mon avis =]
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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 éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Bonjour et merci,

    oui il est ouvert car je lances le code vba sur un bouton de ce formulaire...

    Voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_Organisme.NomOrganisme, T_Organisme.cmbZone, T_Organisme.cmbPays, T_Organisme.StatutMembre, T_Organisme.StatutMembreindirect, T_Organisme.StatutPartenaire, T_Pays.Pays, T_Organisme.SectionAlliance, T_Organisme.SectionTaskForce, T_Organisme.SectioneCalypso, T_Organisme.SectionCCEurope, T_Organisme.SectionTRS, T_Organisme.TypeAcadémie, T_Organisme.TypeAssociation, T_Organisme.TypeAutorité, T_Organisme.TypeFondation, T_Organisme.TypeGouvernement, T_Organisme.TypeSociété, T_Organisme.TypeIndividuel, T_Organisme.WGparité, T_Organisme.WGaccessibilité, T_Organisme.WGyouth, T_Organisme.WGcoopintern, T_Organisme.PublicFamille, T_Organisme.PublicHandicap, T_Organisme.PublicJeunes, T_Organisme.PublicSeniors, T_Organisme.NatureDemande, T_Organisme.NatureOffre, T_Collaborateur.Nom, T_Collaborateur.Titre, T_Collaborateur.Titre, T_Collaborateur.Email
    FROM (T_Pays INNER JOIN T_Organisme ON T_Pays.ID = T_Organisme.cmbPays) INNER JOIN T_Collaborateur ON T_Organisme.ID_Organisme = T_Collaborateur.id_Organisme
    WHERE (((T_Organisme.NomOrganisme) Like IIf([Formulaires]![F_mails]![Filtreorganisme].[ListIndex]=-1,"*" & [Formulaires]![F_mails]![Filtreorganisme] & "*",[Formulaires]![F_mails]![Filtreorganisme])) AND ((T_Organisme.cmbZone) Like IIf([Formulaires]![F_mails]![Filtrezone].[ListIndex]=-1,"*" & [Formulaires]![F_mails]![Filtrezone] & "*",[Formulaires]![F_mails]![Filtrezone])) AND ((T_Organisme.cmbPays) Like IIf([Formulaires]![F_mails]![Filtrepays].[ListIndex]=-1,"*" & [Formulaires]![F_mails]![Filtrepays] & "*",[Formulaires]![F_mails]![Filtrepays])) AND ((T_Organisme.StatutMembre)=IIf(IsNull([Formulaires]![F_mails]![Checkmembre]),[StatutMembre],[Formulaires]![F_mails]![Checkmembre])) AND ((T_Organisme.StatutMembreindirect)=IIf(IsNull([Formulaires]![F_mails]![Checkmembreindirect]),[StatutMembreindirect],[Formulaires]![F_mails]![Checkmembreindirect])) AND ((T_Organisme.StatutPartenaire)=IIf(IsNull([Formulaires]![F_mails]![Checkpartenaire]),[Statutpartenaire],[Formulaires]![F_mails]![Checkpartenaire])) AND ((T_Organisme.SectionAlliance)=IIf(IsNull([Formulaires]![F_mails]![Checkalliance]),[SectionAlliance],[Formulaires]![F_mails]![Checkalliance])) AND ((T_Organisme.SectionTaskForce)=IIf(IsNull([Formulaires]![F_mails]![Checktaskforce]),[SectionTaskForce],[Formulaires]![F_mails]![Checktaskforce])) AND ((T_Organisme.SectioneCalypso)=IIf(IsNull([Formulaires]![F_mails]![Checkecalypso]),[SectioneCalypso],[Formulaires]![F_mails]![Checkecalypso])) AND ((T_Organisme.SectionCCEurope)=IIf(IsNull([Formulaires]![F_mails]![Checkcceurope]),[Sectioncceurope],[Formulaires]![F_mails]![Checkcceurope])) AND ((T_Organisme.SectionTRS)=IIf(IsNull([Formulaires]![F_mails]![Checktrs]),[Sectiontrs],[Formulaires]![F_mails]![Checktrs])) AND ((T_Organisme.TypeAcadémie)=IIf(IsNull([Formulaires]![F_mails]![Checkacadémie]),[TypeAcadémie],[Formulaires]![F_mails]![Checkacadémie])) AND ((T_Organisme.TypeAssociation)=IIf(IsNull([Formulaires]![F_mails]![Checkassociation]),[TypeAssociation],[Formulaires]![F_mails]![Checkassociation])) AND ((T_Organisme.TypeAutorité)=IIf(IsNull([Formulaires]![F_mails]![Checkautorité]),[TypeAutorité],[Formulaires]![F_mails]![Checkautorité])) AND ((T_Organisme.TypeFondation)=IIf(IsNull([Formulaires]![F_mails]![Checkfondation]),[TypeFondation],[Formulaires]![F_mails]![Checkfondation])) AND ((T_Organisme.TypeGouvernement)=IIf(IsNull([Formulaires]![F_mails]![Checkgouvernement]),[TypeGouvernement],[Formulaires]![F_mails]![Checkgouvernement])) AND ((T_Organisme.TypeSociété)=IIf(IsNull([Formulaires]![F_mails]![Checksociété]),[TypeSociété],[Formulaires]![F_mails]![Checksociété])) AND ((T_Organisme.TypeIndividuel)=IIf(IsNull([Formulaires]![F_mails]![Checkindividue]),[TypeIndividuel],[Formulaires]![F_mails]![Checkindividuel])) AND ((T_Organisme.WGparité)=IIf(IsNull([Formulaires]![F_mails]![Checkparité]),[WGparité],[Formulaires]![F_mails]![Checkparité])) AND ((T_Organisme.WGaccessibilité)=IIf(IsNull([Formulaires]![F_mails]![Checkaccessibilité]),[WGaccessibilité],[Formulaires]![F_mails]![Checkaccessibilité])) AND ((T_Organisme.WGyouth)=IIf(IsNull([Formulaires]![F_mails]![Checkyouth]),[WGyouth],[Formulaires]![F_mails]![Checkyouth])) AND ((T_Organisme.WGcoopintern)=IIf(IsNull([Formulaires]![F_mails]![Checkcoopintern]),[WGcoopintern],[Formulaires]![F_mails]![Checkcoopintern])) AND ((T_Organisme.PublicFamille)=IIf(IsNull([Formulaires]![F_mails]![Checkfamille]),[Publicfamille],[Formulaires]![F_mails]![Checkfamille])) AND ((T_Organisme.PublicHandicap)=IIf(IsNull([Formulaires]![F_mails]![Checkhandicap]),[Publichandicap],[Formulaires]![F_mails]![Checkhandicap])) AND ((T_Organisme.PublicJeunes)=IIf(IsNull([Formulaires]![F_mails]![Checkjeunes]),[Publicjeunes],[Formulaires]![F_mails]![Checkjeunes])) AND ((T_Organisme.PublicSeniors)=IIf(IsNull([Formulaires]![F_mails]![Checkseniors]),[Publicseniors],[Formulaires]![F_mails]![Checkseniors])) AND ((T_Organisme.NatureDemande)=IIf(IsNull([Formulaires]![F_mails]![Checkdemande]),[Naturedemande],[Formulaires]![F_mails]![Checkdemande])) AND ((T_Organisme.NatureOffre)=IIf(IsNull([Formulaires]![F_mails]![Checkoffre]),[Natureoffre],[Formulaires]![F_mails]![Checkoffre])));
    Vous comprendrez que je préfère ne pas la recopier...

    Merci

  4. #4
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Pour info,

    si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
      ' Ouverture de la requête
     
    Dim qdf As DAO.QueryDef
    Dim rcs As DAO.Recordset
     
      ' Référence à la requête
    Set qdf = CurrentDb.QueryDefs("r_mails")
    MsgBox qdf
    J'ai une erreur "incompatibilité de type" sur la ligne msgbox.

    Je pense que le souci vient de la manière dont j'appelle cette requête. Non ?

    Merci.

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Attention,

    une variable querydef represente un objet requete (contenu SQL - champs et parametres), pas une chaine de caracteres (auquel cas toi tu voudrais afficher qdf.SQL pqr exemple).

    Ce qui me gene dans ta requete c'est les [Formulaires] au lieu des [Form]
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  6. #6
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Bonjour et merci.

    J'ai remplacé formulaires par forms, et toujours idem :
    Le code SQL de la requête "r_mails" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Organisme.NomOrganisme, T_Organisme.cmbZone, T_Organisme.cmbPays, T_Organisme.StatutMembre, T_Organisme.StatutMembreindirect, T_Organisme.StatutPartenaire, T_Pays.Pays, T_Organisme.SectionAlliance, T_Organisme.SectionTaskForce, T_Organisme.SectioneCalypso, T_Organisme.SectionCCEurope, T_Organisme.SectionTRS, T_Organisme.TypeAcadémie, T_Organisme.TypeAssociation, T_Organisme.TypeAutorité, T_Organisme.TypeFondation, T_Organisme.TypeGouvernement, T_Organisme.TypeSociété, T_Organisme.TypeIndividuel, T_Organisme.WGparité, T_Organisme.WGaccessibilité, T_Organisme.WGyouth, T_Organisme.WGcoopintern, T_Organisme.PublicFamille, T_Organisme.PublicHandicap, T_Organisme.PublicJeunes, T_Organisme.PublicSeniors, T_Organisme.NatureDemande, T_Organisme.NatureOffre, T_Collaborateur.Nom, T_Collaborateur.Titre, T_Collaborateur.Titre, T_Collaborateur.Email
    FROM (T_Pays INNER JOIN T_Organisme ON T_Pays.ID = T_Organisme.cmbPays) INNER JOIN T_Collaborateur ON T_Organisme.ID_Organisme = T_Collaborateur.id_Organisme
    WHERE (((T_Organisme.NomOrganisme) Like IIf([Forms]![F_mails]![Filtreorganisme].[ListIndex]=-1,"*" & [Forms]![F_mails]![Filtreorganisme] & "*",[Forms]![F_mails]![Filtreorganisme])) AND ((T_Organisme.cmbZone) Like IIf([Forms]![F_mails]![Filtrezone].[ListIndex]=-1,"*" & [Forms]![F_mails]![Filtrezone] & "*",[Forms]![F_mails]![Filtrezone])) AND ((T_Organisme.cmbPays) Like IIf([Forms]![F_mails]![Filtrepays].[ListIndex]=-1,"*" & [Forms]![F_mails]![Filtrepays] & "*",[Forms]![F_mails]![Filtrepays])) AND ((T_Organisme.StatutMembre)=IIf(IsNull([Forms]![F_mails]![Checkmembre]),[StatutMembre],[Forms]![F_mails]![Checkmembre])) AND ((T_Organisme.StatutMembreindirect)=IIf(IsNull([Forms]![F_mails]![Checkmembreindirect]),[StatutMembreindirect],[Forms]![F_mails]![Checkmembreindirect])) AND ((T_Organisme.StatutPartenaire)=IIf(IsNull([Forms]![F_mails]![Checkpartenaire]),[Statutpartenaire],[Forms]![F_mails]![Checkpartenaire])) AND ((T_Organisme.SectionAlliance)=IIf(IsNull([Forms]![F_mails]![Checkalliance]),[SectionAlliance],[Forms]![F_mails]![Checkalliance])) AND ((T_Organisme.SectionTaskForce)=IIf(IsNull([Forms]![F_mails]![Checktaskforce]),[SectionTaskForce],[Forms]![F_mails]![Checktaskforce])) AND ((T_Organisme.SectioneCalypso)=IIf(IsNull([Forms]![F_mails]![Checkecalypso]),[SectioneCalypso],[Forms]![F_mails]![Checkecalypso])) AND ((T_Organisme.SectionCCEurope)=IIf(IsNull([Forms]![F_mails]![Checkcceurope]),[Sectioncceurope],[Forms]![F_mails]![Checkcceurope])) AND ((T_Organisme.SectionTRS)=IIf(IsNull([Forms]![F_mails]![Checktrs]),[Sectiontrs],[Forms]![F_mails]![Checktrs])) AND ((T_Organisme.TypeAcadémie)=IIf(IsNull([Forms]![F_mails]![Checkacadémie]),[TypeAcadémie],[Forms]![F_mails]![Checkacadémie])) AND ((T_Organisme.TypeAssociation)=IIf(IsNull([Forms]![F_mails]![Checkassociation]),[TypeAssociation],[Forms]![F_mails]![Checkassociation])) AND ((T_Organisme.TypeAutorité)=IIf(IsNull([Forms]![F_mails]![Checkautorité]),[TypeAutorité],[Forms]![F_mails]![Checkautorité])) AND ((T_Organisme.TypeFondation)=IIf(IsNull([Forms]![F_mails]![Checkfondation]),[TypeFondation],[Forms]![F_mails]![Checkfondation])) AND ((T_Organisme.TypeGouvernement)=IIf(IsNull([Forms]![F_mails]![Checkgouvernement]),[TypeGouvernement],[Forms]![F_mails]![Checkgouvernement])) AND ((T_Organisme.TypeSociété)=IIf(IsNull([Forms]![F_mails]![Checksociété]),[TypeSociété],[Forms]![F_mails]![Checksociété])) AND ((T_Organisme.TypeIndividuel)=IIf(IsNull([Forms]![F_mails]![Checkindividue]),[TypeIndividuel],[Forms]![F_mails]![Checkindividuel])) AND ((T_Organisme.WGparité)=IIf(IsNull([Forms]![F_mails]![Checkparité]),[WGparité],[Forms]![F_mails]![Checkparité])) AND ((T_Organisme.WGaccessibilité)=IIf(IsNull([Forms]![F_mails]![Checkaccessibilité]),[WGaccessibilité],[Forms]![F_mails]![Checkaccessibilité])) AND ((T_Organisme.WGyouth)=IIf(IsNull([Forms]![F_mails]![Checkyouth]),[WGyouth],[Forms]![F_mails]![Checkyouth])) AND ((T_Organisme.WGcoopintern)=IIf(IsNull([Forms]![F_mails]![Checkcoopintern]),[WGcoopintern],[Forms]![F_mails]![Checkcoopintern])) AND ((T_Organisme.PublicFamille)=IIf(IsNull([Forms]![F_mails]![Checkfamille]),[Publicfamille],[Forms]![F_mails]![Checkfamille])) AND ((T_Organisme.PublicHandicap)=IIf(IsNull([Forms]![F_mails]![Checkhandicap]),[Publichandicap],[Forms]![F_mails]![Checkhandicap])) AND ((T_Organisme.PublicJeunes)=IIf(IsNull([Forms]![F_mails]![Checkjeunes]),[Publicjeunes],[Forms]![F_mails]![Checkjeunes])) AND ((T_Organisme.PublicSeniors)=IIf(IsNull([Forms]![F_mails]![Checkseniors]),[Publicseniors],[Forms]![F_mails]![Checkseniors])) AND ((T_Organisme.NatureDemande)=IIf(IsNull([Forms]![F_mails]![Checkdemande]),[Naturedemande],[Forms]![F_mails]![Checkdemande])) AND ((T_Organisme.NatureOffre)=IIf(IsNull([Forms]![F_mails]![Checkoffre]),[Natureoffre],[Forms]![F_mails]![Checkoffre])));
    Et voici comme je l'appelle depuis un bouton du formulaire F_mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     ' Ouverture de la requête
     
    Dim qdf As DAO.QueryDef
    Dim rcs As DAO.Recordset
     
      ' Référence à la requête
    Set qdf = CurrentDb.QueryDefs("r_mails")
     
     
    Set rcs = qdf.OpenRecordset                 '<== pour travailler sur les données
    J'ai toujours le message d'erreur '3061', 'trop peu de parametres, 32 attendu'...

    Merci

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Salut,

    au risque de paraitre un peu rabat joie ou trop pragmatique, pourquoi ne pas recoder le contenu SQLdirectement dans ton VBA, vu que tu tapes sur les elements du formulaire en cours
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  8. #8
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Salut,

    j'ai testé, mais cette fois-ci j'ai une erreur "13 - incompatibilité de type" sur la ligne du WHERE (en gras) ;

    Voici le code entré sur un bouton du form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Private Sub Commande75_Click()
    
    Dim rst As DAO.Recordset 'on dit que 'rst' sera un résulat d'enregistrements issu de la future requête
    Dim sql As String 'on dit a vba que sql sera une chaine de caractère texte
    Dim strMessageType As String 'le reste pareil, du texte...
    Dim strTitre As String
    Dim strMsg As String
    
    
    'on initialise la variable des destinataires du mail
    
    Dim liste_destinataires_annee As String
    Dim compterst As Integer
    Dim comptetotal As Integer
    
      
      
      ' Titre du message
      strTitre = "Le message à envoyer par ...
      
      
      ' Message type à expédier
      ' on va chercher dans la table F_texte_mail
      
      DoCmd.OpenForm "F_texte_mail", , , , , acDialog
      
    
     
      strMessageType = DLookup("[mail_envoie_selection]", "mail_envoie_selection") 'la tble sur laquelle est basée le form F_texte_mail
     
      
    
    sql = "SELECT T_Organisme.NomOrganisme, T_Organisme.cmbZone, T_Organisme.cmbPays, T_Organisme.StatutMembre, T_Organisme.StatutMembreindirect, T_Organisme.StatutPartenaire, T_Pays.Pays, T_Organisme.SectionAlliance, T_Organisme.SectionTaskForce, T_Organisme.SectioneCalypso, T_Organisme.SectionCCEurope, T_Organisme.SectionTRS, T_Organisme.TypeAcadémie, T_Organisme.TypeAssociation, T_Organisme.TypeAutorité, T_Organisme.TypeFondation, T_Organisme.TypeGouvernement, T_Organisme.TypeSociété, T_Organisme.TypeIndividuel, T_Organisme.WGparité, T_Organisme.WGaccessibilité, T_Organisme.WGyouth, T_Organisme.WGcoopintern, T_Organisme.PublicFamille, T_Organisme.PublicHandicap, T_Organisme.PublicJeunes, T_Organisme.PublicSeniors, T_Organisme.NatureDemande, T_Organisme.NatureOffre, T_Collaborateur.Nom, T_Collaborateur.Titre, T_Collaborateur.Titre, T_Collaborateur.Email "
    sql = sql & "FROM (T_Pays INNER JOIN T_Organisme ON T_Pays.ID = T_Organisme.cmbPays) INNER JOIN T_Collaborateur ON T_Organisme.ID_Organisme = T_Collaborateur.id_Organisme "
    sql = sql & "WHERE (((T_Organisme.NomOrganisme) Like IIf([Forms]![F_mails]![Filtreorganisme].[ListIndex]=-1," * " & [Forms]![F_mails]![Filtreorganisme] & " * ",[Forms]![F_mails]![Filtreorganisme])) AND ((T_Organisme.cmbZone) Like "
    sql = sql & "IIf([Forms]![F_mails]![Filtrezone].[ListIndex]=-1," * " & [Forms]![F_mails]![Filtrezone] & " * ",[Forms]![F_mails]![Filtrezone])) AND ((T_Organisme.cmbPays) Like IIf([Forms]![F_mails]![Filtrepays].[ListIndex]=-1," * " & "
    sql = sql & "[Forms]![F_mails]![Filtrepays] & " * ",[Forms]![F_mails]![Filtrepays])) AND ((T_Organisme.StatutMembre)=IIf(IsNull([Forms]![F_mails]![Checkmembre]),[StatutMembre],[Forms]![F_mails]![Checkmembre])) AND "
    sql = sql & "((T_Organisme.StatutMembreindirect)=IIf(IsNull([Forms]![F_mails]![Checkmembreindirect]),[StatutMembreindirect],[Forms]![F_mails]![Checkmembreindirect])) AND "
    sql = sql & "((T_Organisme.StatutPartenaire)=IIf(IsNull([Forms]![F_mails]![Checkpartenaire]),[Statutpartenaire],[Forms]![F_mails]![Checkpartenaire])) AND "
    sql = sql & "((T_Organisme.SectionAlliance)=IIf(IsNull([Forms]![F_mails]![Checkalliance]),[SectionAlliance],[Forms]![F_mails]![Checkalliance])) AND ((T_Organisme.SectionTaskForce)=IIf(IsNull([Forms]![F_mails]![Checktaskforce]),[SectionTaskForce],[Forms]![F_mails]![Checktaskforce])) AND "
    sql = sql & "((T_Organisme.SectioneCalypso)=IIf(IsNull([Forms]![F_mails]![Checkecalypso]),[SectioneCalypso],[Forms]![F_mails]![Checkecalypso])) AND ((T_Organisme.SectionCCEurope)=IIf(IsNull([Forms]![F_mails]![Checkcceurope]),[Sectioncceurope],[Forms]![F_mails]![Checkcceurope])) AND "
    sql = sql & "((T_Organisme.SectionTRS)=IIf(IsNull([Forms]![F_mails]![Checktrs]),[Sectiontrs],[Forms]![F_mails]![Checktrs])) AND ((T_Organisme.TypeAcadémie)=IIf(IsNull([Forms]![F_mails]![Checkacadémie]),[TypeAcadémie],[Forms]![F_mails]![Checkacadémie])) AND "
    sql = sql & "((T_Organisme.TypeAssociation)=IIf(IsNull([Forms]![F_mails]![Checkassociation]),[TypeAssociation],[Forms]![F_mails]![Checkassociation])) AND ((T_Organisme.TypeAutorité)=IIf(IsNull([Forms]![F_mails]![Checkautorité]),[TypeAutorité],[Forms]![F_mails]![Checkautorité])) AND "
    sql = sql & "((T_Organisme.TypeFondation)=IIf(IsNull([Forms]![F_mails]![Checkfondation]),[TypeFondation],[Forms]![F_mails]![Checkfondation])) AND ((T_Organisme.TypeGouvernement)=IIf(IsNull([Forms]![F_mails]![Checkgouvernement]),[TypeGouvernement],[Forms]![F_mails]![Checkgouvernement])) AND "
    sql = sql & "((T_Organisme.TypeSociété)=IIf(IsNull([Forms]![F_mails]![Checksociété]),[TypeSociété],[Forms]![F_mails]![Checksociété])) AND ((T_Organisme.TypeIndividuel)=IIf(IsNull([Forms]![F_mails]![Checkindividue]),[TypeIndividuel],[Forms]![F_mails]![Checkindividuel])) AND "
    sql = sql & "((T_Organisme.WGparité)=IIf(IsNull([Forms]![F_mails]![Checkparité]),[WGparité],[Forms]![F_mails]![Checkparité])) AND ((T_Organisme.WGaccessibilité)=IIf(IsNull([Forms]![F_mails]![Checkaccessibilité]),[WGaccessibilité],[Forms]![F_mails]![Checkaccessibilité])) AND "
    sql = sql & "((T_Organisme.WGyouth)=IIf(IsNull([Forms]![F_mails]![Checkyouth]),[WGyouth],[Forms]![F_mails]![Checkyouth])) AND ((T_Organisme.WGcoopintern)=IIf(IsNull([Forms]![F_mails]![Checkcoopintern]),[WGcoopintern],[Forms]![F_mails]![Checkcoopintern])) AND "
    sql = sql & "((T_Organisme.PublicFamille)=IIf(IsNull([Forms]![F_mails]![Checkfamille]),[Publicfamille],[Forms]![F_mails]![Checkfamille])) AND ((T_Organisme.PublicHandicap)=IIf(IsNull([Forms]![F_mails]![Checkhandicap]),[Publichandicap],[Forms]![F_mails]![Checkhandicap])) AND "
    sql = sql & "((T_Organisme.PublicJeunes)=IIf(IsNull([Forms]![F_mails]![Checkjeunes]),[Publicjeunes],[Forms]![F_mails]![Checkjeunes])) AND ((T_Organisme.PublicSeniors)=IIf(IsNull([Forms]![F_mails]![Checkseniors]),[Publicseniors],[Forms]![F_mails]![Checkseniors])) AND "
    sql = sql & "((T_Organisme.NatureDemande)=IIf(IsNull([Forms]![F_mails]![Checkdemande]),[Naturedemande],[Forms]![F_mails]![Checkdemande])) AND ((T_Organisme.NatureOffre)=IIf(IsNull([Forms]![F_mails]![Checkoffre]),[Natureoffre],[Forms]![F_mails]![Checkoffre])));"
    
    
    
    'on affecte à 'rst' le résultat de la requête
    
    
      Set rst = CurrentDb.OpenRecordset(sql)
    
    
    
     
    
      
      compterst = 0
      comptetotal = 0
      
    
      
    Do While Not rst.EOF 'tant qu'il reste des lignes dans le résultat de la requête
      
      
    compterst = compterst + 1 'on incrémente de nombre de destinataires
    comptetotal = comptetotal + 1 'on incrément le nombre TOTAL pour affichage final
      
    
    rst.MoveNext 'on boucle
    
    MsgBox compterst
     
      
    Loop 'jusqu'à la fin de la requête
    Merci.

  9. #9
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    En mettant la ligne "WHERE ......." et les suivantes en commentaire, cela fonctionne.

    C'est donc bien la close WHERE qui ne fonctionne pas...

  10. #10
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Je pense que le souci vient des " et des '...

    Mais je me suis toujours cassé les dents là-dessus... Déjà 1 critère, je n'ai jamais compris, alors une trentaine

    J'abandonne donc.

    Mais ce qui me dérange, c'est si je lance la requête directement, elle s'exécute. Si je la lance en vba, erreur.

    Je vais voir à temps perdu pour créer une table temporaire via la requête et ensuite parcourir cette table. C'est crado, mais bon.

    Désolé du dérangement.

    A+

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    en VBA, la règle à respecter pour les double-quotes à l'intérieur de doubles-quotes c'est de les doubler, de les remplacer par des simples quotes ou de les remplacer par leur équivalent numérique avec la fonction Chr().
    En dernier lieu, essaie de remplacer " * " par Chr(34), par ""*"" ou par '*' .
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Merci à toi,

    j'ai remplacé les " * " par des ' * ', et maintenant, j'ai de nouveau l'erreur 'trop peu de paramètres. 32 attendu' , sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set rst = CurrentDb.OpenRecordset(sql)
    A+

  13. #13
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Que donne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    msgbox [Forms]![F_mails]![Checkpartenaire]
    msgbox me.name
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  14. #14
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Bonjour(soir),

    merci, mais en mettant ce code avant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset(sql)
    j'ai une erreur 94 "utilisation incorrecte de Null sur le 1er msgbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox [Forms]![F_mails]![Checkpartenaire]

  15. #15
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Place...
    avant...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset(sql)
    Tente le traitement, puis VBA->Affichage->Fenêtre d’exécution. Copie le code SQL et tente une exécution à partit d'une nouvelle requête.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  16. #16
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Merci,

    mais cela ne change rien du tout.

    Mais pas certain d'avoir bien compris "Copie le code SQL et tente une exécution à partit d'une nouvelle requête.", j'ai copié mon code dans la fenêtre exécution du bas, et tjrs la même erreur...

    A+

  17. #17
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Salut,

    Comme je l'ai deja dit le 1er avril ( ), reecris ta requete

    De plus tes IIF(ISNULL()) remplace les par des Nz()
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql & "((T_Organisme.StatutMembreindirect)=IIf(IsNull([Forms]![F_mails]![Checkmembreindirect]),[StatutMembreindirect],[Forms]![F_mails]![Checkmembreindirect])) AND "
    into
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql & "(T_Organisme.StatutMembreindirect)=Nz([Forms]![F_mails]![Checkmembreindirect],[StatutMembreindirect]) AND "
    voire encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql & "((T_Organisme.StatutMembreindirect)=IIf(IsNull([Forms]![F_mails]![Checkmembreindirect]),[StatutMembreindirect],[Forms]![F_mails]![Checkmembreindirect])) AND "
    doit devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If IsNull(Me.ChceckMembreindirect) Then
    sql = sql & "((T_Organisme.StatutMembreindirect)=[StatutMembreindirect])) AND "
    Else
    sql = sql & "((T_Organisme.StatutMembreindirect)=" & Me.Checkmembreindirect & ")) AND "
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  18. #18
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Hello,

    en fait, je suis passé par une table temporaire, et le vba est du coup bien + simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DoCmd.SetWarnings (False) 'on empeche les avertissements Access
     
    DoCmd.OpenQuery "suppression_table_temporaire_r_mails" 'on supprime les enregistrements de la table temporaire
     
    DoCmd.OpenQuery "ajout_table_temporaire_r_mails" 'on ajoute les enregistrements dans la table temporaire
     
    '---------------------------
    req_sql = "SELECT * FROM table_temporaire_r_mails " 'LA REQUETE
    req_sql = req_sql & "WHERE contact=true "
    '---------------------------
     
    Set rst = CurrentDb.OpenRecordset(req_sql)
    Par contre, je suis confronté à un nouveau souci avec Outlook, mais j'ouvre un nouveau message du coup.

    ++ et merci à tous

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

Discussions similaires

  1. Requête SQL dynamique avec nom de table dans une variable
    Par jonjack dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/09/2011, 14h37
  2. Réponses: 2
    Dernier message: 28/04/2009, 14h48
  3. Réponses: 2
    Dernier message: 27/07/2007, 16h37
  4. Requête avec nom de champ "variable"
    Par Pgs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2007, 10h25
  5. Problème de recordset avec requête SELECT
    Par gwinyam dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 08/03/2007, 10h53

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