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.

10 réponses

1 2
Avatar
AV
Ta ListBox provient de la barre d'outils Formulaire ou Contrôles ?

AV
Avatar
AV
Hypothèse (pour l'échec) :
Ta ListBox (boite contrôles) a été initialisée par ListFillRange (voir dans les
propriétés et supprimer)
Ex :avec la plage A1:Ax de Feuil1 :

Sub iniLisBox()
With Sheets("Feuil1")
.ListBox1.Clear
Tbl = .Range("A1", .[A1].End(4))
For Each Elt In Tbl
.ListBox1.AddItem Elt
Next Elt
End With
End Sub

AV
Avatar
Gil HASH
"AV" a écrit dans le message de
news:
Ta ListBox provient de la barre d'outils Formulaire ou Contrôles ?

AV


Bonjour

Cette ListBox provient du menu formulaires d'Excel. Autant dire que je n'ai
pas accès aux propriétés telles que je les connais sous editeur Visual
Basic. C'est la raison pour laquelle j'ignore son nom que je ne peux même
pas changer.
Y a-t'il une façon de procéder pour avoir accès à ces propriétés?

Avatar
AV
C'est la raison pour laquelle j'ignore son nom que je ne peux même
pas changer.


Si, si : clic droit dessus > saisir dans la barre des noms > Ok

Suggestions :
1)- Utiliser la fonctionnalité Données > Validation > Liste...........
2)- Utiliser une listBox issue de la boite contrôles et code fourni précédemment
3)- Garder celle présente(Formulaire) et, pour l'initialiser :
En supposant ta ListBox nommée "Z_List" (à adapter) sur "Feuil1" et ta liste de
référence en A1:A10 de "Feuil2" :

Sub Initi_ListBox()
With Sheets("Feuil1").ListBoxes("Z_List")
.ListFillRange = "Feuil2!$A$1:$A$10"
.ListIndex = 1
.OnAction = "RécupVal"
End With
End Sub

Sub RécupVal()
[A1] ActiveSheet.ListBoxes("Z_List").List(Sheets("Feuil1").ListBoxes("Z_List").ListIn
dex)
End Sub

AV

Avatar
En fait ce que je veux avec cette ListBox c'est une aide à
la saisie des paramètres selon la zone de la feuille.
Comme les zones concernent plusieurs dizaines de cellules
chacune, je ne veux pas créer une ListBox pour chacune.
La solution d'une seule ListBox redimensionnée et
repositionnée sur la cellule active et remplie des valeurs
correspondantes à la zone me parraissait la seule solutino
logique. Par contre, je m'aperçois que cette ListBox créée
ainsi dans une feuille échappe à l'éditeur Visual Basic.

Déjà quand je veux avoir accès aux propriétés de la
ListBox avec le clic droit je n'ai droit qu'à la boîte de
dialogue "Format de contrôle" avec les
onglets "Dimension", "Protection", "Propriétés", "Web", "Co
ntrôle"
à l'onglet Propriétés il n'y a que le positionnement de
l'objet.
Avatar
AV
Mais c'était avec plaisir !

La solution d'une seule ListBox redimensionnée et
repositionnée sur la cellule active et remplie des valeurs
correspondantes à la zone me parraissait la seule solutino
logique.


La liste de validation faisant référence à une plage dynamique, fait ça très
bien !

Par contre, je m'aperçois que cette ListBox créée
ainsi dans une feuille échappe à l'éditeur Visual Basic.
Déjà quand je veux avoir accès aux propriétés de la

ListBox avec le clic droit je n'ai droit qu'à la boîte de
dialogue "Format de contrôle"

Je t'invite à relire attentivement la/les réponses déjà fournie(s)...........

AV

Avatar
Gil HASH
Ouf! Merci pour toutes ces réponses précieuses
J'ai fini par comprendre comment affecter à la ListBox une propriété
ListFillRange + définir le nom de la Procédure qui lui est affectée par
contre, j'ai des problèmes concernant la sélection des valeurs de la ListBox
:
La ListBox est bien remplie par des valeurs mais je ne peux les faire
défiler et le "déroulant" ne sort pas de la ListBox
(je ne sais pas si je me fais clairement comprendre)
En fait tout la LIstBox reste à l'intérieur de la cellule.
Avatar
AV
La ListBox est bien remplie par des valeurs mais je ne peux les faire
défiler et le "déroulant" ne sort pas de la ListBox
En fait tout la LIstBox reste à l'intérieur de la cellule.


Ben parceque c'est justement une ListBox !
Si tu veux "ça le fasse", il faut utiliser une ComboBox qui corrrespond à "Zone
de liste modifiable" de la barre d'outils Formulaire (puisque c'est ce que tu
utilises) et que XL connaît sous le nom de "DropDowns"

