Sous formulaire lié à plusieurs listes déroulantes [Résolu]

Signaler
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020
-
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020
-
Bonjour à tous,


J'ai un formulaire comportant (pour l'instant) deux listes déroulantes, une avec les types d'outil en stock, l'autre avec les spécificités des types d'outils (filtrée par la première). Le but du formulaire est de vérifier la disponibilité les outils dans le stock.

J'aimerais afficher dans un sous formulaire les résultats en fonction de ce que l'utilisateur veut filtrer, à savoir simplement le type d'outil ou la spécificité. Or je n'arrive pas à combiner les deux dans un même formulaire.

J'aimerais par la suite ajouter d'autre listes en cascade, pour affiner le plus possible la recherche.

Aussi, je n'arrive pas à appliquer SELECT DISTINCT à la deuxième liste.



Voici mon fichier : https://we.tl/t-zkNdvkfBJ7

Le formulaire en question s'appelle "#f_rechercher_type"


Merci d'avance pour votre aide !

7 réponses

Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
bonjour, je ne vois pas où, dans ton fichier, tu essaies de faire quoi, ni ne comprends ce que signifie "appliquer SELECT DISTINCT à la deuxième liste".
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020

J'aimerais que lorsque l'utilisateur sélectionne un type d'outil dans la première liste, toutes les références de ce type d'outil apparaissent, et que si il décide de sélectionner en plus un détail dans la deuxième liste, toutes les références de ce type d'outil plus ce détail apparaissent.

