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

Liste déroulante dépendante d'une autre, dans un sous-formulaire en liste

9 réponses
Avatar
mission
Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante Client.
J'ai ajouté dans le sous-formulaire une liste déroulante lstCommandes
dépendante de Client et basée sur la requête qryCommandesClient :
SELECT qryCommandesClient.NumCommande, qryCommandesClient.NomCommande,
qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes m'affichent
le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une commande.
Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG

9 réponses

Avatar
Ilan
Bonjour, j'imagine que le sous formulaire sfTravaux est lié à une table, il
faut donc que tu indiques à quel champ de cette table la liste des commandes
est attachée.
La propriété SOURCE CONTROL de la liste doit contenir le nom du champ.

Si les travaux ne sont attachés à aucune commande, pourquoi placer une
liste de commandes client dans le suivi des travaux.



Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante Client.
J'ai ajouté dans le sous-formulaire une liste déroulante lstCommandes
dépendante de Client et basée sur la requête qryCommandesClient :
SELECT qryCommandesClient.NumCommande, qryCommandesClient.NomCommande,
qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes m'affichent
le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une commande.
Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG





Avatar
mission
Bonjour Ilan et merci pour ton attention.

Mon sous-formulaire sfTravaux est alimenté par une requête qryTravaux
elle-même en provenance de la table tblTavaux.
Cette requête contient un champ NumCommande en relation avec le même dans la
table tblCommandes.
La requête, et donc la table tbltravaux, _et_ la table tblCommandes
contiennent aussi un champ Client en relation avec la table tblClients, mais
pas directement entre eux. Pour simplifier, les relations ici :
http://cjoint.com/?chn5smYdxs

Au moment de la saisie des travaux, ceux-ci ne sont pas nécessairement
attachés à une commande, alors qu'ils le sont systématiquement à un client.
En effet, lorsque les ouvriers saisissent leur fiche de travail, ils ne
connaissent pas forcément les tenants et aboutissants de l'opération. Par
contre, lorsque le chef d'atelier valide les tâches pour autoriser la
facturation, il doit renseigner cette information. Comme une commande peut
supporter de nombreux travaux sur des périodes parfois longues, je voulais
afficher toutes les commandes du client concerné en liste déroulante.
Ensuite, lorsque cette partie fonctionnera, j'affinerai ma requête pour
n'avoir plus que les commandes non soldées et autoriser la création de
nouvelles par 'NotInList'.
Voila pour mieux comprendre le cheminement tordu de ma pensée :-).

Dans son message ,
l'honorable Ilan écrivait
Bonjour, j'imagine que le sous formulaire sfTravaux est lié à une
table, il faut donc que tu indiques à quel champ de cette table la
liste des commandes est attachée.
La propriété SOURCE CONTROL de la liste doit contenir le nom du champ.

Si les travaux ne sont attachés à aucune commande, pourquoi placer une
liste de commandes client dans le suivi des travaux.



Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante
Client. J'ai ajouté dans le sous-formulaire une liste déroulante
lstCommandes dépendante de Client et basée sur la requête
qryCommandesClient :
SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes
m'affichent le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une commande.
Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG




Avatar
Ilan
Oui, j'ai peut-être mal compris ta question. Quelles sont les informations
qui apparaissent sur la totalité de la fiche, la commande ou le client ?
Ton sous-formulaire est-il en mode continue; vois-tu le sélecteur
d'enregistrement au bas du sous-formulaire ?



Bonjour Ilan et merci pour ton attention.

Mon sous-formulaire sfTravaux est alimenté par une requête qryTravaux
elle-même en provenance de la table tblTavaux.
Cette requête contient un champ NumCommande en relation avec le même dans la
table tblCommandes.
La requête, et donc la table tbltravaux, _et_ la table tblCommandes
contiennent aussi un champ Client en relation avec la table tblClients, mais
pas directement entre eux. Pour simplifier, les relations ici :
http://cjoint.com/?chn5smYdxs

Au moment de la saisie des travaux, ceux-ci ne sont pas nécessairement
attachés à une commande, alors qu'ils le sont systématiquement à un client.
En effet, lorsque les ouvriers saisissent leur fiche de travail, ils ne
connaissent pas forcément les tenants et aboutissants de l'opération. Par
contre, lorsque le chef d'atelier valide les tâches pour autoriser la
facturation, il doit renseigner cette information. Comme une commande peut
supporter de nombreux travaux sur des périodes parfois longues, je voulais
afficher toutes les commandes du client concerné en liste déroulante.
Ensuite, lorsque cette partie fonctionnera, j'affinerai ma requête pour
n'avoir plus que les commandes non soldées et autoriser la création de
nouvelles par 'NotInList'.
Voila pour mieux comprendre le cheminement tordu de ma pensée :-).

Dans son message ,
l'honorable Ilan écrivait
Bonjour, j'imagine que le sous formulaire sfTravaux est lié à une
table, il faut donc que tu indiques à quel champ de cette table la
liste des commandes est attachée.
La propriété SOURCE CONTROL de la liste doit contenir le nom du champ.

