{Access} Filtrer ds SF selon champs Formulai

Fermé
rankynette - 10 févr. 2010 à 09:40
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 - 19 févr. 2010 à 14:12
Bonjour,

J'aimerai que mon sous-formulaire ne propose que les produits du fournisseur saisi dans le formulaire.

J'ai d'abord crée un formulaire de saisie de produit de fournisseur, avec un formulaire basé sur la table fournisseur et un sous formulaire basé sur une requete de la table "article fournisseurs" ou j'ai mis le critère [Formulaires]![FRM_ArticlesFournisseurs]![N°Fourn] pour le n° de fournisseur de la table article.

Jusqu'ici tout ce passe bien, quand je sélectionne un fournisseur dans ce formulaire, je lui attribue ses propres articles, et je peux visualiser ses articles.

Maintenant j'ai crée un formulaire de saisie de commandes basé sur une requête comprenant le n° du fournisseur de la table fournisseur et tous les éléments de la table commandeFourn. J'y ajoute un sous formulaire pour le détail de cette commande. Ce sous formulaire est basé sur une requête basée uniquement sur la table Ligne commande avec le total par ligne commande TOTAL: [QuantiteCommande]*[PrixArticle]
et j'ai mis les critères [Formulaires]![FRM_CommandesFournMat]![N°Imputation] et [Formulaires]![FRM_CommandesFournMat]![NumFournisseur]

J'ai mis en champs père et fils les champs "n°imputation" et "n°fournisseur"

Lorsque je suis en mode saisie, dans le sous formulaire apparait bien le N°imputation et le nom du fournisseur quand je les saisi dans le formulaire.

Mais j'aimerai que dans le champs "désignation" qui est une liste déroulante, access ne me propose que les produits du fournisseur saisie.

Si je change la requête du sous formulaire et que j'ajoute la table "article fournisseurs", et que j'insère le champs "prix" de cette table dans la requête, access n'affiche plus les champs fils dans le sous formulaire.

Que dois-je faire ? Mes relations sont bonnes et l'intégrité référencielle s'est bien faite pour toutes les tables reliées.

11 réponses

blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 09:54
Salut,

le champ père doit contenir le(s) nom(s) de(s) zone(s) dans laquelle(lesquelles) on récupère des informations
le champ fils doit contenir le(s) nom(s) des champs de tables récupéré(s) via champ père et utilisables dans le sous-formulaire

Est-ce le cas ?
0
Pour les champs père et fils, j'ai cliqué sur propriété du sous formulaires, dans l'onglet données, j'ai cliqué sur "..." et j'ai sélectionné les champs en commun du formulaire et du sous formulaire. Est-ce que c'est ça que tu veux dire ?
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 11:01
Je ne sais pas si c'est ce que j'ai voulu dire (je ne fais que trop rarement confiance aux trucs qui réfléchissent à ma place, je préfère taper moi-même ce que je veux)

Exemple :

- un formulaire principal avec une zone de liste déroulante qui s'appelle Liste_1 et qui renvoie num_fournisseur
- un sous-formulaire basé sur une requête qui comprend, entre autres champs, num_fournisseur

Si l'on veut que la saisie d'un numéro de fournisseur dans la liste déroulante du formulaire principal restreigne les données affichées par le sous-formulaire à la valeur choisie, alors on doit avoir Liste_1 comme champ père et num_fournisseur comme champ fils dans les propriétés du sous-formulaire.

Est-ce plus clair ?
0
Ma requête de sous formulaire reprend "Num Fournisseur" mais de la table article. Il faut que je rajoute donc à cette requête la table fournisseur et que je prenne plutot le champ "Num fournisseur" de la table fournisseur ? Dans le formulaire principal, le champ "Num Fournisseur" est celui de la table fournisseur.
En tout cas, merci de me répondre, ça me donne plusieurs idées.
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 11:23
En principe, on s'en fiche ;-)
Si ton modèle de données est bien fait, alors un "Num fournisseur" d'une table est identique à un "Num fournisseur" d'une autre table, puisqu'elles doivent être reliées entre elles.

Donne le nom de ce que tu as mis dans champ père et champ fils.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok, donc mes champs père et fils sont bons, mais ils ne s'affichent pas automatiquemet dans le sous formulaire. Le problème doit venir de la requête du sous formulaire, puisque c'est depuis que j'ai plusieurs tables dans cette requête. Je doit mal m'y prendre.
J'ai fait un imprim écran de mes relations, mais je ne sais pas comment je peux insérer cette image dans ce post. J'ai mis l'essentiel dans chaque table pour éviter de mettre 5 mêmes champs dans 2 tables. Les liaisons devraient renvoyer à la valeur souhaitée.
Ma requête de sous formulaire prend les éléments de 2 tables, et c'est là que n'apparaissent plus mes champs fils sur le sous formulaire...
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 12:19
Va sur www.cjoint.com, ensuite colle le lien...
0
Ok merci beaucoup, voici mes liaisons :

https://www.cjoint.com/?ckn7HrLvaA