Une fois que tu as dessiné ta "combo" et adapté les noms :
Sub Initi_ComboBox()
With Sheets("Feuil1").DropDowns("Z_Combo")
.ListFillRange = "Feuil2!$A$1:$A$10"
.ListIndex = 1
.OnAction = "RécupVal2"
End With
End Sub

Sub RécupVal2()
[A2] ActiveSheet.DropDowns("Z_Combo").List(Sheets("Feuil1").DropDowns("Z_Combo").List
Index)
End Sub

** Tu pourrais fort bien te passer d'initialiser la combo par une macro :
Avec ta liste de réf en Feuil2 A2:Ax (A1 étant réservé à l'étiquette de colonne)
Insertion > nom > définir : "laListe" > fait réf à :
ÞCALER(Feuil2!$A$2;;;NBVAL(Feuil2!$A:$A)-1)
Clic droit sur ta combo > Format de controle > controle > Plage d'entrée : > laListe (ne pas oublier le signe = )
Avantage : tout ajout à la liste sera répercuté automatiquement dans la combo
sans avoir à réinitialiser
Ensuite par clic droit dessus, tu lui affectes la macro "RécupVal2"

Pour tout savoir (ou presque ;-) sur l'utilisation des contrôles de la barre
d'outils formulaire :
http://disciplus.simplex.free.fr/classeursxl/av-bo-formulaire.zip

PS (utile ?) : Sur une feuille, pour résoudre d'éventuels problèmes de
compatibilité (descendante) tous les noms ListBox, ListBoxes, DropDowns,
ComboBox, Check Box, OptionButtons....etc....... peuvent être remplacés par le
nom générique de "DrawingObjects"

AV persuadé qu'une liste de validation correspondrait tout à fait au
problème....

Avatar
microsoft
Bonjour,

Je 'profite' du fil pour un traitement que j'aimerai réaliser:

J'ai une liste de plusieurs centaines de références en colonnes.
En face de chaque référence une famille de produit.

J'aimerai, dans une feuille, voire un classeur annexe, limiter la liste de
choix de la référence en fonction de la famille choisie.
Pour simplifier, le nombre de familles doit rester dynamique.

Je pense que je ne m'en sortirai pas sans Vba.
Et Vba et moi ne sommes pas très copains.
Quelqu'un peut m'aider ?

Merci d'avance.

PG

AV a écrit dans le message :

La ListBox est bien remplie par des valeurs mais je ne peux les faire
défiler et le "déroulant" ne sort pas de la ListBox
En fait tout la LIstBox reste à l'intérieur de la cellule.


Ben parceque c'est justement une ListBox !
Si tu veux "ça le fasse", il faut utiliser une ComboBox qui corrrespond à
"Zone

de liste modifiable" de la barre d'outils Formulaire (puisque c'est ce que
tu

utilises) et que XL connaît sous le nom de "DropDowns"

Une fois que tu as dessiné ta "combo" et adapté les noms :
Sub Initi_ComboBox()
With Sheets("Feuil1").DropDowns("Z_Combo")
.ListFillRange = "Feuil2!$A$1:$A$10"
.ListIndex = 1
.OnAction = "RécupVal2"
End With
End Sub

Sub RécupVal2()
[A2] >
ActiveSheet.DropDowns("Z_Combo").List(Sheets("Feuil1").DropDowns("Z_Combo").

List
Index)
End Sub

** Tu pourrais fort bien te passer d'initialiser la combo par une macro :
Avec ta liste de réf en Feuil2 A2:Ax (A1 étant réservé à l'étiquette de
colonne)

Insertion > nom > définir : "laListe" > fait réf à :
ÞCALER(Feuil2!$A$2;;;NBVAL(Feuil2!$A:$A)-1)
Clic droit sur ta combo > Format de controle > controle > Plage d'entrée :
laListe (ne pas oublier le signe = )
Avantage : tout ajout à la liste sera répercuté automatiquement dans la

combo

sans avoir à réinitialiser
Ensuite par clic droit dessus, tu lui affectes la macro "RécupVal2"

Pour tout savoir (ou presque ;-) sur l'utilisation des contrôles de la
barre

d'outils formulaire :
http://disciplus.simplex.free.fr/classeursxl/av-bo-formulaire.zip

PS (utile ?) : Sur une feuille, pour résoudre d'éventuels problèmes de
compatibilité (descendante) tous les noms ListBox, ListBoxes, DropDowns,
ComboBox, Check Box, OptionButtons....etc....... peuvent être remplacés
par le

nom générique de "DrawingObjects"

AV persuadé qu'une liste de validation correspondrait tout à fait au
problème....









Avatar
AV
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

1 2