Si les travaux ne sont attachés à aucune commande, pourquoi placer une
liste de commandes client dans le suivi des travaux.



Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante
Client. J'ai ajouté dans le sous-formulaire une liste déroulante
lstCommandes dépendante de Client et basée sur la requête
qryCommandesClient :
SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes
m'affichent le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une commande.
Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG









Avatar
mission
Mon sous-formulaire est en mode continu, et je vois les sélecteurs.
Il comporte une liste de choix 'Client' et un contrôle simple 'NumCommande',
correspondant à leurs champs respectifs dans la table tblTravaux.
Je te mets une copie d'écran ici : http://cjoint.com/?chrrQF6bey
La présentation est bien entendu temporaire.
Merci encore pour ton attention.
PG

Dans son message ,
l'honorable Ilan écrivait
Oui, j'ai peut-être mal compris ta question. Quelles sont les
informations qui apparaissent sur la totalité de la fiche, la
commande ou le client ? Ton sous-formulaire est-il en mode continue;
vois-tu le sélecteur d'enregistrement au bas du sous-formulaire ?



Bonjour Ilan et merci pour ton attention.

Mon sous-formulaire sfTravaux est alimenté par une requête qryTravaux
elle-même en provenance de la table tblTavaux.
Cette requête contient un champ NumCommande en relation avec le même
dans la table tblCommandes.
La requête, et donc la table tbltravaux, _et_ la table tblCommandes
contiennent aussi un champ Client en relation avec la table
tblClients, mais pas directement entre eux. Pour simplifier, les
relations ici : http://cjoint.com/?chn5smYdxs

Au moment de la saisie des travaux, ceux-ci ne sont pas
nécessairement attachés à une commande, alors qu'ils le sont
systématiquement à un client. En effet, lorsque les ouvriers
saisissent leur fiche de travail, ils ne connaissent pas forcément
les tenants et aboutissants de l'opération. Par contre, lorsque le
chef d'atelier valide les tâches pour autoriser la facturation, il
doit renseigner cette information. Comme une commande peut supporter
de nombreux travaux sur des périodes parfois longues, je voulais
afficher toutes les commandes du client concerné en liste
déroulante. Ensuite, lorsque cette partie fonctionnera, j'affinerai
ma requête pour n'avoir plus que les commandes non soldées et
autoriser la création de nouvelles par 'NotInList'.
Voila pour mieux comprendre le cheminement tordu de ma pensée :-).

Dans son message ,
l'honorable Ilan écrivait
Bonjour, j'imagine que le sous formulaire sfTravaux est lié à une
table, il faut donc que tu indiques à quel champ de cette table la
liste des commandes est attachée.
La propriété SOURCE CONTROL de la liste doit contenir le nom du
champ.

Si les travaux ne sont attachés à aucune commande, pourquoi placer
une liste de commandes client dans le suivi des travaux.



Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante
Client. J'ai ajouté dans le sous-formulaire une liste déroulante
lstCommandes dépendante de Client et basée sur la requête
qryCommandesClient :
SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes
m'affichent le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une
commande. Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG








Avatar
Ilan
Je ne vois pas un contenu identique dans chaque ligne ?




Mon sous-formulaire est en mode continu, et je vois les sélecteurs.
Il comporte une liste de choix 'Client' et un contrôle simple 'NumCommande',
correspondant à leurs champs respectifs dans la table tblTravaux.
Je te mets une copie d'écran ici : http://cjoint.com/?chrrQF6bey
La présentation est bien entendu temporaire.
Merci encore pour ton attention.
PG

Dans son message ,
l'honorable Ilan écrivait
Oui, j'ai peut-être mal compris ta question. Quelles sont les
informations qui apparaissent sur la totalité de la fiche, la
commande ou le client ? Ton sous-formulaire est-il en mode continue;
vois-tu le sélecteur d'enregistrement au bas du sous-formulaire ?



Bonjour Ilan et merci pour ton attention.

Mon sous-formulaire sfTravaux est alimenté par une requête qryTravaux
elle-même en provenance de la table tblTavaux.
Cette requête contient un champ NumCommande en relation avec le même
dans la table tblCommandes.
La requête, et donc la table tbltravaux, _et_ la table tblCommandes
contiennent aussi un champ Client en relation avec la table
tblClients, mais pas directement entre eux. Pour simplifier, les
relations ici : http://cjoint.com/?chn5smYdxs

Au moment de la saisie des travaux, ceux-ci ne sont pas
nécessairement attachés à une commande, alors qu'ils le sont
systématiquement à un client. En effet, lorsque les ouvriers
saisissent leur fiche de travail, ils ne connaissent pas forcément
les tenants et aboutissants de l'opération. Par contre, lorsque le
chef d'atelier valide les tâches pour autoriser la facturation, il
doit renseigner cette information. Comme une commande peut supporter
de nombreux travaux sur des périodes parfois longues, je voulais
afficher toutes les commandes du client concerné en liste
déroulante. Ensuite, lorsque cette partie fonctionnera, j'affinerai
ma requête pour n'avoir plus que les commandes non soldées et
autoriser la création de nouvelles par 'NotInList'.
Voila pour mieux comprendre le cheminement tordu de ma pensée :-).

