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

Problème de liste déroulante

4 réponses
Avatar
Michel
Bonjour,

Soit un formulaire "factures" comprenant un sous-formulaire "articles
facturés", où sont encodés, en mode Formulaire Continu, les articles
concernés par la facture. Sur chaque ligne de ce sous-formulaire, il y
a une liste déroulante contenant les noms des articles, tirés d'une table
"articles". Chaque enregistrement de la table "articles facturés" liée au
sous-formulaire stocke un numéro de facture, un numéro d'article,
la quantité fournie, et le prix payé.

La liste déroulante utilise donc une requête basée sur le numéro
de l'article (et non sur son nom), mais seul le nom est affiché (la
colonne "numéro d'article" a une largeur nulle)

Une série d'articles anciens ne sont plus vendus, et je voudrais qu'ils
n'apparaissent plus dans les listes déroulantes. Dans la table article,
un champ "montrer" (oui/non) indique si l'article doit être affiché ou
non dans la liste déroulante.

Si j'indique comme source pour la liste déroulante une requête
sélectionnant les articles où "montrer" est vrai, la liste se limite
effectivement aux articles sélectionnés.

Le problème est que si je consulte des factures plus anciennes,
les noms des articles périmés ("montrer" = faux) n'apparaissent plus,
non seulement dans la liste déroulante, mais aussi dans l'affichage.

Comment faire en sorte que le nom d'un article périmé apparaisse
quand même lorsqu'il a déjà été sélectionné dans le passé, tout en
faisant en sorte que la liste elle-même ne propose qu'un choix d'articles
actuels, non périmés (de sorte qu'on ne puisse plus sélectionner les
articles périmés dans le futur) ?

Michel

4 réponses

Avatar
Fabien
Bonjour,

Soit un formulaire "factures" comprenant un sous-formulaire "articles
facturés", où sont encodés, en mode Formulaire Continu, les articles
concernés par la facture. Sur chaque ligne de ce sous-formulaire, il y
a une liste déroulante contenant les noms des articles, tirés d'une table
"articles". Chaque enregistrement de la table "articles facturés" liée au
sous-formulaire stocke un numéro de facture, un numéro d'article,
la quantité fournie, et le prix payé.

La liste déroulante utilise donc une requête basée sur le numéro
de l'article (et non sur son nom), mais seul le nom est affiché (la
colonne "numéro d'article" a une largeur nulle)

Une série d'articles anciens ne sont plus vendus, et je voudrais qu'ils
n'apparaissent plus dans les listes déroulantes. Dans la table article,
un champ "montrer" (oui/non) indique si l'article doit être affiché ou
non dans la liste déroulante.

Si j'indique comme source pour la liste déroulante une requête
sélectionnant les articles où "montrer" est vrai, la liste se limite
effectivement aux articles sélectionnés.

Le problème est que si je consulte des factures plus anciennes,
les noms des articles périmés ("montrer" = faux) n'apparaissent plus,
non seulement dans la liste déroulante, mais aussi dans l'affichage.

Comment faire en sorte que le nom d'un article périmé apparaisse
quand même lorsqu'il a déjà été sélectionné dans le passé, tout en
faisant en sorte que la liste elle-même ne propose qu'un choix d'articles
actuels, non périmés (de sorte qu'on ne puisse plus sélectionner les
articles périmés dans le futur) ?

Michel


Salut michel

J'ai eut un soucis similaire, l'astuce qui marchais bien avec accessxp
mais pas avec access2000 (plantage du formulaire !!!) c'est de
superposer un champ a la liste. Ce champ est alimenté par un dlookup qui
lui ne tient pas compte du drapeau actif o/n.
Lors de la saisi c'et la liste qui est utilisé et lors de l'affichage
c'est le champs.
Voilà ...

Avatar
Michel
"Fabien" :

Salut michel
J'ai eut un soucis similaire, l'astuce qui marchais bien avec accessxp mais pas avec access2000
(plantage du formulaire !!!) c'est de superposer un champ a la liste. Ce champ est alimenté par un
dlookup qui lui ne tient pas compte du drapeau actif o/n.
Lors de la saisi c'et la liste qui est utilisé et lors de l'affichage c'est le champs.
Voilà ...


