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 :

Liste déroulantes dépendantes en cascade avec la mention "TOUS"


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Technicienne d'exploitation
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicienne d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Liste déroulantes dépendantes en cascade avec la mention "TOUS"
    Bonjour à tous,

    Je travaille sur un projet qui permet de répertorier des ouvrages sur plusieurs communes qui font partie de différents lots, sur lesquels j'ai plusieurs plans et zones, bref. J'ai crée une table de regroupement avec ces 4 champs (+ 4 champs numériques correspondants) en listant toutes les possibilités de correspondance entre Commune/Lot/Plan/Zone. Je travaille sur cette table T_Groupe pour réaliser 4 listes modifiables dans un formulaire qui me permettrait de retrouver mon ouvrage. Pas de problème pour créer la requête, pas de problème pour rendre les listes dépendantes (dans la mesure où je les renseigne dans l'ordre décrit précédemment), par contre, j'aimerais ajouter la mention "TOUS" dans mes listes, car lors d'une recherche par un utilisateur, il serait fort possible qu'il connaisse par exemple, le Plan mais ni la Commune, ni le Lot. Hors, avec mon système, s'il n'y a pas de sélection dans les deux premières listes, impossible de sélectionner dans la troisième.

    Sur la première liste Commune, Une mention TOUS correspondante à une valeur numérique 0 me permet effectivement de sortir tous mes résultats. Je voudrais qu'en cliquant sur la deuxième liste Lot, je puisse donc obtenir tous les Lots...

    Voici le code de ma première liste :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT T_Groupe.Code_Commune AS Code_Commune, T_Groupe.Commune AS Commune, 2 AS Position 
    FROM T_Groupe 
    UNION SELECT 0 AS Code_Commune, "---TOUS---" AS Commune, 1 AS Position 
    FROM T_Groupe 
    ORDER BY Position, Commune;

    Et la liste comme la requête fonctionnent.

    Voici le code de ma deuxième liste :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT T_Groupe.Code_Lot AS Code_Lot, T_Groupe.Lot AS Lot, T_Groupe.Code_Commune AS Code_Commune, 2 AS Position 
    FROM T_Groupe 
    WHERE T_Groupe.Code_Commune=Formulaires!F_Recherche!LM_Commune 
    AND UNION SELECT 0 AS Code_Lot, "---TOUS---" AS Lot, 1 AS Position 
    FROM T_Groupe 
    ORDER BY Position, Lot;

    Mais lorsque je clique sur ma liste, je n'ai rien qui s'affiche, ni même d'erreur de compilation... Je ne m'y connais pas trop en ACCESS ni en SQL, j'ai surtout "bidouillé" grâce aux différents tutos de ce site et autres infos sur les forums, mais là je bloque... Donc si quelqu'un avait une piste à me donner, ce serait très sympa !

    Merci d'avance à ceux qui prendront la peine de me lire et peut-être même de répondre !

  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,

    Jette un œil sur ce tutoriel, tu y trouveras peut-être une bonne idée.

    http://fauconnier.developpez.com/tut...ses-proprietes
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Dans un cas comme celui-là, la fonction VraiFaux() qui s'appelle IIf() en anglais, est ton amie
    Chacune de tes listes déroulantes doit avoir sa source de données écrite de cette manière :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT T_Groupe.Code_Lot AS Code_Lot, T_Groupe.Lot AS Lot, T_Groupe.Code_Commune AS Code_Commune, 2 AS Position 
    FROM T_Groupe 
    WHERE T_Groupe.Code_Commune=IIf(Formulaires!F_Recherche!LM_Commune=0,[Code_Commune],Formulaires!F_Recherche!LM_Commune)
    AND UNION SELECT 0 AS Code_Lot, "---TOUS---" AS Lot, 1 AS Position 
    FROM T_Groupe 
    ORDER BY Position, Lot;

    Comme tu as 4 listes déroulantes, la clause WHERE de chacune de tes listes doit porter sur les 3 autres champs et, à chaque fois, il faut mettre la fonction IIf pour vérifier si un choix a été fait par l'utilisateur.

    Ensuite sur ton formulaire, il faut créer une macro ou une fonction qui va rafraîchir (actualiser) tes 4 listes. Tu appelles cette macro ou cette fonction sur l’événement "Après MAJ" de chacune de tes 4 listes. Et le tour est joué

    J'avais fait un exemple la semaine dernière à ce sujet
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Technicienne d'exploitation
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicienne d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Bonjour,

    Jette un œil sur ce tutoriel, tu y trouveras peut-être une bonne idée.

    http://fauconnier.developpez.com/tut...ses-proprietes
    Merci pour votre réponse, je m'étais effectivement basée sur ce tutoriel à la base puisque j'avais commencé avec une table pour chaque critère (Commune/Lot/Plan/Zone), mais ça ne fonctionnait pas vraiment puisque j'avais des doublons... C'est pour cela que j'ai crée une table T_Groupe qui recoupe les différentes combinaisons possibles. L'avantage étant, dans le cas d'un nouvel enregistrement qui présenterait une combinaison différente, où je n'aurais qu'une ligne à renseigner dans ma table T_Groupe au lieu de reprendre mes 4 tables.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Technicienne d'exploitation
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicienne d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par paidge Voir le message
    Bonjour,
    Dans un cas comme celui-là, la fonction VraiFaux() qui s'appelle IIf() en anglais, est ton amie
    Chacune de tes listes déroulantes doit avoir sa source de données écrite de cette manière :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT T_Groupe.Code_Lot AS Code_Lot, T_Groupe.Lot AS Lot, T_Groupe.Code_Commune AS Code_Commune, 2 AS Position 
    FROM T_Groupe 
    WHERE T_Groupe.Code_Commune=IIf(Formulaires!F_Recherche!LM_Commune=0,[Code_Commune],Formulaires!F_Recherche!LM_Commune)
    AND UNION SELECT 0 AS Code_Lot, "---TOUS---" AS Lot, 1 AS Position 
    FROM T_Groupe 
    ORDER BY Position, Lot;

    Comme tu as 4 listes déroulantes, la clause WHERE de chacune de tes listes doit porter sur les 3 autres champs et, à chaque fois, il faut mettre la fonction IIf pour vérifier si un choix a été fait par l'utilisateur.

    Ensuite sur ton formulaire, il faut créer une macro ou une fonction qui va rafraîchir (actualiser) tes 4 listes. Tu appelles cette macro ou cette fonction sur l’événement "Après MAJ" de chacune de tes 4 listes. Et le tour est joué

    J'avais fait un exemple la semaine dernière à ce sujet

    Merci beaucoup, j'ai du bidouillé un peu, mais effectivement ce devait être cette mention IIf qu'il me manquait, je transmets donc mes codes SQL et mes critères de requête correspondant au cas où cela intéresserait quelqu'un d'autre, car, cela fonctionne !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Parfait, n'oublies pas de passer ton topic en "Résolu"
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Technicienne d'exploitation
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicienne d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Alors je reprends :

    1ere liste de choix : LM_Commune
    dans la propriété contenu on a :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT T_Groupe.Code_Commune AS Code_Commune, T_Groupe.Commune AS Commune, 2 AS Position 
    FROM T_Groupe 
    UNION SELECT "*" AS Code_Commune, "---TOUS---" AS Commune, 1 AS Position 
    FROM T_Groupe 
    ORDER BY Position, Commune;

    Dans le critère du champs Code_Commune de la table T_Groupe de la requête liée à mon formulaire :
    Comme VraiFaux([Formulaires]![F_Recherche]![LM_Commune].[ListIndex]=-1;"*" & [Formulaires]![F_Recherche]![LM_Commune] & "*";[Formulaires]![F_Recherche]![LM_Commune])

    2eme liste de choix : LM_Lot
    dans la propriété contenu on a :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT T_Groupe.Code_Lot AS Code_Lot, T_Groupe.Lot AS Lot, 2 AS Position   
    FROM T_Groupe   
    WHERE T_Groupe.Code_Commune=IIf(Formulaires!F_Recherche!LM_Commune="*", Code_Commune, Formulaires!F_Recherche!LM_Commune)   
    UNION SELECT "*" AS Code_Lot, "---TOUS---" AS Lot, 1 AS Position  
    FROM T_Groupe 
    ORDER BY Position, Lot;

    Critère de requête (idem que précédemment) :
    Comme VraiFaux([Formulaires]![F_Recherche]![LM_Lot].[ListIndex]=-1;"*" & [Formulaires]![F_Recherche]![LM_Lot] & "*";[Formulaires]![F_Recherche]![LM_Lot])

    3eme liste de choix : LM_Plan
    Dans la propriété contenu :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT T_Groupe.Code_Plan AS Code_Plan, T_Groupe.Plan AS Plan, 2 AS Position  
    FROM T_Groupe  
    WHERE T_Groupe.Code_Lot=IIf([Formulaires]![F_Recherche].[LM_Lot]="*", Code_Lot, Formulaires!F_Recherche!LM_Lot)  
    AND T_Groupe.Code_Commune=IIf([Formulaires]![F_Recherche].[LM_Commune]="*", Code_Commune, Formulaires!F_Recherche!LM_Commune)  
    UNION SELECT "*" AS Code_Plan, "---TOUS---" AS Plan, 1 AS Position   
    FROM T_Groupe
    ORDER BY Position, Plan;

    Critère de requête :
    Comme VraiFaux([Formulaires]![F_Recherche]![LM_Plan].[ListIndex]=-1;"*" & [Formulaires]![F_Recherche]![LM_Plan] & "*";[Formulaires]![F_Recherche]![LM_Plan])

    Etc...

    De cette manière j'ai bien la mention TOUS qui s'affiche en haut de chaque liste, Et si je sélectionne "TOUS" dans la première liste, la liste suivante me propose la liste complète de choix + la mention TOUS en tête, etc.

    En ajoutant dans le code SQL du formulaire pour chaque liste (exemple pour la première liste)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub LM_Commune_AfterUpdate()
    Me.LM_Lot.Requery
    Me.LM_Plan.Requery
    Me.LM_....Requery
    Me.Requery
    End Sub
    Comme cela les résultats s'affiche immédiatement dans le formulaire après chaque sélection.

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

Discussions similaires

  1. Lier 2 listes déroulantes entre elles, et avec MySQL ?
    Par mLk92 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 30/08/2006, 16h01
  2. Réponses: 3
    Dernier message: 14/08/2006, 21h27
  3. Réponses: 3
    Dernier message: 30/06/2006, 22h56
  4. Réponses: 4
    Dernier message: 17/03/2006, 14h39
  5. Liste déroulante dépendante
    Par nanas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2005, 15h25

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