Dans son message ,
l'honorable Ilan écrivait
Bonjour, j'imagine que le sous formulaire sfTravaux est lié à une
table, il faut donc que tu indiques à quel champ de cette table la
liste des commandes est attachée.
La propriété SOURCE CONTROL de la liste doit contenir le nom du
champ.

Si les travaux ne sont attachés à aucune commande, pourquoi placer
une liste de commandes client dans le suivi des travaux.



Bonjour à tous,
Sous Access 2000. Soit un formulaire frmOuvriers contenant un
sous-formulaire sfTravaux lequel contient une liste déroulante
Client. J'ai ajouté dans le sous-formulaire une liste déroulante
lstCommandes dépendante de Client et basée sur la requête
qryCommandesClient :
SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
(((qryCommandesClient.Client)=[Formulaires]![frmOuvriers].[Form]![sfTravaux]![Client]));
Ca marche. Merci Hervé.
Mais, comme je suis dans un sous-formulaire, toutes mes lignes
m'affichent le même contenu : celui de la première fiche :-(
Pas cool.
Où est l'erreur ?
A noter que tous mes travaux ne sont pas subordonnés à une
commande. Est-ce que quelqu'un peut m'aider ici ?
Merci d'avance.
PG













Avatar
Ilan
Ok, Mission peux-tu essayer en changeant la requête par

SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
qryCommandesClient.Client=[Client];
Avatar
mission
J'avais déjà fait queque chose du genre au début.
En fait, cela me renvoit la liste complète de la table tblCommandes, sans
tenir compte du nom affiché dans le contrôle sfrmTravaux.Client.
En outre, si je sélectionne un des composants de cette liste, celui-ci
s'affiche dans le contrôle sur chaque enregistrement.
Tout ce que je souhaite, c'est avoir à chaque enregistrement la possibilité
de choisir la commande adéquate si elle existe, ou la créer dans le cas
contraire, voire de ne rien faire du tout.
Dur dur la vie d'artiste :-)
J'ai même essayé de traiter directement la requête qryCommandesClient pour
obtenir
SELECT tblCommandes.NumCommande, tblCommandes.NomCommande,
tblCommandes.Client
FROM tblCommandes GROUP BY tblCommandes.NumCommande,
tblCommandes.NomCommande, tblCommandes.Client HAVING
(((tblCommandes.Client)=[form]![sfrmtravaux]![client]));
Mais la bêbête ne semble pas comprendre [form]![sfrmtravaux]![client]
Je suppose donc que la syntaxe n'est pas bonne...... mais ne sais pas la
corriger.
Je pense que je vais jeter l'ordi ce soir ;-)
PG

Dans son message ,
l'honorable Ilan écrivait
Ok, Mission peux-tu essayer en changeant la requête par

SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
qryCommandesClient.Client=[Client];


Avatar
mission
Bonjour Ilan, bonjour tout le monde,

J'ai réécrit ma liste de choix (lstCommandes) avec la requête suivante,
pointant directement sur la table :
SELECT [tblCommandes].[NumCommande], [tblCommandes].[NomCommande],
[tblCommandes].[Client]
FROM tblCommandes WHERE ((([tblCommandes].[Client])=[lstClient]));
J'ai également forcé les relations à 1>n pour tblClients/tblTravaux,
tblClients/tblCommandes et tblCommandes/tblTravaux
Maintenant, ma liste lstCommandes est correcte à la première requête.
Mais refuse de se mettre à jour si je change une donnée du formulaire de
base (frmOuvriers), dans lequel je peux choisir l'ouvrier, le mois et
l'année. . Ainsi, tant que je n'ai rien demandé à ma lstCommandes, je peux
changer ces options. Mais si j'ai déjà affiché quelque chose, le
Me.sfrmTravaux.Requery appelé par le choix dans frmOuvriers n'impacte pas
lstCommandes.
Private Sub lstAnnéeChoisie_AfterUpdate()
Me.sfrmTravaux.Requery
End Sub
Comment forcer ce rafraîchissement spécifique ?
Bonne journée.
PG

Dans son message ,
l'honorable Ilan écrivait
Ok, Mission peux-tu essayer en changeant la requête par

SELECT qryCommandesClient.NumCommande,
qryCommandesClient.NomCommande, qryCommandesClient.Client
FROM qryCommandesClient
WHERE
qryCommandesClient.Client=[Client];


Avatar
mission
Re bonjour ...
J'ai trouvé une solution. Je ne sais pas si elle est très othodoxe mais elle
fonctionne.
Private Sub lstCommandes_GotFocus()
Me.lstCommandes.Requery
End Sub
Private Sub lstCommandes_LostFocus()
Me.lstCommandes = Null
End Sub
Merci de t'être penché sur mon problème.
Dans son message ,
l'honorable mission écrivait
Bonjour Ilan, bonjour tout le monde,
.....
Comment forcer ce rafraîchissement spécifique ?
Bonne journée.
PG