Voici ma requête (j'ai du faire 2 imprim ecran, j'ai pas d'écran 16/9 lol)

https://www.cjoint.com/?ckoj6bvB76

https://www.cjoint.com/?ckokLjDXYN

J'espère que les liens fonctionnent...
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 14:28
Peux-tu copier la requête du sous-formulaire et l'exécuter en mode SQL ? C'est celle qui correspond à requête2.bmp ?
0
Heu... comment qu'on fait ?

La requête est sur 2 images car j'ai un petit écran, donc il faut mettre côte à côte les 2 images pour voir la totalité de ma requête.

Dis moi juste comment on copie la requête pour qu'elle s'affiche en SQL (j'espère que c'est pas compliqué... Je sais qu'on peut afficher la fenêtre de code où est écrit des choses avec "Sub" et "end Sub", est-ce que c'est là qu'il faut aller ?)
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
10 févr. 2010 à 15:23
j'avais pas saisi l'histoire de la requête multi-page :-)

pour asser en mode sql qaund tu es en mode création, il faut sélectionner SQL dans la barre d'outils qui apparaît sous le menu principal d'access, tout à fait à gauche : tu as un tableau, une équerre et le mot SQL dans la liste déroulante.

Une fois que tu es en mode SQL tu recopies cette requête, et tu en crées une nouvelle (mais vide), tu passes en mode SQL et tu recopies le texte de la requête initiale, ensuite, tu peux le bidouiller (notamment en forçant les valeurs qui sont normalement remplies par des zones de formulaire) pour voir si tu arrives à sortir des résultats cohérents et à quel moment plus rien n'est renvoyé.
0
Bonjour,

Apparement il y a eu un problème la semaine dernière, je ne pouvez plus répondre sur le forum...

Pour ma requête en langage SQL ça donne ceci :

SELECT TBL_LigneCommandeMateriaux.N°LigneCommande, TBL_LigneCommandeMateriaux.N°Imputation, TableArticles.N°Fournisseur, TableArticles.N°Famille, TableArticles.RefArticle, TBL_LigneCommandeMateriaux.RefArticle, TBL_LigneCommandeMateriaux.QuantiteCommande, TableArticles.Prix, TBL_LigneCommandeMateriaux.PrixArticle, [QuantiteCommande]*[PrixArticle] AS TOTAL
FROM TableArticles INNER JOIN TBL_LigneCommandeMateriaux ON TableArticles.RefArticle = TBL_LigneCommandeMateriaux.RefArticle
WHERE (((TBL_LigneCommandeMateriaux.N°Imputation)=[Formulaires]![FRM_CommandesFournMat]![N°Imputation]) AND ((TableArticles.N°Fournisseur)=[Formulaires]![FRM_CommandesFournMat]![NumFournisseur]));

Comment puis-je bidouiller en forçant les valeurs ? Il faut que je change quelque chose dans ce qui est écrit dans le SQL ?

Merci d'avance
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
16 févr. 2010 à 10:07
Oui, dans ton where, tu remplaces les valeurs que tu lis habituellement dans ton formulaire par une valeur significative, comme dans cet exemple :

WHERE (((TBL_LigneCommandeMateriaux.N°Imputation)= 12) AND ((TableArticles.N°Fournisseur)= 32)); 

Comme ça, tu pourras voir si ta requête marche normalement.
0
Bonjour,

Merci pour l'explication, j'ai donc essayé en mode SQL de mettre les chiffres du premier enregistrement, puis du 2ème enregistrement, et pour ces 2 essais, Access ecrit "type de données incompatible dans l'expression du critère"

Donc le problème viendrait du critère rentré dans la requête... mais quel est ce problème ? qu'est-ce qui serait incompatible ?

Si, au lieu de mettre des chiffres, je met des lettres, par exemple, le fournisseur qui a pour n° 83 s'appelle "SUPERFOURNISSEUR", donc au lieu de mettre 83 dans mon test, j'écrit "SUPERFOURNISSEUR", Access me demande d'entrer la valeur du paramètre "SUPERFOURNISSEUR", je tape alors 83, et Access écrit "Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée. Par exemple, une expression numérique peut contenir des éléments trop compliqués. Essayez de la simplifier en en affectant des parties à des variables."
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291 > rankynette
19 févr. 2010 à 09:28
Colle le texte de la requête...
0
Je colle le texte de ma requête à quel endroit ?

Voici le texte de ma requête :

SELECT TBL_LigneCommandeMateriaux.N°LigneCommande, TBL_LigneCommandeMateriaux.N°Imputation, TableArticles.N°Fournisseur, TableArticles.N°Famille, TableArticles.RefArticle, TBL_LigneCommandeMateriaux.RefArticle, TBL_LigneCommandeMateriaux.QuantiteCommande, TableArticles.Prix, TBL_LigneCommandeMateriaux.PrixArticle, [QuantiteCommande]*[PrixArticle] AS TOTAL
FROM TableArticles INNER JOIN TBL_LigneCommandeMateriaux ON TableArticles.RefArticle = TBL_LigneCommandeMateriaux.RefArticle
WHERE (((TBL_LigneCommandeMateriaux.N°Imputation)=[Formulaires]![F­RM_CommandesFournMat]![N°Imputation]) AND ((TableArticles.N°Fournisseur)=[Formulaires]![FRM_CommandesF­ournMat]![NumFournisseur]));
0
blux Messages postés 26073 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
19 févr. 2010 à 14:12
non, je veux celle où tu as mis des nombres au lieu des références aux champs du formulaire...
0