Lié une requête aux entrées d'un formulaire [Résolu]

Signaler
-
 Logane -
Bonjour,

Je suis sur Access 2013 et j'ai un soucis pour récupérer les infos d'un formulaire pour lancer une requête.
Je m'explique :

Je souhaite créer un formulaire d'interrogation de la base. La requête doit donc ressortir des résultats en fonction des infos entrées dans le formulaire associé.
Donc je dois vérifier si chaque champs est rempli ou non, puis activer la sélection des résultats en fonction de ce qui y a été entré si il n'est pas vide.

J'obtiens ce code SQL (aucune idée si le IIF est l'opérateur le plus indiqué pour faire ça...)

SELECT T_CONTENU.auteur_contenu, T_CONTENU.jeu_contenu, T_CONTENU.qual_contenu FROM T_CONTENU
WHERE
IIF([Formulaires]![Form1]![auteur_contenu]=NON NULL, (T_CONTENU.auteur_contenu)=([Formulaires]![Form1]![auteur_contenu]), (T_CONTENU.auteur_contenu))
AND
IIF([Formulaires]![Form1]![jeu_contenu]=NON NULL, (T_CONTENU.jeu_contenu)=([Formulaires]![Form1]![jeu_contenu]), (T_CONTENU.jeu_contenu))
AND
((T_CONTENU.qual_contenu)=([Formulaires]![Form1]![qual_contenu]));

ce qui est fou, c'est que ça me parait pourtant tout simple comme opération, n'afficher que certaines lignes d'une table en fonction des entrées d'un formulaire... Mais impossible d'effectuer cette opération sans passer par de l'SQL d'après mes recherches...

Est-ce que quelqu'un peut m'aider ?

13 réponses

Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
467
bonjour, quel est ton soucis?
la requête ne donne pas le résultat attendu?
je n'utilise jamais le IIF dans la clause WHERE, je suggère plutôt:
([Formulaires]![Form1]![auteur_contenu] = ""
OR T_CONTENU.auteur_contenu=[Formulaires]![Form1]![auteur_contenu])
Bonjour,
Merci pour votre réponse !
Mon soucis est qu'Access m'indique une erreur de syntaxe sans plus d'infos... Et je n'arrive pas à savoir où celle-ci se situe

Je vais essayer votre solution et je reviens vers vous !
Merci :)
Ca n'a pas l'air de fonctionner non plus... La requête ne me renvoie rien...
J'ai essayé en suivant un tuto youtube de "formulaire de recherche multicritères" mais pour l'instant rien ne marche !
Merci d'essayer de m'aider en tout cas ^^
yg_be
Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
467 > Logane
quelle est la requête essayée?
bonjour
tu peux faire ton formulaire sur la base de ta requete a la place d'une table
Bonjour,
Qu'est-ce que vous voulez dire par là ?
Merci d'avance
bonjour
lors de la creation du formulaire tu peux le faire a partir d'une table ou d'une requete
Bonjour à tous, en travaillant avec WHERE, en basant le formulaire sur la requête directement, et avec quelques recherches supplémentaires, j'ai pu avancer un peu !

J'arrive maintenant à faire une recherche en fonction des entrées du formulaire. Les champs sont pris en compte que s'ils sont remplis. Merci pour votre aide !

Cependant, j'ai un autre soucis : mes entrées comportent plusieurs mots clés, rangé dans des tables T_MOTCLE1 et T_MOTCLE2.
Dans mon formulaire j'ai un champ "mot clé" et je souhaite que les entrées comportant le mot clé choisi ressortent, qu'elles soient rangés en MOTCLE1 ou en MOTCLE2.

Voici un de mes codes pour essayer de mettre ça en place :
WHERE (((T_AUTEUR.num_auteur) Like "*" & [Formulaires]![F_RMC]![choix_auteur] & "*") AND ((T_CATEGORIE.num_categorie) Like "*" & [Formulaires]![F_RMC]![choix_categorie] & "*") AND ((T_JEU.num_jeu) Like "*" & [Formulaires]![F_RMC]![choix_jeu] & "*") AND ((T_MOTCLE1.num_motcle1) Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*" Or (T_MOTCLE1.num_motcle1) Like "*") AND ((T_MOTCLE2.nom_motcle2) Like "*" Or (T_MOTCLE2.nom_motcle2) Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*"));


Sauf que forcément, il m'affiche toutes les entrées, peu importe leurs mots clés maintenant... Je n'arrive pas à traduire en SQL : toutes les entrées qui ont le bon mot clé 1, peu importe le mot clé 2 ET toutes les entrées qui ont le bon mot clé 2, peu importe le mot clé 1...

