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

Menu déroulant dans la case d'une feuille

17 réponses
Avatar
Gil HASH
Bonjour
Je veux utiliser une ListBox pour entrer des valeurs avec un clic droit sur
certaines cases d'une feuille Excel
Pour cela j'ai intercepté le clic droit du Classeur pour ajuster d'abord la
ListBox aux dimensions exactes de la case Excel active puis de la rendre
visible (au lancement la ListBox est invisible)
Le problème se pose quand je veux ajouter des valeurs dans la ListBox
L'opération addItem marche très bien mais quand je cherche à faire un Clear
je déclenche une erreur de propriété non reconnue (?)
Je m'adresse à la ListBox par ActiveSheet.Listboxes(1).Clear instruction qui
pose problème alors que les instructions ActiveSheet.Listboxes(1).Visible =
True ou False et ActiveSheet.Listboxes(1).AddItem XXX ne déclenchent pas
d'erreurs.
Avez-vous une idée?
PS: je n'ai pas encore résolu le problème de l'inscription de la valeur
sélectionnée de la ListBox dans la case puisque je bute pour l'instant sur
cet os, mais chaque chose en son temps.

7 réponses

1 2
Avatar
Chui Perdu
Bonsoir,

Changement de lieu de connexion, changement de pseudo ... :-(

J'ai déjà étudié cette possibilité.
Malheureusement, ce n'est pas la réponse à mon problème, car mes listes
doivent rester 'vivantes', au libre besoin des utilisateurs, qui sont
sensés les enrichir.
Elles ne sont pas non plus égales entre elles.
J'ai, en gros pour l'instant, une dizaine de familles et quelques
milliers de produits en perspective.
Je ne me vois pas extraire de nouvelles listes à chaque mise à jour de
la base.
J'ai pensé (semi-)automatiser des filtres élaborés, mais tu parles d'un
boulot, à refaire à chaque création d'une nouvelle famille de produits.

Ou alors, je n'ai pas tout compris, ce qui est encore bien possible.
:-)

Merci d'avance à ceux qui voudront bien se pencher sur le problème.

Cordialement

PG

"AV" avait énoncé :
Je pense que je ne m'en sortirai pas sans Vba.


Mais si, mais si

Regarde là :
http://disciplus.simplex.free.fr/classeursxl/av-listevalidmultiples.zip
En adaptant, c'est la réponse à ta question

AV



Avatar
AV
Malheureusement, ce n'est pas la réponse à mon problème, car mes listes
doivent rester 'vivantes',
Il faut les définir dynamiquement par la fonction DECALER


au libre besoin des utilisateurs, qui sont
sensés les enrichir.
Le fond de la question est là :

Il "on droit" à quoi les "utilisateurs" ?
Et ils font "ça" comment ?
Tout est permis/accessible ?

AV

Avatar
Chui Perdu
Re-Bonjour, (fabuleuse, ta réactivité. Merci)

"AV" a utilisé son clavier pour écrire :
Malheureusement, ce n'est pas la réponse à mon problème, car mes listes
doivent rester 'vivantes',
Il faut les définir dynamiquement par la fonction DECALER



Je vais tenter ça dès demain (je n'ai pas accès au fichier aujourd'hui)

au libre besoin des utilisateurs, qui sont
sensés les enrichir.
Le fond de la question est là :

Il "on droit" à quoi les "utilisateurs" ?
Le fichier est entièrement libre d'accès pour 2


Et ils font "ça" comment ?
Une feuille "BDD" avec les divers produits en lignes, leurs composants

en ligne, et les réactions dans le tableau.
Une feuille "Recherche" avec liste(s) de validation (je ne sais pas
faire autre chose du même genre) affichant les réactions du produit
choisi pour chaque composant de ce produit. Cette feuille est protégée
(sans mot de passe) pour éviter les fôtes de doigts. :-)

Merci encore pour tes réponses.
Je vais chercher, et reviendrai donner des nouvelles. Promis.

PG


Avatar
ChuiPerdu
Bonjour

Je dois être particulièrement borné, car je ne 'comprends' pas comment
utiliser l'exemple indiqué.

Je me permets de reformuler mon souci :

Une liste (en B:B) de produits - en vrac
Une "famille" (en A:A) - en vrac - il peut y avoir des 'blancs'.
Dans une autre feuille, voire un autre classeur, je souhaite que
l'utilisateur choisisse d'abord la "famille", de préférence en liste
déroulante, ce qui lui fournira, dans la liste déroulante juste à côté, les
produits de cette famille.

Comme déjà dit, je cherche un élément dynamique, le plus automatique
possible, pour que les utilisateurs n'aient rien à faire, même en cas de
mise à jour (ajout, modification) de la liste.

Et j'avoue ne pas bien comprendre l'usage ici de la fonction DECALER.

Serais-je bouché ? Ou encore, déjà touché par les bulles du champagne que je
n'ai pas encore bu ?

Merci d'avance.

PG

AV a écrit dans le message :

Malheureusement, ce n'est pas la réponse à mon problème, car mes listes
doivent rester 'vivantes',
Il faut les définir dynamiquement par la fonction DECALER




Avatar
Pierre CFI [mvp]
bonjour
si tes listes sont en vrac et avec des blancs, je vois pas comment on peut savoir que escalope est dans la famille viande
donc un peu d'ordre et des relations
une liste nommée lst_famille
avec viande, légume..
puis une liste nommée lst_viande avec veau, tournedos,agneau...
une liste lst_légume avec poireau, tomate...
dans la colonne A données/validation liste =lst_famille
itou dans B mais dans liste =INDIRECT("lst_" & A1) donc lst_viande si viande dans a1

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"ChuiPerdu" a écrit dans le message de news: #
Bonjour

