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

Requêtes et SQL. Discussion :

récupérer les valeurs d'une zone de liste à sélection multiple


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 58
    Points
    58
    Par défaut récupérer les valeurs d'une zone de liste à sélection multiple
    bonjour à tous,
    j'aimerais récupérer les valeurs sélectionnées par l'utilisateur pour en faire le critère d'une requête.
    j'ai une zone de liste multisélection (le contrôle se nomme "CtrlSol") à une seule colonne qui affiche le champ "Solution".
    L'utilisateur choisit une ou plusieurs valeurs.
    j'ai une requête paramétrée avec la variable strWHERE comme critère.
    je souhaiterai que ma requête prenne en compte un choix multiple, c'est à dire qu'elle affiche le résultat pour chaque valeur sélectionnée. Après une longue recherche j'ai utilisé ItemsSelected et For Each..Next, mais non c'est pas ça!!
    voici où j'en suis dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim VarSol As Variant
    For Each VarSol In Me!CtrlSol.ItemsSelected
    Me!CtrlSol.Selected(VarSol) = True
    NextVarSol
    If Not IsNull(Me!CtrlSol) Then
    strWHERE = strWHERE + " And (([MaTable].Solution) = [Forms]![MonFormulaire]![CtrlSol].[Selected(VarSol)])"
    End If
    pas vraiment expert, je suis peut être loin du but!!!
    pouvez vous me donner un indice ou une aide qui pourrait me débloquer!!
    merci à tous

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Non tu n'es pas loin du but recherché.
    Comme il y a plusieurs choix, il faut mettre des OR entres les différents choix.
    -> WHERE (Champ=choix1 OR Champ=Choix2 ... OR Champ=Choixn)
    On peut aussi utliser la clause IN (valeur1, valeur2, ..., valeurn)
    -> WHERE Champ IN (choix1, choix2, ..., choixn)

    Voila comment je farai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim VarSol AS Variant, strCrit As String
    strCrit=""
    FOR Each VarSol IN Me!CtrlSol.ItemsSelected
      if strCrit <> "" Then strCrit = strCrit & " OR "
      strCrit = strCrit & "[MaTable].Solution = '" & Me.CtrlSol.ItemData(VarSol) & "'"
    Next VarSol
    If strCrit <> "" Then strWHERE = strWHERE & "(" & strCrit & ")"
    End IF
    La variable intermédiare strCrit sert à construire le critère sur le champ [MaTable].Solution.
    Si le champ Solution n'est pas de type texte, mais numérique remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCrit = strCrit & "[MaTable].Solution = '" & Me.CtrlSol.ItemData(VarSol) & "'"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCrit = strCrit & "[MaTable].Solution = " & Me.CtrlSol.ItemData(VarSol)
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    merci LedZeppII, je vais tester ça...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    super ca fonctionne parfaitement...un grand merci à tous et plus particulièrement à LedZeppII.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour

    Je rebondis sur votre poste suivant, même s'il date un peu.

    En fait, je suis en cours de tentative pour effectuer la même chose que vous.

    Pour le moment, j'arrive à ouvrir un état (qui dépend d'une requête) par un choix dans une zone de liste. Mais si je met la propriété selection multiple = étendu pour la zone de liste, mon état ne s'ouvre plus.

    Je voulais tenter de reprendre votre code pour l'adpter.

    Dedans, vous parlez de requête paramétrée avec variable pour la condition where.

    La requête qui ouvre l'état est une requête parametrée. Mais ou indique-ton- la variable pour la condition where ?

    Merci d'avance pour votre aide

    Anne Sophie


    Citation Envoyé par garsflo Voir le message
    bonjour à tous,
    j'aimerais récupérer les valeurs sélectionnées par l'utilisateur pour en faire le critère d'une requête.
    j'ai une zone de liste multisélection (le contrôle se nomme "CtrlSol") à une seule colonne qui affiche le champ "Solution".
    L'utilisateur choisit une ou plusieurs valeurs.
    j'ai une requête paramétrée avec la variable strWHERE comme critère.
    je souhaiterai que ma requête prenne en compte un choix multiple, c'est à dire qu'elle affiche le résultat pour chaque valeur sélectionnée. Après une longue recherche j'ai utilisé ItemsSelected et For Each..Next, mais non c'est pas ça!!
    voici où j'en suis dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim VarSol As Variant
    For Each VarSol In Me!CtrlSol.ItemsSelected
    Me!CtrlSol.Selected(VarSol) = True
    NextVarSol
    If Not IsNull(Me!CtrlSol) Then
    strWHERE = strWHERE + " And (([MaTable].Solution) = [Forms]![MonFormulaire]![CtrlSol].[Selected(VarSol)])"
    End If
    pas vraiment expert, je suis peut être loin du but!!!
    pouvez vous me donner un indice ou une aide qui pourrait me débloquer!!
    merci à tous

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    La variable strWHERE de garsflo est utilisée pour l'argument ConditionWhere de DoCmd.OpenReport
    Code : syntaxe de OpenReport : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport NomEtat, Afficher, NomFiltre, ConditionWhere
    ConditionWhere est du texte contenant une expression SQL qui sera utilisée pour filtrer les données sources de l'état.

    Exemple:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "Etat1", , , strWHERE
    La requête de l'état n'a pas besoin d'être paramétrée si on utilise l'argument ConditionWhere.
    Elle peut l'être, mais il vaut mieux dans ce cas, que les paramètres ne soient pas utilisés pour filtrer des champs se trouvent aussi dans ConditionWhere.
    Autrement on cumule les critères sur un même champ.

    Dans ton cas, je suppose que la requête de ton état utilise le nom de ta zone de liste en tant que paramètre.
    Si tu utilises ConditionWhere, il faudra enlever le paramètre de ta requête.

    A+

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

Discussions similaires

  1. [Toutes versions] Récupérer simplement les valeurs d'une zone de liste
    Par nadgreg dans le forum Access
    Réponses: 8
    Dernier message: 15/04/2014, 09h54
  2. Réponses: 2
    Dernier message: 06/06/2008, 16h18
  3. Réponses: 2
    Dernier message: 08/06/2006, 13h38
  4. Réponses: 2
    Dernier message: 12/04/2006, 10h00
  5. Réponses: 3
    Dernier message: 22/03/2006, 09h47

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