Access: requête sélection et/ou
Résolu
Ioio
-
KantinT Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
KantinT Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila ma situation:
J'ai une base de données sur des parcelles agricoles, des communes et des pratiques phytosanitaires (plusieurs tables reliés entre elles). Je souhaite pouvoir faire des recherches à l'aide d'un formulaire et d'une requête sélection afin d'avoir de pouvoir avoir toutes les informations sur certain critères qui m'intéresse: je veux avoir toute les parcelles et les pratiques phyto qui y sont associé sur une commune, ou encore je veux toute toute les parcelles sur une commune déterminée qui on une pratique phyto déterminée par exemple.
Je me suis donc fait mon formulaire avec mes 3 listes déroulantes: parcelles, communes, et pratiques phytos.
On en vient à mon problème:
Quand je créer ma requête j'ai que 2 possibilités:
-soit je fais des "et" et dans ce cas là il faux absolument que je remplisse chacun des champs de mon formulaire pour avoir des résultats,
-soit je fais des "ou" et dans ce cas là il me sort les bons résultats quand je fais une recherche sur un seul champs, mais quand je suis sur plusieurs champs il me sort tout les résultats pour les 2 champs et pas seulement les résultats correspondant au 2 champs en même temps.
Il me faudrait donc trouver un moyen de faire une sorte de "et facultatif" mais j'ai beau fouiller le net, je ne trouve aucunes solutions.
Voila ma situation:
J'ai une base de données sur des parcelles agricoles, des communes et des pratiques phytosanitaires (plusieurs tables reliés entre elles). Je souhaite pouvoir faire des recherches à l'aide d'un formulaire et d'une requête sélection afin d'avoir de pouvoir avoir toutes les informations sur certain critères qui m'intéresse: je veux avoir toute les parcelles et les pratiques phyto qui y sont associé sur une commune, ou encore je veux toute toute les parcelles sur une commune déterminée qui on une pratique phyto déterminée par exemple.
Je me suis donc fait mon formulaire avec mes 3 listes déroulantes: parcelles, communes, et pratiques phytos.
On en vient à mon problème:
Quand je créer ma requête j'ai que 2 possibilités:
-soit je fais des "et" et dans ce cas là il faux absolument que je remplisse chacun des champs de mon formulaire pour avoir des résultats,
-soit je fais des "ou" et dans ce cas là il me sort les bons résultats quand je fais une recherche sur un seul champs, mais quand je suis sur plusieurs champs il me sort tout les résultats pour les 2 champs et pas seulement les résultats correspondant au 2 champs en même temps.
Il me faudrait donc trouver un moyen de faire une sorte de "et facultatif" mais j'ai beau fouiller le net, je ne trouve aucunes solutions.
A voir également:
- Access: requête sélection et/ou
- Acer quick access - Forum Logiciels
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit - Forum Access
- Exemple base de données Access de gestion ✓ - Forum Logiciels
- Quick acces ✓ - Forum Windows
13 réponses
Salut.
En cherchant autre chose j'ai trouvé ça:
http://access.mvps.org/accessfr/queries/qry0001.htm
"Qu'est-ce que je devrais faire pour que, laissant ce contrôle en blanc, tous les enregistrements soient retournés par la requête?
(A) Changer le critère de la requête pour
Forms!myForm!myContrl OR forms!myForm!myControl Is Null
"
Il me semble que c'est ce que tu voulais faire.
Je ne l'ai pas testé par contre.
Dit moi si ça marche et si tu as trouvé une solution met résolu.
Kantin
En cherchant autre chose j'ai trouvé ça:
http://access.mvps.org/accessfr/queries/qry0001.htm
"Qu'est-ce que je devrais faire pour que, laissant ce contrôle en blanc, tous les enregistrements soient retournés par la requête?
(A) Changer le critère de la requête pour
Forms!myForm!myContrl OR forms!myForm!myControl Is Null
"
Il me semble que c'est ce que tu voulais faire.
Je ne l'ai pas testé par contre.
Dit moi si ça marche et si tu as trouvé une solution met résolu.
Kantin
J'ai un peut du mal à voir ce que tu as besoin il faudrait que tu montre ton fichier ou que tu face un exemple concret, enfin en tout cas pour moi lol désolé :s
Alors un exemple concret:
Mettons j'ai les informations suivante dans mes tables:
table parcelle:
IDparcelle
nom parcelle
surface parcelle
IDcommune
IDpratique_phyto
...
table commune
IDcommune
nom commune
...
table pratique phyto:
IDpratique_phyto
type de pratique
Mes 3 tables sont reliés avec les liaisons que vous devinez.
Je veux que ma requêtes puisse me sortir toutes les informations concernant ces tables à l'aide de mon formulaire qui permet de sélectionner chacun des 3 champs suivant IDcommune, IDparcelle, IDpratique_phyto. Jusque là tout va bien.
Mon problème c'est que ma requête me sort pas les résultats que je souhaite. Je voudrais quelles me sorte seulement les résultats qui corresponde au champs qui ont été renseignés dans mon formulaire (la fonction "ou" de la requête sélection ne satisfait pas ce point là) et cela quelle que soit le nombre de champs sur les 3 qui ont été renseignés (la fonction "et" de la requête ne satisfait pas ce point là).
Je voudrais donc savoir le moyen de faire cela =)
Mettons j'ai les informations suivante dans mes tables:
table parcelle:
IDparcelle
nom parcelle
surface parcelle
IDcommune
IDpratique_phyto
...
table commune
IDcommune
nom commune
...
table pratique phyto:
IDpratique_phyto
type de pratique
Mes 3 tables sont reliés avec les liaisons que vous devinez.
Je veux que ma requêtes puisse me sortir toutes les informations concernant ces tables à l'aide de mon formulaire qui permet de sélectionner chacun des 3 champs suivant IDcommune, IDparcelle, IDpratique_phyto. Jusque là tout va bien.
Mon problème c'est que ma requête me sort pas les résultats que je souhaite. Je voudrais quelles me sorte seulement les résultats qui corresponde au champs qui ont été renseignés dans mon formulaire (la fonction "ou" de la requête sélection ne satisfait pas ce point là) et cela quelle que soit le nombre de champs sur les 3 qui ont été renseignés (la fonction "et" de la requête ne satisfait pas ce point là).
Je voudrais donc savoir le moyen de faire cela =)
Et bien la il faudrait tout simplement utiliser access lol ou faire un tableau croisé dynamique à la limite.
Désolé la comme ca j'ai pas trop de solution. La fonction "ou" permet de mettre autant de valeur qu'on le souhaite.
Voir si il faut utiliser la fonction si. En disant que si la donné "x" n'est pas présent alors....
Désolé la comme ca j'ai pas trop de solution. La fonction "ou" permet de mettre autant de valeur qu'on le souhaite.
Voir si il faut utiliser la fonction si. En disant que si la donné "x" n'est pas présent alors....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok merci. Donc mettons on travaille juste sur les communes et les pratiques phyto
Tu veux dire mettre un "et" entre les deux entrés de cette manière:
HAVING (([commune].[IDcommune])=[Formulaires]![f_parcelle_r1]![l_commune]) And (([pratique_phyto].[IDpratique_phyto])=[Formulaires]![f_parcelle_r1]![l_pratique]);
et ensuite ajouté un close si l_commune=0 alors or ([pratique_phyto].[IDpratique_phyto])=[Formulaires]![f_parcelle_r1]![l_pratique]
En version sql "complet" ça donnerait quoi?
Tu veux dire mettre un "et" entre les deux entrés de cette manière:
HAVING (([commune].[IDcommune])=[Formulaires]![f_parcelle_r1]![l_commune]) And (([pratique_phyto].[IDpratique_phyto])=[Formulaires]![f_parcelle_r1]![l_pratique]);
et ensuite ajouté un close si l_commune=0 alors or ([pratique_phyto].[IDpratique_phyto])=[Formulaires]![f_parcelle_r1]![l_pratique]
En version sql "complet" ça donnerait quoi?
c'est quelque chose comme ca. en sql sincèrement la comme ca je sais pas du tout te dire.
Mais tes tables elles sont liées, c'est du SGBDR, c'est quand même plus simple à faire sur Access. La sur Excel je te dis ca par ce que ca me parait logique, après en application je vois pas comme ca. On a un peut chacun notre manière de fonctionner, peut-être un tableau croisé dynamique aurait été carrément plus simple ou même un tableau avec que des listes déroulante pour chaque description en disant je veut que id commune soit égal à X et pratique = x etc.
Dans le tableau à menu déroulant, tu peut faire ca, c'est assez simple, après je sais pas si c'est vraiment adapté pour toi
Désolé
Mais tes tables elles sont liées, c'est du SGBDR, c'est quand même plus simple à faire sur Access. La sur Excel je te dis ca par ce que ca me parait logique, après en application je vois pas comme ca. On a un peut chacun notre manière de fonctionner, peut-être un tableau croisé dynamique aurait été carrément plus simple ou même un tableau avec que des listes déroulante pour chaque description en disant je veut que id commune soit égal à X et pratique = x etc.
Dans le tableau à menu déroulant, tu peut faire ca, c'est assez simple, après je sais pas si c'est vraiment adapté pour toi
Désolé
euh oui je travail sur Access pas sur Excel ^^
Pour le "si... alors" je vois pas comment le faire dans ma requête.
Je vais tester le système des tableaux croisé dynamique que je connais pas du tout. Je te tiens au courant merci =)
Pour le "si... alors" je vois pas comment le faire dans ma requête.
Je vais tester le système des tableaux croisé dynamique que je connais pas du tout. Je te tiens au courant merci =)
Pour les requête, logiquement, tu n'est pas forcement obligé de passer en VBA non? tu n'as pas un système d'aide? il y a normalement la possibilité de te faire une requête avec l'assistance, ca devrait être plus simple pour ce que tu fais.
J'arrive peut être après la bataille.
Mais si j'ai bien compris ton problème et la base qui vas avec;
Tu devrais pouvoir en mode création de ta requête renseigner en critère sur tes champs ID:
Comme [Formulaires]![nom_de_ton_formulaire]![nom_liste_ID].
Et normalement si tu renseigne rien dans ta liste dans ton formulaire la requête vas prendre tous les enregistrements (en tout cas moi ça marche).
En espérant avoir pu t'aider.
KantinT
Mais si j'ai bien compris ton problème et la base qui vas avec;
Tu devrais pouvoir en mode création de ta requête renseigner en critère sur tes champs ID:
Comme [Formulaires]![nom_de_ton_formulaire]![nom_liste_ID].
Et normalement si tu renseigne rien dans ta liste dans ton formulaire la requête vas prendre tous les enregistrements (en tout cas moi ça marche).
En espérant avoir pu t'aider.
KantinT
Non tu n'arrives pas après la bagarre parce que je n'ai toujours pas réussit à trouver la solution idéale.
En fait je fait comme tu dis, je met ce critère sur un champs de ma requête:
[Formulaires]![nom_de_ton_formulaire]![nom_liste_ID1]
et je met:
[Formulaires]![nom_de_ton_formulaire]![nom_liste_ID2]
Sur un autre champs où peut s'effectuer la sélection.
Malheureusement pour moi
- soit je laisse ces 2 critère sur la même ligne, et cela équivaut à la fonction "et". Et pour ce cas là si je ne remplis pas la 2 critères dans mon formulaire, ma requête ne me sort aucun résultat.
-soit je le met sur une ligne différente, et là ça équivaut à un "ou" entre les 2 sélection. Et dans ce cas là lorsque je remplis les 2 critères il me sort la totalité des résultats pour chacun des critères et non seulement les résultats correspondant au 2.
Donc si tu me dis que de ton coté lorsque "tu renseigne rien dans ta liste dans ton formulaire la requête vas prendre tous les enregistrements" ça veut peut être dire que j'ai un problème dans la structure de ma requête.... Je ne sais pas... Je vais peut être essayer de changer de version d'enregistrement d'access
Je pense que ce que je vais faire c'est un formulaire à double affichage avec ma requête, où les personnes pourront appliquer des filtres directement.
En fait je fait comme tu dis, je met ce critère sur un champs de ma requête:
[Formulaires]![nom_de_ton_formulaire]![nom_liste_ID1]
et je met:
[Formulaires]![nom_de_ton_formulaire]![nom_liste_ID2]
Sur un autre champs où peut s'effectuer la sélection.
Malheureusement pour moi
- soit je laisse ces 2 critère sur la même ligne, et cela équivaut à la fonction "et". Et pour ce cas là si je ne remplis pas la 2 critères dans mon formulaire, ma requête ne me sort aucun résultat.
-soit je le met sur une ligne différente, et là ça équivaut à un "ou" entre les 2 sélection. Et dans ce cas là lorsque je remplis les 2 critères il me sort la totalité des résultats pour chacun des critères et non seulement les résultats correspondant au 2.
Donc si tu me dis que de ton coté lorsque "tu renseigne rien dans ta liste dans ton formulaire la requête vas prendre tous les enregistrements" ça veut peut être dire que j'ai un problème dans la structure de ma requête.... Je ne sais pas... Je vais peut être essayer de changer de version d'enregistrement d'access
Je pense que ce que je vais faire c'est un formulaire à double affichage avec ma requête, où les personnes pourront appliquer des filtres directement.
J'ai parlé un peu vite parce que en pratique, ça marche très bien pour un ou deux critères, mais au dessus de 3 ça commence vraiment à être compliqué de créer la requête (du fait du nombre de possibilité que cela engendre), et celle ci devient d'autant plus longue à s'exécuter.
Par exemple sur 3 critère ça donne:
critère1 et critère2 et critère3 ou
critère1 et critère2 et critère3 est null ou
critère1 et critère2 est null et critère3 ou
critère1 et critère2 est null et critère3 est null ou
critère1 est null et critère2 et critère3 ou
critère1 est null et critère2 et critère3 est null ou
critère1 est null et critère2 est null et critère3 ou
critère1 est null et critère2 est null et critère3 est null
soit 2^3 lignes à remplir
Bref vous voyez un peu le bordel, et je voulais effectué une requête sur 12 critères soit 4096 lignes...
Donc ça marche mais si quelqu'un à quelque chose de moins lourd ça m'arrangerait ^^
Par exemple sur 3 critère ça donne:
critère1 et critère2 et critère3 ou
critère1 et critère2 et critère3 est null ou
critère1 et critère2 est null et critère3 ou
critère1 et critère2 est null et critère3 est null ou
critère1 est null et critère2 et critère3 ou
critère1 est null et critère2 et critère3 est null ou
critère1 est null et critère2 est null et critère3 ou
critère1 est null et critère2 est null et critère3 est null
soit 2^3 lignes à remplir
Bref vous voyez un peu le bordel, et je voulais effectué une requête sur 12 critères soit 4096 lignes...
Donc ça marche mais si quelqu'un à quelque chose de moins lourd ça m'arrangerait ^^
Correction de mon message précédent, en fait il y a plus simple que de remplir autant de lignes. Il suffit d'utiliser les parenthèses...
Exemple:
(critère1=formulaire!commande_critère1 ou formulaire!commande_critère1 is null) et (critère2=formulaire!commande_critère2 ou formulaire!commande_critère2 is null) et ...
Bref c'est bon
Exemple:
(critère1=formulaire!commande_critère1 ou formulaire!commande_critère1 is null) et (critère2=formulaire!commande_critère2 ou formulaire!commande_critère2 is null) et ...
Bref c'est bon