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 :

Récupérer les valeurs d'une liste déroulante à choix multiple comme critère dans une requête selection


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut Récupérer les valeurs d'une liste déroulante à choix multiple comme critère dans une requête selection
    Bonsoir,

    Après avoir écumé, le forum et y avoir trouvé quelques pistes notamment une que je développerai, je me permets de vous solliciter afin de trouver une solution à mon problème.

    J'aimerais comme l'indique le titre de cette discussion, récupérer les éléments sélectionnés dans ma liste déroulante à choix multiple pour m'en servir comme critères dans une requête sélection. Pour une liste déroulante à choix unique cela est très simple, puisque le critère de ma requête sélection est le suivant [Forms]![Extraction]![L1].

    Je suis tombé sur un tuto qui selon toute vraisemblance pourrait m'aider; La solution apportée, si j'ai bien compris, est de créer une variable qui intègrerai l'ensemble des éléments sélectionnés.

    http://loufab.developpez.com/tutorie.../operateur-in/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commande2_Click()
    Dim itm As Variant          ' l'item choisi
    Dim lstval As String        ' la liste des id sélectionnés
    For Each itm In Me.Zliste.ItemsSelected                 ' parcourt les items
        lstval = lstval & Me.Zliste.ItemData(itm) & ","     ' insère chaque id dans la variable
    Next
    lstval = Left(lstval, Len(lstval) - 1)                  ' supprime la dernière virgule
    DoCmd.OpenReport "Test", acViewPreview, , "IdCategorie IN (" & lstval & ")"  ' imprime la sélection
    End Sub
    Cependant je n'arrive pas à utiliser ce "lstval" dans le critère de ma requête sélection. Quel syntaxe dois-je utiliser, j'ai déjà essayé IN ( lstval ) mais ça n'a pas l'air de fonctionner.
    Pouvez-vous m'aider ou m'orienter vers autre chose?

    Merci d'avance pour votre aide,

    Bonne soirée

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Vous devriez montrer le code que vous utilisez en précisant le type des données ainsi que les valeurs retournées par lstVal

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 090
    Points
    43 090
    Par défaut requete à partir de selection mutliple
    moi, pour cela voilà comment je procèderait.

    Je n'utilise pas les sélections multiples ( par contre pas mal les listes déroulantes )

    Je ferais une requête SQL en VBA mise à jour en parcourant la liste déroulante avec une boucle, la requete complétée à chaque élément sélectionné trouvé, on ajoute dans la requête la valeur de l'élément.

    Si besoin je peux développer.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,
    Transmettre un paramètre à une requête se fait assez simplement via plusieurs méthodes. Cela reste à la discrétion du développeur avec cependant 2 règles fondamentales à retenir :
    1. L'ihm doit rester pratique pour l'utilisateur, le développeur d'adapte.
    2. Le code doit être le plus simple possible, pensez aux autres qui devront le lire.


    Concernant une liste In() le problème de passation de paramètres est un peu plus ardu. Voici comment je procède habituellement, bien évidemment c'est encore à la discrétion du développeur, à chacun sa méthode et ses habitudes.

    D'abord concernant la captation des choix de la liste et de leur valeur. La méthode indiquée dans mon tutoriel reste valable à un détail ; il ne traite que des valeurs numériques, pour du texte voici ce qu'il faut modifier. Note également que je factorise sous forme d'une fonction pour pouvoir récupérer la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Function fGetListe(zliste As ListBox) As String
    Dim itm As Variant          ' l'item choisi
    Dim lstval As String        ' la liste des id sélectionnés
     
    For Each itm In zliste.ItemsSelected                 ' parcourt les items
        'ICI LA LIGNE MODIFIEE
        lstval = lstval & """" & zliste.ItemData(itm) & ""","     ' insère chaque valeur TEXTE
    Next
    fGetListe = Left(lstval, Len(lstval) - 1)
    End Function
    Donc l'appel est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fGetListe(me.malistederoulante)
    Pour l'inclusion dans une requête voici comment procéder (extrait tiré d'une de mes applications) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Dim strChoix As String
        Dim strSql As String
        strSql = "SELECT [Nom] & "" "" & [Prenom] AS Adhérent, tAdherent.FonctionAmap, tAdherent.Email, "
        strSql = strSql & " tAdherent.Selection, tAdherent.ID_adherent, tAdherent.Nom FROM tAdherent "
     
        strChoix = fGetListe(Me.lstFonctionAmap)
     
        If Len(strChoix) > 0 Then
            strSql = strSql & " WHERE FonctionAmap in(" & strChoix & ")"
        End If
        strSql = strSql & " ORDER BY tAdherent.Nom;"
    • strSql contient la requête
    • strChoix la liste des valeurs


    Une fois strSql renseigné on peut imaginer l'utiliser tel quel ou bien l'enregistrer dans un objet requête comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Dim Qrd As DAO.QueryDef
        'Créer une requête
        Set Qrd = CurrentDb.CreateQueryDef("MaNouvelleRequete", strSql)
        'Modifier un objet requête existant
        Set Qrd = CurrentDb.QueryDefs("UneRequeteExistante")
        Qrd.SQL = strSql
        'dans ce dernier cas le code SQL existant est simplement remplacé par le nouveau
        currentdb.QueryDefs.Refresh 'on force le rafraichissement.
    Il n'y a aucune instruction de sauvegarde.

    La liste à choix multiple est souvent boudée parce que moins pratique à poser dans une IHM et plus complexe à exploiter aussi bien pour l'utilisateur (ctrl et shift) que pour le développeur néophyte cependant elle est incontournable pour du choix multiple.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    La liste à choix multiple est souvent boudée parce que moins pratique à poser dans une IHM et plus complexe à exploiter aussi bien pour l'utilisateur (ctrl et shift) que pour le développeur néophyte cependant elle est incontournable pour du choix multiple.
    Il y a aussi le sous formulaire avec case à cocher. Plus difficile à développer mais beaucoup plus pratique pour l'utilisateur

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    En effet , j'ai une classe qui permet de faciliter l'utilisation des choix par case à cocher. Faudrait que je pense à la publier... mais surtout la retrouver.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Bonjour à vous deux,

    Je vais essayer de préciser un peu plus.

    J'ai une liste déroulante qui est basée sur une table "DATES" contenant un champ "M_A" avec du texte. Il s'agit de mois et d'année ( JANVIER 2013 ; FÉVRIER 2013 ; .... ).

    L’utilisateur choisit donc le mois qui l’intéresse et j'ai un bouton macro qui va exécuter pleins de requêtes (création de table , ajout) .Toutes ces requêtes se base sur une première requête une requête sélection qui est filtrée selon le choix qu'a fait l'utilisateur dans la liste déroulante. Le critère de cette première requête sélection est donc LIKE Forms!Extraction.L1. Extraction est le nom de mon formulaire ou se situe la zone de liste déroulante L1.

    Cela fonctionne très bien. Mais je me dis que l'utilisateur peux être amené à sélectionner plusieurs items dans ma zone déroulante. Donc je me suis dis, je vais passer ma zone de liste déroulante en choix multiple. Mais là, ma requête sélection ou il y a le filtre ne renvoie aucun résultat.

    J'ai donc cherché et je suis tombé sur le tuto que j'ai mis en application avec le résultat escompté.

    Il permet de renvoyer dans un état les valeurs que l'utilisateur a choisit dans ma zone de liste déroulante à choix multiple.
    Le code que j'ai utilisé est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commande2_Click()
    Dim itm As Variant          ' l'item choisi
    Dim lstval As String        ' la liste des id sélectionnés
    For Each itm In Forms!Extraction.L1.ItemsSelected                 ' parcourt les items
        lstval = lstval & """" & Forms!Extraction.L1.ItemData(itm) & ""","     ' insère chaque id dans la variable
    Next
    lstval = Left(lstval, Len(lstval) - 1)                  ' supprime la dernière virgule
    DoCmd.OpenReport "etat1", acViewPreview, , "M_A IN (" & lstval & ")"  ' imprime la sélection
    End Sub
    Je récupère bien avec ce code une "espèce" de variable lstval qui contient les éléments sélectionnés de la liste déroulante.

    Alors j'ai donc tenté d'utiliser lstval dans le critère de ma requête sélection en prenant le soin d’exécuter la procédure avant; Du coup, j'ai testé plusieurs choses et notamment ça : select M_A from DATES IN ( lstval ) avec toutes les déclinaisons possible mais ça n'a pas l'air si simple.

    Je pense qu'il y a forcément un moyen, les gens qui ont fait des zones de liste déroulante à choix multiple ont du bien imaginer que des gens bien attentionnés voudraient récupérer ces items un jour ou l'autre, non ?

    Christoph ta solution semble être une bonne alternative, je vais cependant encore continuer mes recherches. Je reviendrais vers toi pour en savoir plus si je ne m'en sors pas. Mais je suis certains de n'être pas très loin.

    Merci d'avance à ceux qui pourront m'aider.

    Bonne journée

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Je viens de voir vos messages,j'étais en train de rédiger le mien je vais regarder ça d'un peu plus près.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Loufab,

    Pourquoi ne puis-je pas utiliser ma variable strChoix qui est égal à fGetListe(Forms!Extraction.L1) directement dans ma requête sélection en écrivant dans le critère quelque chose comme = & strChoix & ?

    Ton code me fait un peu peur car j'ai une grosse interrogation, je vais essayer d'expliquer ça.

    Ma requête sélection s'appelle A001 c'est sur un de ses champs que je filtre en fonction de ma zone de liste.

    J'ai 2 requêtes A002 (création de table) et A003 (requête ajoût) qui sont créées à partir de A001 que j’exécute en vba après un clic sur un bouton. Les deux requêtes (A002 et A003) sont donc filtrées à leur lancement.

    Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Extract_Click()
    DoCmd.setWarnings False
     
    DoCmd.OpenQuery ("A002")
    DoCmd.OpenQuery ("A003")
     
    Me.refresh
    Me.L1.Requery
     
    End Sub
    J'ai créé la fonction fGetListe dans un module comme tu l'expliques dans ton message précédent.
    Maintenant si je suis ton raisonnement il faut que j'intègre à mon code quelque chose comme ça :

    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
    Private Sub Extract_Click()
            Dim strChoix As String
            Dim strSql As String
            DoCmd.setWarnings False
     
     
        strSql = "SELECT...... j'écris toute ma requête A001 en SQL sauf la clause Where"
     
     
        strChoix = fGetListe(Forms!Extraction.L1)
     
        If Len(strChoix) > 0 Then
            strSql = strSql & " WHERE Mois_Annee in(" & strChoix & ")"
        End If
     
    ' la ma première interrogation arrive je dois exécuter A002 et A003 mais comment ces 2 requêtes vont elles savoir qu'elle ne découle plus de A001 mais de strSql? Si je lance ça comme ça A002 et A003 dépendent toujours de ma requête A001. Dois-je tous réécrire? Je pense que tu me conseilles de faire une dernière chose c'est en fait de créer A001 à partir de strSql avant de lancer mes 2 requêtes A002 et A003. Comme ça mes requêtes A002 et A003 vont savoir de quoi elles dépendent. En écrivant '
     
        Dim Qrd As DAO.QueryDef
     
        Set Qrd = CurrentDb.CreateQueryDef("A001", strSql)
        currentdb.QueryDefs.Refresh 'on force le rafraichissement.
     
     
    DoCmd.OpenQuery ("A002")
    DoCmd.OpenQuery ("A003")
     
    Me.refresh
    Me.L1.Requery
     
    End Sub
    Peux-tu m'aiguiller?

    Merci d'avance.

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    On ne peut pas utiliser directement une variable VBA dans un objet requête. Par contre les fonctions, même utilisateur, sont visibles dans les requêtes (le moteur Jet sait les utiliser). S'il s'agissait d'une valeur à utiliser avec un autre opérateur booléen (=, like, <>...) on aurait pu utiliser une fonction. Avec In() ça ne fonctionne pas.

    Ton code semble correct, par contre à voir avec les dates comment cela ce comporte. Il se peut que tu soit obliger d'utiliser une liste au format double. à voir.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Ok merci pour ces explications.

    Bon je viens de tester ce code dans l'ensemble le process fonctionne bien il me mets bien à jour ma requête sélection A001 avec un filtre dans le critère de type IN (.....).

    Toutefois, j'ai un souci pour l'écriture de ma chaîne strSql.
    Vous allez pouvoir me répondre rapidement.
    je concatène 2 champs sur lequel je filtre après.

    en gros j'ai strSql = strSql & " ............ MOIS & ANNEE AS MOIS_ANNEE FROM T001 "

    Cependant dans ma liste déroulante, mes items ont un espace : JANVIER 2013 ; FEVRIER 2013;.....

    Le champs MOIS_ANNEE renvoie des valeurs comme JANVIER2013 ; FEVRIER2013;

    J'ai besoin de mettre un espace dans mon strSql entre MOIS et ANNEE, je n'y arrive;

    J'ai essayé MOIS &" "& ANNEE mais bon ça marche pas. Je ne sais jamais comment m'y prendre.

    Connaissez vous la bonne syntaxe?

    Merci d'avance

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il s'agit pourtant bien de MOIS &" " & ANNEE

    Utilisez un espion pour vérifier ce que contient votre chaine strSQL et essayez là dans l'éditeur de requête

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Voici le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = strSql &  " IIf(A002!FIN_ETAT_A<=A002!FIN,1,0) AS S_1, IIf(A002!FIN_ETAT_A>=A002!DEBUT,1,0) AS S_2, IIf(A002!DEBUT_ETAT<=A002!FIN,1,0) AS SF_1, IIf(A002!FIN_ETAT_A>A002!FIN Or IsNull(A002!FIN_ETAT_A),1,0) AS SF_2, A002![MOIS ] &" "& A002!ANNEE AS MOIS_ANNEE FROM A002 "
    Je ne sais pas pourquoi cela bloque. L'espace après le MOIS dans A002![MOIS ] est normal car lorsque j'ai créé mon champ j'ai fais une erreur.

    J'ai regardé la requête sélection que j'avais conçu avant d'entreprendre tous ça en mode sql pour voir comment elle était écrite et c'est bien ça!!! je sèche en plus je ne sais pas utiliser ce mode espion.

    Une idée?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous,

    Ne trouvant pas la solution, j'ai décidé de créer une requête sélection intermédiaire qui me renvoie déjà le champ concaténé puisque je n'arrive pas à le faire dans ma chaîne strSql.

    Jusque là tout va bien, je réécris donc le tous et me voilà avec une erreur 3142 caractères trouvé à la fin de l'expression sql

    Je crois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        If Len(strChoix) > 0 Then
            strSql = strSql & " WHERE Mois_Annee in(" & strChoix & ")"
        End If
     
        Set Qrd = CurrentDb.QueryDefs("A001", strSql)
     
        'LE DEBOGAGE APPARAIT SUR LA LIGNE EN DESSOUS
        Qrd.sql = strSql
        currentdb.QueryDefs.Refresh 'on force le rafraichissement.
    En y regardant, de plus près je passe ma souris sur le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = strSql & " WHERE Mois_Annee in(" & strChoix & ")"
    Comme j'ai sélectionné 3 mois dans la liste déroulante je vois que strChoix est égale à ""JANVIER 2013", "FÉVRIER 2013", "MARS 2013","

    Je me demande si ce n'est pas à cause de la virgule qu'il me renvoie une erreur de ce type.

    Qu'en pensez vous?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    C'est bon j'ai enfin trouvé . Il s'agissait du point virgule que j'avais mal placé

  16. #16
    Membre à l'essai
    Homme Profil pro
    IT Tech
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : IT Tech
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Lectionner la liste complète
    Bonjour à tous,

    Je me joint beaucoup plus tard dans la discutions mais j'aimerais ajouter une question.

    J'aurais besoin de savoir comment prendre en compte tout les éléments de la liste plutôt qu'uniquement ceux sélectionner.

    Je m'explique. J'ai deux zone de liste. Une contient la liste complète de mes responsable de dossier (Liste1).
    l'autre est vide (Liste2). Je déplace certain élément de la liste1 vers la liste2.

    Je voudrais ensuite utiliser votre code pour construire un requête où tout les éléments de la liste 2 seront pris comme paramètre. Je sais que je suis vraiment tout près de la solution mais je piétine un peu. pourriez vous m'orienter svp.

    J'utilise la méthode proposé par loufab (Merci à toi pour ton aide) pou réaliser l'opération.
    Je me demandais aussi si je changeais le "itemselected" par autre chose est-ce que je pourrais avoir la totalité du contenue de ma zone de liste dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each itm In zliste.ItemsSelected
    Merci beaucoup d'avance pour votre aide.

  17. #17
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    En effet très tardivement.

    Pour parcourir toute la liste utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 to Me.maliste.ListCount-1
         debug.print me.maliste.itemdata(i)
    next
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print me.maliste.column(0,i)

    ou 0 est le n° de la colonne.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  18. #18
    Futur Membre du Club
    Femme Profil pro
    agent informatique et réseaux
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : agent informatique et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut requete sur liste choix multiples
    bonjour,
    moi aussi je me joins très tardivement à cette discussion ... j'ai le même problème de vouloir associer une liste choix multiples à une requête.
    (je précise que je n'ai aucun soucis avec une liste déroulante à choix simple, j'exécute la requête sans passer par vba)
    Donc:
    Ma liste de choix est composée d'années en format texte.
    Voici mon code (ci-après) ... A l'exécution, le code bloque sur Set Qrd ... le message d'erreur me dit :
    "erreur d'exécution 3075: erreur de syntaxe, opérateur absent dans l'expression <<WHERE AnneDebutFormation in("2015","2016")>>
    (donc les éléments de ma liste multiple sont bien trouvés, mais je bloque sur l'association à ma requête)
    ... ah, j'allais oublier. Pour l'instant, dans mon sql, j'ai laissé de coté la clause HAVING ... je me suis dis que je m'en occuperais une fois que le gros de ma requête fonctionne.
    Je serai super heureuse si quelqu'un peut m'aider.

    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
    Private Sub Commande36_Click()
     
        Dim strChoix As String
        Dim strSql As String
     
        strSql = "SELECT Year([tbl_General]![PeriodeDebutFormation]) AS AnneeDebutFormation, tbl_General.num_Axe,tbl_General.Service, Sum(tbl_General.DureeStageJours) AS SommeDeDureeStageJours,"
        strSql = strSql & " tbl_General.Dispositif_code, tbl_General.Plan_Pluriannuel_autre, tbl_General.Plan_Pluriannuel, tbl_General.Suivi From tbl_General"
        strSql = strSql & " GROUP BY Year(tbl_General.PeriodeDebutFormation), tbl_General.num_Axe, tbl_General.Service, tbl_General.Dispositif_code, tbl_General.Plan_Pluriannuel_autre, tbl_General.Plan_Pluriannuel, tbl_General.Suivi,"
     
        'strSql = strSql & " HAVING(((tbl_General.num_Axe) = 3) And ((tbl_General.Dispositif_code) = 'PLAN' Or (tbl_General.Dispositif_code) = 'PLAN-RECY' Or (tbl_General.Dispositif_code) = 'CPF') And ((tbl_General.Plan_Pluriannuel_autre) = False) And ((tbl_General.Plan_Pluriannuel) = False) And ((tbl_General.Suivi) <> 'Reporté' And (tbl_General.Suivi) <> 'Annulé'))"
     
        strChoix = fGetListe(Me.Lst_anneeMulti)
     
        If Len(strChoix) > 0 Then
            strSql = strSql & " WHERE AnneeDebutFormation in(" & strChoix & ")"
     
        End If
        strSql = strSql & ""
     
        Dim Qrd As DAO.QueryDef
        'Créer une requête
        Set Qrd = CurrentDb.CreateQueryDef("MaNouvelleRequete", strSql)
     
    End Sub

  19. #19
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       strSql = strSql & " GROUP BY Year(tbl_General.PeriodeDebutFormation), tbl_General.num_Axe, tbl_General.Service, tbl_General.Dispositif_code, tbl_General.Plan_Pluriannuel_autre, tbl_General.Plan_Pluriannuel, tbl_General.Suivi,"
    Bonjour,
    enlève la virgule à la fin de cette ligne.
    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 ?

  20. #20
    Futur Membre du Club
    Femme Profil pro
    agent informatique et réseaux
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : agent informatique et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    bonjour tee_grandbois,
    ... déjà fait, j'ai enlevé la virgule, le message d'erreur reste le même.

Discussions similaires

  1. [WD-2010] Comment insérer une liste déroulante à choix multiple
    Par djibril dans le forum Word
    Réponses: 10
    Dernier message: 18/06/2019, 14h21
  2. Réponses: 6
    Dernier message: 09/05/2014, 17h23
  3. Récupérer les valeurs d'un liste déroulante liée
    Par may.sou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/05/2013, 10h09
  4. Réponses: 3
    Dernier message: 15/07/2012, 00h01
  5. vérifier qu'un choix a été effectué dans une liste déroulant
    Par karibouxe dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 17/02/2006, 16h10

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