Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de liste deroulante restreinte

6 réponses
Avatar
Thorliaf
Bonjour =E0 tous et bonne ann=E9e,
Malgr=E9s de nombreuses recherches sur differents sites et forums, je ne
trouve pas la solution =E0 mon probleme ...

Ma base de donn=E9e contient (entre autre) un formulaire devis dans
lequel se trouve un sous-formulaire mat=E9riaux.
J'ai restreint le choix de mon 2eme champ au choix fait dans le
premier.

Exemple :
Type materiaux : enduits, peinture, quincaillerie
Materiaux : peinture bleu, peinture rouge, sac platre, vis, clou

lorsque j'ouvre mon sous-formulaire tout seul, pas de probleme : la
liste mat=E9riaux est bien restreinte ... pas de soucis. Mais lorsque
j'essaie de faire la meme chose via mon formulaire devis, j'arrive
bien =E0 choisir mon type mais lorsque j'essaie de choisir le materiaux
j'ai un message :

Entrez une valeur de parametre !
Formulaires!D=E9tail_Devis Materiaux Sous-formulaire!N=B0_Cat=E9gorie

j'ai essay=E9 differentes maniere de construire ces liaisons mais a
chaque fois je retombe sur le meme probleme ...
ca fait 3 jours que je coince ... je commence a desesperer :(
Merci d'avance pour vos renseignements

6 réponses

Avatar
Gloops
Thorliaf a écrit, le 27/01/2008 20:17 :
Entrez une valeur de parametre !
Formulaires!Détail_Devis Materiaux Sous-formulaire!N°_Catégorie



Salut,

Là, je vois quatre fautes :

- des espaces dans les noms des formulaires
- un caractère ° (degré) dans un nom de formulaire (ou de champ ?)
- pas de séparateur entre le nom du formulaire et celui du sous-formula ire
- emploi d'un mot réservé (Détail) dans un nom de formulaire

La difficulté, c'est que tu cherches à laisser tout faire à celui q ui
répond : déterminer le nom du formulaire, celui du sous-formulaire,
celui du champ de liaison ... et qu'il y a de fortes chances que ça ne
tombe pas comme ce que tu as prévu, ce qui fait que tu vas te trouver
déconcerté par la non-concordance des éléments avec ton propre ex emple.
En effet, si ceci ne devait pas te poser de problème, je pense que tu
t'en serais sorti avec un exemple trouvé par exemple sur Internet.

Alors je te propose d'expliquer clairement ce que tu veux faire.
Dans un premier temps, tu décris brièvement le but de ta démarche ( je
devine, mais c'est mieux que ce soit toi qui le dises.)

Ensuite, puisque semble-t-il il y a un formulaire et un sous-formulaire :
(et profite-z-en pour donner des noms ne comportant que des lettres
-peut-être un chiffre ou deux mais pas au début-, pas de caractère
accentué, n'incluant pas les mots Form, Formulaire, Detail, Section,
SousForm, SubForm)

Nom du formulaire :
Requête (ou table) sur laquelle est basé le formulaire :
Champ de la requête du formulaire sur lequel est basée la liaison ave c
le sous-formulaire :

Nom du sous-formulaire :
Requête (ou table) sur laquelle est basé le sous-formulaire :
Champ de la requête du sous-formulaire sur lequel est basée la liaiso n
avec le formulaire :

Ensuite, précise ce que tu veux faire : où tu veux mettre une liste
(formulaire ou sous-formulaire), doit-elle être restreinte, à quoi ?

Avec ça, on pourra déjà mieux t'aider.

ça aiderait bien aussi que décrives les deux requêtes (formulaire,
sous-formulaire), c'est-à-dire que tu indiques les noms des champs, les
types, les tailles. Il y a des champs pour lesquels c'est plus important
que pour d'autres qu'on sache ça, d'ailleurs, notamment les clefs
(internes, externes), les champs de liaison, et les champs que tu veux
faire apparaître dans la liste.

Avant de commencer, précise si tu as du mal à faire la distinction en tre
la requête sur laquelle est basé un formulaire, et la requête sur
laquelle est basée une liste se trouvant sur ce formulaire.

Si la notion de liaison entre un formulaire et son sous-formulaire te
pose problème, aussi, il y a lieu de le préciser.

Il y a une maladresse dans ma démarche, en ce sens qu'elle a tendance à
brûler des étapes, pour anticiper une impatience que je devine. En
effet, je te demande de répondre à des questions sans savoir si tu le s
comprends. Pour simplifier, on va commencer par supposer que tu n'as pas
compris de travers, et que donc soit tu as compris, soit tu n'as pas
compris. Si il s'avère ensuite que ça continue à coincer, c'est qu' il
faudra revenir en arrière.

Bon courage pour ce travail préliminaire, de clarification.

Avatar
Thorliaf
Certes, certes ... en effet je n'étais pas très clair :)
mais plutot que de long discours hazardeux, j'ai fais une copie de la
partie de ma base qui me pose probleme ...

http://cjoint.com/?bCaHgbwMrZ

Ce que je voulais dire :
Si j'ouvre le sous-formulaire "Détail_Devis matériaux Sous-formulaire"
on restreint le choix de "N°_Materiaux" en fonction du choix de "N
°_Catégorie" ...
pas de probleme ça marche !!
Par contre si j'ouvre le formulaire "Devis", là ça ne marche plus ...
j'obtiens la fameuse boite de dialogue

voili,voilou ... euuuh j'ai été suffisemment clair ? :)
Avatar
Ciol
Bonsoir,
Je viens de me rendre compte un lisant votre post que j'essaye de faire
exactement la même chose que vous, sans succès.

Avez-vous trouvé une solution ?
Merci pour votre aide,

"Thorliaf" wrote:

Certes, certes ... en effet je n'étais pas très clair :)
mais plutot que de long discours hazardeux, j'ai fais une copie de la
partie de ma base qui me pose probleme ...

http://cjoint.com/?bCaHgbwMrZ

Ce que je voulais dire :
Si j'ouvre le sous-formulaire "Détail_Devis matériaux Sous-formulaire"
on restreint le choix de "N°_Materiaux" en fonction du choix de "N
°_Catégorie" ...
pas de probleme ça marche !!
Par contre si j'ouvre le formulaire "Devis", là ça ne marche plus ...
j'obtiens la fameuse boite de dialogue

voili,voilou ... euuuh j'ai été suffisemment clair ? :)



Avatar
Ciol
Bonjour,
La solution se trouve dans le post "Liste dans sous-formulaire".

HTH
+

"Ciol" a écrit dans le message de news:

Bonsoir,
Je viens de me rendre compte un lisant votre post que j'essaye de faire
exactement la même chose que vous, sans succès.

Avez-vous trouvé une solution ?
Merci pour votre aide,

"Thorliaf" wrote:

Certes, certes ... en effet je n'étais pas très clair :)
mais plutot que de long discours hazardeux, j'ai fais une copie de la
partie de ma base qui me pose probleme ...

http://cjoint.com/?bCaHgbwMrZ

Ce que je voulais dire :
Si j'ouvre le sous-formulaire "Détail_Devis matériaux Sous-formulaire"
on restreint le choix de "N°_Materiaux" en fonction du choix de "N
°_Catégorie" ...
pas de probleme ça marche !!
Par contre si j'ouvre le formulaire "Devis", là ça ne marche plus ...
j'obtiens la fameuse boite de dialogue

voili,voilou ... euuuh j'ai été suffisemment clair ? :)





Avatar
Gloops
Thorliaf a écrit, le 28/01/2008 00:53 :
Certes, certes ... en effet je n'étais pas très clair :)
mais plutot que de long discours hazardeux, j'ai fais une copie de la
partie de ma base qui me pose probleme ...

http://cjoint.com/?bCaHgbwMrZ


Bonsoir,

Cette procédure allonge les délais, puisqu'il faut que je puisse
consacrer une heure au problème pendant la journée de travail, alors que
j'y suis en principe payé à autre chose ;)

Je ne comprends pas comment tu conçois ton formulaire devis, avec une
liste N°_Materiaux basée sur une requête (Materiaux Requête1), do nt un
champ ([Categorie_Materiaux].Categorie_Materiaux) est lié à un champ du
formulaire "Détail_Devis Materiaux Sous-formulaire" (N°_Catégorie), et
tu pensais en plus que j'allais deviner que "Détail_Devis Materiaux
Sous-formulaire" était le nom d'un formulaire.

Pour confirmer la première partie de ce que je viens de dire, voici le
code de la requête [Materiaux Requête1] :

SELECT Materiaux.Designation_Materiaux, [Categorie
Materiaux].Categorie_Materiaux
FROM [Categorie Materiaux] INNER JOIN Materiaux ON [Categorie
Materiaux].N°_Categorie_Materiaux = Materiaux.Categorie_Materiaux
WHERE ((([Categorie
Materiaux].Categorie_Materiaux)=[Formulaires]![Détail_Devis Materiaux
Sous-formulaire]![N°_Catégorie]));

Je conseille de prêter une attention particulière à la dernière l igne du
code de la requête ci-dessus, qui en newsgroup s'étale sur deux ligne s a
priori.

En évitant de rendre un champ lié à une valeur d'un formulaire qui n'est
pas ouvert, tu éviteras qu'Access te demande des comptes, dans le style
"Eh, chef, il me manque un truc, qu'est-ce que j'y mets ?"


Histoire de permettre aux gens de filer un coup de main ... (je ne
pourrai pas toujours ouvrir la base au bureau et consacrer une heure à
dépioter le problème puis une demi-heure à rédiger le mail.)

Une recherche sur "Ms-Access règles de nommage" serait sûrement utile ,
bien que les résultats ne soient pas immédiats, je viens de regarder.

Je vais tâcher (sans dire quand) de trouver les références quelque part
(si quelqu'un vient à la rescousse je ne serai pas vexé ;) ).

Chaque objet (table, formulaire, requête, contrôle ...) doit porter u n
nom qui commence par un préfixe de trois lettres désignant sa catég orie.
Ainsi, les noms des formulaires commenceront par frm, les noms des
tables par tab, les noms des requêtes par req (ou qry, de préférenc e le
même préfixe dans toute la base), les noms des étiquettes par lbl, les
noms des zones de saisie texte par txt, les noms des listes déroulantes
modifiables par mod, ceux des listes ordinaires par lst, ainsi de suite.

Pas d'espace, de caractère accentué ni de signe de ponctuation dans l es
noms. Des majuscules peuvent délimiter les mots, comme
tabCategorieMateriaux pour la table des catégories de matériaux.

Il sera ainsi plus facile de lire
Forms!frmDevis!frmLignesDevisMat!intCategorieMat, qui permet de savoir
qu'on doit chercher, parmi les formulaires principaux, un formulaire
frmDevis, avec un sous-formulaire qui s'appelle frmLignesDevisMat (c'est
une bonne idée de donner au sous-formulaire le même nom qu'au formula ire
sur lequel il est basé), on s'attendrait à trouver dans le
sous-formulaire les lignes du devis de matériaux apparaissant dans le
formulaire principal, et on saurait qu'on peut y trouver un entier
contenant un numéro de catégorie de matériaux. Avec
Forms!frmDevis!frmLignesDevisMat!txtCategorieMat, on saurait que ce
numéro apparaît dans une zone de saisie texte (ce qui n'impliquerait pas
forcément qu'on puisse modifier le numéro, si il s'agit d'un numéro auto
par exemple).

Il peut être parfois utile d'abréger les noms de tables, comme
tabCategMat. En effet, il peut un jour être décidé de migrer la bas e sur
une autre plateforme. Les noms des objets sous Oracle, par exemple, ne
peuvent être plus longs que 30 caractères.

En espérant aider ...

Avatar
Gloops
Gloops a écrit, le 30/01/2008 21:12 :

Une recherche sur "Ms-Access règles de nommage" serait sûrement uti le,
bien que les résultats ne soient pas immédiats, je viens de regarde r.

Je vais tâcher (sans dire quand) de trouver les références quelqu e part
(si quelqu'un vient à la rescousse je ne serai pas vexé ;) ).




Je viens d'ouvrir un nouveau fil intitulé "règles de nommage" : ça
risque d'être plus efficace.