Merci Fabien. J'avais pensé au début à un bidouillage dans le même
genre, en superposant 2 listes déroulantes, l'une visible, l'autre invisible,
(avec et sans la sélection), et de switcher leur propriété .visible dans
Form_current(), en fonction de l'obsolescence ou non de l'article
référencé. Le problème est que cela modifie l'affichage de toutes
les listes déroulantes visibles (les enregistrements s'affichent l'un
en-dessous de l'autre, en mode continu) : ce n'est pas très joili.

Je me demandais s'il n'y avait pas un moyen d'éviter d'avoir 2 objets
en programmant la liste "à la main" en VB, mais ça n'a pas l'air si
évident, puisque cette liste est globale.

Finalement, je peux aussi m'en tirer en remplaçant le oui/non du
champ "Montrer" par une date d'épuisement de l'article dans la table
des articles. Et je modifie ensuite la requête pour qu'elle ne m'affiche
dans la liste déroulante que les articles pas encore périmés à la
date de facturation. La même requête est alors valable partout.

Mais si quelqu'un a une solution programmatique élégante pour
résoudre le problème d'affichage, ça m'intéresse, car j'imagine
qu'il peut se poser assez souvent, et qu'il n'y a pas toujours moyen
de le contourner.

Michel

Avatar
Fabien
"Fabien" :

Salut michel
J'ai eut un soucis similaire, l'astuce qui marchais bien avec accessxp mais pas avec access2000
(plantage du formulaire !!!) c'est de superposer un champ a la liste. Ce champ est alimenté par un
dlookup qui lui ne tient pas compte du drapeau actif o/n.
Lors de la saisi c'et la liste qui est utilisé et lors de l'affichage c'est le champs.
Voilà ...


Merci Fabien. J'avais pensé au début à un bidouillage dans le même
genre, en superposant 2 listes déroulantes, l'une visible, l'autre invisible,
(avec et sans la sélection), et de switcher leur propriété .visible dans
Form_current(), en fonction de l'obsolescence ou non de l'article
référencé. Le problème est que cela modifie l'affichage de toutes
les listes déroulantes visibles (les enregistrements s'affichent l'un
en-dessous de l'autre, en mode continu) : ce n'est pas très joili.

Je me demandais s'il n'y avait pas un moyen d'éviter d'avoir 2 objets
en programmant la liste "à la main" en VB, mais ça n'a pas l'air si
évident, puisque cette liste est globale.

Finalement, je peux aussi m'en tirer en remplaçant le oui/non du
champ "Montrer" par une date d'épuisement de l'article dans la table
des articles. Et je modifie ensuite la requête pour qu'elle ne m'affiche
dans la liste déroulante que les articles pas encore périmés à la
date de facturation. La même requête est alors valable partout.

Mais si quelqu'un a une solution programmatique élégante pour
résoudre le problème d'affichage, ça m'intéresse, car j'imagine
qu'il peut se poser assez souvent, et qu'il n'y a pas toujours moyen
de le contourner.

Michel


Pour ne plus avoir de problème de 'compatibilité' j'en suis venu au même

système avec une analyse de date.


Avatar
yakakose
Salut les gars,

J'ai eu le meme genre de soucis et j'ai pris ca de la facon suivante: comme
une ancienne facture ne peut de toutes facons pas etre modifiee (compta
oblige), il n'y a aucune raison que la liste deroulante s'ouvre quand je
clique sur ce champs. On est d'accord?
Donc ce que j'ai fait c'est que quand je cree ma facture, le fait de cliquer
sur le champs (OnClick + procedure), m'ouvre une liste deroulante (a' cote')
qui contient mes differents produits. Le fait de choisir un produits dans
cette liste me rempli les champs "nom de produits", "prix", "reference" etc
etc. et cette option n'est disponible que losrque je cree ma facture.
Ensuite quand je rouvre une ancienne facture, les champs precedement remplis
sont affiche's et je n'ai plus de "parasites" avec les anciens produits. Je
peux donc utiliser l'option que vous avez choisi (checkbox "a montrer" ou
non) pour definir quel produit doit faire parti de ma liste deroulante.

Voila, a+,

Yakakose,


"Fabien" :

Salut michel
J'ai eut un soucis similaire, l'astuce qui marchais bien avec accessxp mais pas avec access2000
(plantage du formulaire !!!) c'est de superposer un champ a la liste. Ce champ est alimenté par un
dlookup qui lui ne tient pas compte du drapeau actif o/n.
Lors de la saisi c'et la liste qui est utilisé et lors de l'affichage c'est le champs.
Voilà ...


Merci Fabien. J'avais pensé au début à un bidouillage dans le même
genre, en superposant 2 listes déroulantes, l'une visible, l'autre invisible,
(avec et sans la sélection), et de switcher leur propriété .visible dans
Form_current(), en fonction de l'obsolescence ou non de l'article
référencé. Le problème est que cela modifie l'affichage de toutes
les listes déroulantes visibles (les enregistrements s'affichent l'un
en-dessous de l'autre, en mode continu) : ce n'est pas très joili.

Je me demandais s'il n'y avait pas un moyen d'éviter d'avoir 2 objets
en programmant la liste "à la main" en VB, mais ça n'a pas l'air si
évident, puisque cette liste est globale.

Finalement, je peux aussi m'en tirer en remplaçant le oui/non du
champ "Montrer" par une date d'épuisement de l'article dans la table
des articles. Et je modifie ensuite la requête pour qu'elle ne m'affiche
dans la liste déroulante que les articles pas encore périmés à la
date de facturation. La même requête est alors valable partout.

Mais si quelqu'un a une solution programmatique élégante pour
résoudre le problème d'affichage, ça m'intéresse, car j'imagine
qu'il peut se poser assez souvent, et qu'il n'y a pas toujours moyen
de le contourner.

Michel


Pour ne plus avoir de problème de 'compatibilité' j'en suis venu au même

système avec une analyse de date.