Actuellement, dans la deuxième liste, chaque détail de chaque outil apparait.
Or il y en a en commun. J'aimerais qu'il n'y ai qu'une seule fois le nom de chaque détail (j'ai essayé via la commande SQL "SELECT DISTINCT").
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
tiens, en fait, je ne trouve pas de formulaire nommé "#f_rechercher_type".
j'avais probablement regardé un autre formulaire.
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
tu écris "je n'arrive pas à appliquer SELECT DISTINCT à la deuxième liste" et "j'ai essayé via la commande SQL "SELECT DISTINCT"", et tu n'expliques pas le résultat obtenu, ni en quoi cela n'est pas ce que tu attends.
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
je vois que tu fais
SELECT DISTINCT [#tstock].ID, [#tstock].DETAIL

pourquoi inclus-tu ID?
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020

Pour la commande SQL, j'ai expliquer un peu plus haut mais j'ai du mal m'exprimer.

J'aimerais faire des listes en cascade.
Dans ma table source "#tStock", j'ai 220 lignes (certaines références sont en plusieurs fois et il n'y a que deux types d'outils différents).
Ma deuxième liste "liste_spé" me donne les 220 détail des outils (un par référence donc). Or, il n'y a que 4 ou 5 détails différents.
J'aimerais que ma "liste_spé" regroupe et me donne que les 4 ou 5 détails différents, qui lorsque j'en sélectionne un, me donne toutes les références avec ce détail.
Je suis passé par "SELECT DISTINCT" car c'est la méthode que je connais, mais ça n'a pas l'air d'être la bonne.

J'ai inclus ID car c'est ma clé primaire. J'ai essayé sans, et la liste déroulante ne me sort aucun résultat ... J'en ai donc déduit qu'il est nécessaire.
Je pense que le SELECT DISTINCT s'applique au champ ID, qui n'a aucun doublon (car clé primaire). Or je ne sais pas comment régler ceci.
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
peux-tu faire un petit effort, et préciser le nom correct du formulaire dont il s'agit?
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
ta déduction n'est pas correcte.
tu as construit ta liste sur base d'une requête qui retourne deux colonnes, la seconde étant DETAIL.
tu dois maintenant construire la liste sur base d'une requête qui ne retourne qu'une seul colonne.
tu pourrais adapter la requête pour continuer à retourner deux colonnes, mais ce n'est pas très propre.
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020
>
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021

Voici la commande mise à jour et fonctionnelle dans le formulaire "f_chercher_type" :
SELECT DISTINCT [#tStock].DETAIL, [#tStock].DETAIL FROM [#tStock] WHERE ((([#tStock].TYPE)=[liste_outils])); 


Merci pour ce point !
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020

Maintenant j'aimerais que mon sous formulaire affiche le stock en fonction de ce que l'utilisateur saisi : si il ne sélectionne que le type d'outil, il doit afficher tous ceux en stock, si il sélectionne en plus le détail, le résultat doit s'affiner en conséquence.

Pour ce faire, j'ai définit ma requête "rAffichage" comme objet source de mon sous-formulaire. Dans la requête, j'ai essayé de remplir la ligne "critère" des champs "TYPE" et "DETAIL", mais je ne sais pas vraiment quoi remplir pour que cela fonctionne.
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
tu veux, au moment où le bouton "recherche" est cliqué, appliquer un filtre aux données du sous-formulaire. un filtre est, dans ce cas, parfaitement suffisant, inutile de chipoter dans la requête source du sous-formulaire.
Messages postés
16056
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
avant d'aller plus loin, je pense utile de mettre un peu d'ordre dans ta base:
- tu te prends les pieds dans de multiples objets qui se ressemblent, ont des noms similaires, et sont plus ou moins utilisés. par exemple, tu m'avais indiqué que le formulaire était #f_rechercher_type", et ce formulaire n'existe pas.
- tu utilises simultanément deux tables, #tStock et #tStock2, qui ont des structures et/ou des contenus différents.
- tu as une table tOutil, que tu utilises parfois, tandis que tu enregistres parfois le nom de l'outil, et pas son id, dans la table stock.

qu'en penses-tu?
Messages postés
49
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
17 novembre 2020

J'ai (enfin) réglé mon problème !

Dans mon formulaire #fRecherche_type j'ai donc :
- Une 1ere liste déroulante "liste_type"
- Une 2eme liste "liste_detail"
- Un sous formulaire "Resultats" (la table principale) pour afficher mes résultats

J'ai créer 3 requêtes différentes. Dans chacune, j'ai mis tous les champs de ma table source, mais j'ai remplis différents critères :
- 1ere : #rCritère_type ; Critère dans le champ type :
[Formulaire]!#fRecherche_type.[liste_type]

- 2eme : #rCritère_détail ; Critère dans le champ detail :
[Formulaire]!#fRecherche_type.[liste_detail]

- 3eme : #rCritère_type+detail ; Cette fois ci, j'ai mis les deux derniers critères dans la même requête.

Avec ceci, j'ai créer deux codes VBA :
- Un qui s'active après une selection dans liste_type :
Private Sub liste_type_Change()

If (IsNull(Forms![#fRecherche_type]![liste_detail])) Then 
Forms![#fRecherche_type]![Resultats].SourceObject = "Query.#rCritère_type"
Else
Forms![#fRecherche_type]![Resultats].SourceObject = "Query.#rCritère_type+detail"
End If
Forms![#fRecherche_type]![Resultats].Requery

End Sub

Si le champ "liste_detail" est vide et qu'on sélectionne quelque chose de "liste_type", on affiche tous les résultats correspondants, sinon, on affiche les résultats des type avec le détail correspondant.

- Un autre après une sélection dans liste_detail :
Private Sub liste_detail_Change()

If (IsNull(Forms![#fRecherche_type]![liste_type])) Then
    Forms![#fRecherche_type]![Resultats].SourceObject = "Query.#rCritère_detail"
    Else
    Forms![#fRecherche_type]![Resultats].SourceObject = "Query.#rCritère_type+detail"
End If
Forms![#fRecherche_type]![Resultats].Requery

End Sub

Si le champ "liste_type" est vide et qu'on sélectionne quelque chose de "liste_detail", on affiche tous les résultats correspondants, sinon, on affiche les résultats des type avec le détail correspondant.

Voila comment j'ai réaliser mon formulaire !