Pour l'instant je ne travaille qu'avec deux tables mot-clé, mais à terme il y en aura six...

Auriez-vous une idée là-dessus ? Je me perds dans l'algorithmie là !
J'ai également testé ce deuxième code, qui ne fonctionne pas non plus :(

WHERE ((((T_AUTEUR.num_auteur) Like "*" & [Formulaires]![F_RMC]![choix_auteur] & "*") AND ((T_CATEGORIE.num_categorie) Like "*" & [Formulaires]![F_RMC]![choix_categorie] & "*") AND ((T_JEU.num_jeu) Like "*" & [Formulaires]![F_RMC]![choix_jeu] & "*") AND ((T_MOTCLE1.num_motcle1) Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*") AND ((T_MOTCLE2.num_motcle2) Like "*")) AND (((T_AUTEUR.num_auteur) Like "*" & [Formulaires]![F_RMC]![choix_auteur] & "*") AND ((T_CATEGORIE.num_categorie) Like "*" & [Formulaires]![F_RMC]![choix_categorie] & "*") AND ((T_JEU.num_jeu) Like "*" & [Formulaires]![F_RMC]![choix_jeu] & "*") AND ((T_MOTCLE2.num_motcle2) Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*") AND ((T_MOTCLE1.num_motcle1) Like "*")));
yg_be
Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
467 > Logane
"qui ne fonctionne pas non plus": cela donne quoi?

ce serait bien que tu nous montres deux requêtes qui fonctionnent, une qui retourne toutes les entrées qui ont le bon mot clé 1, l'autre qui retourne toutes les entrées qui ont le bon mot clé 2.

sinon, c'est difficile de t'aider à combiner deux requêtes que tu ne nous montre pas.

merci de bien passer à la ligne et d'indenter les lignes pour en faciliter la lecture. tu as également beaucoup trop de parenthèses, cela rend le tout moins lisible.
exemple:
WHERE T_AUTEUR.num_auteur Like "*" & [Formulaires]![F_RMC]![choix_auteur] & "*" 
AND T_CATEGORIE.num_categorie Like "*" & [Formulaires]![F_RMC]![choix_categorie] & "*"
 AND T_JEU.num_jeu Like "*" & [Formulaires]![F_RMC]![choix_jeu] & "*" 
AND (T_MOTCLE1.num_motcle1 Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*" Or T_MOTCLE1.num_motcle1 Like "*") 
AND (T_MOTCLE2.nom_motcle2 Like "*" Or T_MOTCLE2.nom_motcle2 Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*");
yg_be
Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
467
Avant de faire la requête SQL, il faut bien exprimer ce que tu recherches:
tu recherches "les entrées comportant le mot clé choisi, qu'elles soient rangés en MOTCLE1 ou en MOTCLE2"
ensuite, tu écris:
"toutes les entrées qui ont le bon mot clé 1, peu importe le mot clé 2 ET toutes les entrées qui ont le bon mot clé 2, peu importe le mot clé 1..."
en écrivant cela, tu compliques beaucoup. ce serait plus simple d'écrire:
"toutes les entrées qui ont le bon mot clé 1 ET toutes les entrées qui ont le bon mot clé 2"
ce qui devient:
"toutes les entrées qui ont le bon mot clé 1 OU qui ont le bon mot clé 2"
et ensuite tu écris ta requête.
Merci beaucoup à toi pour ta réponse ! J'avais pourtant déjà essayé avec le OU, mais la requête, trouvant des résultats en mot clé 1, n'allaient pas plus loin... Je reposte ci-dessous ma solution au cas où d'autres passeraient par là à la recherche d'une réponse !

WHERE (
		(
			(T_AUTEUR.num_auteur) 
			Like "*" & [Formulaires]![F_RMC]![choix_auteur] & "*") 
		AND (
			(T_CATEGORIE.num_categorie) 
			Like "*" & [Formulaires]![F_RMC]![choix_categorie] & "*") 
		AND (
			(T_JEU.num_jeu) 
			Like "*" & [Formulaires]![F_RMC]![choix_jeu] & "*") 
		AND ((
			(T_MOTCLE1.num_motcle1) 
			Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*") 
		OR (
			(T_MOTCLE2.num_motcle2) 
			Like "*" & [Formulaires]![F_RMC]![choix_motcle] & "*"))
	);


Il y a peut-être encore trop de parenthèses, mais beaucoup sont générées automatiquement par access, et j'avoue ne pas trop oser en supprimer de peur que ça ne lui plaise pas ! ^^'

Encore merci à toi pour ton aide (et aux autres aussi ), vous m'avez sauvé la vie (oui rien que ça !) <3