Je dois être particulièrement borné, car je ne 'comprends' pas comment
utiliser l'exemple indiqué.

Je me permets de reformuler mon souci :

Une liste (en B:B) de produits - en vrac
Une "famille" (en A:A) - en vrac - il peut y avoir des 'blancs'.
Dans une autre feuille, voire un autre classeur, je souhaite que
l'utilisateur choisisse d'abord la "famille", de préférence en liste
déroulante, ce qui lui fournira, dans la liste déroulante juste à côté, les
produits de cette famille.

Comme déjà dit, je cherche un élément dynamique, le plus automatique
possible, pour que les utilisateurs n'aient rien à faire, même en cas de
mise à jour (ajout, modification) de la liste.

Et j'avoue ne pas bien comprendre l'usage ici de la fonction DECALER.

Serais-je bouché ? Ou encore, déjà touché par les bulles du champagne que je
n'ai pas encore bu ?

Merci d'avance.

PG

AV a écrit dans le message :

Malheureusement, ce n'est pas la réponse à mon problème, car mes listes
doivent rester 'vivantes',
Il faut les définir dynamiquement par la fonction DECALER









Avatar
ChuiPerdu
Bonjour Pierre,

C'est bien là mon problème.
Quand je dis 'en vrac', cela veut dire sans tri préalable.
Quand je dis 'avec des blancs', cela veut dire que certains produits peuvent
ne pas être affectés à une famille à un moment donné, mais il n'y a bien
entendu aucun blanc dans la liste de produits.

J'ai des centaines de produits (veau, tournedos, carottes, etc.), avec en
vue à (très) court terme un tableau de plusieurs milliers de lignes.
S'il est simple de lister les familles (au plus une grosse dizaine), il est
déjà beaucoup plus difficile de créer les listes par produits.
J'avais bien compris que je devais passer par là. Mais c'est ce que je
n'arrive pas à faire de façon dynamique.
En effet, les utilisateurs peuvent ajouter des produits, généralement en fin
de liste. Et je souhaite qu'ils aient le moins possible à faire pour les
mises à niveau des listes, sinon il y aura bien un petit malin pour me
ficher mon boulot en l'air.

Je crois que je vais décomposer le mouvement le plus finement possible, et
utiliser l'enregistreur de macros.
Ce sera un pis-aller, mais je ne vois pas mieux aujourd'hui.

Merci de t'être penché sur ma question.

Et joyeux Noël à tou(te)s.

PG

Pierre CFI [mvp] a écrit dans le message :

bonjour
si tes listes sont en vrac et avec des blancs, je vois pas comment on peut
savoir que escalope est dans la famille viande

donc un peu d'ordre et des relations
une liste nommée lst_famille
avec viande, légume..
puis une liste nommée lst_viande avec veau, tournedos,agneau...
une liste lst_légume avec poireau, tomate...
dans la colonne A données/validation liste =lst_famille
itou dans B mais dans liste =INDIRECT("lst_" & A1) donc lst_viande si
viande dans a1


--
Pierre CFI
MVP Microsoft Access

Une liste (en B:B) de produits - en vrac
Une "famille" (en A:A) - en vrac - il peut y avoir des 'blancs'.
Dans une autre feuille, voire un autre classeur, je souhaite que
l'utilisateur choisisse d'abord la "famille", de préférence en liste
déroulante, ce qui lui fournira, dans la liste déroulante juste à côté,
les


produits de cette famille.




Avatar
ChuiPerdu
Re-bonjour

Suite à la proposition de Pierre, j'ai développé de petites macros avec
l'enregistreur.

Je crée d'abord ma liste de famille, puis une liste pour chaque item de
cette liste.
Mais je me les modifie à la mimine. :-(
Comment faire une macro globale qui développerait chaque liste en fonction
de la liste de famille ?

Voici mon code actuel. Un coup de main sera très apprécié.

Merci d'avance

Sub Liste_Famille()
Sheets("Listes").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = ""
Sheets("Env_Mat").Range("A2:A65000").AdvancedFilter
Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("E1"),
Unique:=True
ActiveWorkbook.Names.Add Name:="Liste_Famille", RefersToR1C1:= _
"=Listes!R2C5:R65000C5"
End Sub
Sub Liste_Acide()
Sheets("Listes").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "Acide"
Range("B2").Select
Sheets("Env_Mat").Range("A2:B64999").AdvancedFilter
Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:B2"), CopyToRange:=Range("F1"),
Unique:=True
ActiveWorkbook.Names.Add Name:="Liste_Acide", RefersToR1C1:= _
"=Listes!R2C7:R65000C7"
End Sub
Sub Liste_Alcool()
Sheets("Listes").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "Alcool"
Range("B2").Select
Sheets("Env_Mat").Range("A2:B64999").AdvancedFilter
Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:B2"), CopyToRange:=Range("H1"),
Unique:=True
ActiveWorkbook.Names.Add Name:="Liste_Alcool", RefersToR1C1:= _
"=Listes!R2C9:R65000C9"
End Sub



ChuiPerdu a écrit dans le message :
#

Je crois que je vais décomposer le mouvement le plus finement possible, et
utiliser l'enregistreur de macros.
Ce sera un pis-aller, mais je ne vois pas mieux aujourd'hui.



1 2