OVH Cloud OVH Cloud

ListBox dynamique

6 réponses
Avatar
Coco le bobo
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon dynamique. Je
voudrais détermine la plage de données en trouvant le nombre de ligne et le
nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il faut
utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage avec ces
variables.
J'ai essayé de faire
ListBox.RowSource = Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.

Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide

PS : avant j'utilisais la propriété 'ListBox.List=unTableau_de_valeurs',
mais apparemment, pour utiliser la propriété ListBox.ColumnHeads = True, il
faut définir un rowsource pour avoir le titre des colonnes. Si quelqu'un a
une méthode pour forcer ou du moins initialiser le colonne, je suis prenant
aussi

6 réponses

Avatar
LE CARRE Yannick
Salut Coco,



Coco le bobo a écrit dans le message :
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon dynamique. Je
voudrais détermine la plage de données en trouvant le nombre de ligne et
le

nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il faut
utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage avec
ces

variables.
J'ai essayé de faire
ListBox.RowSource Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.


Essaye :

ListBox.RowSource = Range(Cells(ligne_debut,colonne_debut) & ":" &
Cells(ligne_fin, colonne_fin))


Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide


Bon courage,

Yannick

PS : avant j'utilisais la propriété 'ListBox.List=unTableau_de_valeurs',
mais apparemment, pour utiliser la propriété ListBox.ColumnHeads = True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si quelqu'un a
une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi







Avatar
Misange
Bonjour Coco le bobo ;-)

Dans ta feuille excel, menu insertion/nom/définir, au lieu de faire maplage
= A1:A10, tu écris dans la case du bas
Þcaler(feuil1!$A$1;;;nbval($A:$A)) et tu cliques sur ajouter. Maintenant
si tu recliques dans cette formule tu verras que sont sélectionnées toutes
les valeurs de la colonne A. Si tu en ajoutes en dessous, elles seront
ajoutées automatiquement à ta plage.
Si tu mets un titre à ta colonne, pour ne pas prendre en compte cette
étiquette, tu écris
Þcaler(feuil1!$A$1;;;nbval($A:$A)-1)
D'autres précisions sur decaler dans excelabo, page lexique notamment et
graphiques (graph dynamiques).

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= mail : http://cerbermail.com/?k5Q8Dh2mta




"Coco le bobo" a écrit dans le message de news:
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon dynamique. Je
voudrais détermine la plage de données en trouvant le nombre de ligne et
le

nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il faut
utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage avec
ces

variables.
J'ai essayé de faire
ListBox.RowSource Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.

Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide

PS : avant j'utilisais la propriété 'ListBox.List=unTableau_de_valeurs',
mais apparemment, pour utiliser la propriété ListBox.ColumnHeads = True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si quelqu'un a
une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi







Avatar
bobo le bo
Ce code me génère une erreur, je vais chercher dans ce sens.

Merci bien

"LE CARRE Yannick" *NOSPAM*gemini.fr> a écrit dans le message
de news:%
Salut Coco,



Coco le bobo a écrit dans le message :
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon dynamique.
Je


voudrais détermine la plage de données en trouvant le nombre de ligne et
le

nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il
faut


utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage avec
ces

variables.
J'ai essayé de faire
ListBox.RowSource > Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.


Essaye :

ListBox.RowSource = Range(Cells(ligne_debut,colonne_debut) & ":" &
Cells(ligne_fin, colonne_fin))


Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide


Bon courage,

Yannick

PS : avant j'utilisais la propriété 'ListBox.List=unTableau_de_valeurs',
mais apparemment, pour utiliser la propriété ListBox.ColumnHeads = True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si quelqu'un
a


une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi











Avatar
bobo le bo
Cette fonction là ne marche pas dans une macro non?

"Misange" ù.net> a écrit dans le message de
news:%
Bonjour Coco le bobo ;-)

Dans ta feuille excel, menu insertion/nom/définir, au lieu de faire
maplage

= A1:A10, tu écris dans la case du bas
Þcaler(feuil1!$A$1;;;nbval($A:$A)) et tu cliques sur ajouter. Maintenant
si tu recliques dans cette formule tu verras que sont sélectionnées toutes
les valeurs de la colonne A. Si tu en ajoutes en dessous, elles seront
ajoutées automatiquement à ta plage.
Si tu mets un titre à ta colonne, pour ne pas prendre en compte cette
étiquette, tu écris
Þcaler(feuil1!$A$1;;;nbval($A:$A)-1)
D'autres précisions sur decaler dans excelabo, page lexique notamment et
graphiques (graph dynamiques).

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= > mail : http://cerbermail.com/?k5Q8Dh2mta




"Coco le bobo" a écrit dans le message de news:
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon dynamique.
Je


voudrais détermine la plage de données en trouvant le nombre de ligne et
le

nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il
faut


utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage avec
ces

variables.
J'ai essayé de faire
ListBox.RowSource > Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.

Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide

PS : avant j'utilisais la propriété 'ListBox.List=unTableau_de_valeurs',
mais apparemment, pour utiliser la propriété ListBox.ColumnHeads = True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si quelqu'un
a


une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi











Avatar
Misange
Tu peux tout à fait utiliser decaler (=offset) par macro mais ce n'est pas
ce que je te préconise ici : tu définis une fois pour toutes dans la feuille
excel les noms *dynamiques* de tes plages en utilisant la fonction decaler.
Ensuite dans le code de ta macro tu fais appel à ces noms pour remplir tes
listes :
listbox1.rowsource=("feuil1!maplage")
c'est assez facile à relire en plus comme code et bien plus compact que les
machin.end xl bidule...
La seule contrainte c'est que dans les colonnes qui vont servir à définir
tes plages de données source tu ne dois pas mettre de trous ni mettre
autrechose qui ne soit en rapport vu que la fonction calcule le nombre de
lignes à prendre en compte à partir du nombre total d'éléments inscrits dans
la colonne...
mais cette façon de procéder est de mon point de vue et de loin la plus
simple à réaliser quand tu as ce pb de sources de données vaiables.

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= mail : http://cerbermail.com/?k5Q8Dh2mta




"bobo le bo" a écrit dans le message de news:
bmf2ee$vc5$
Cette fonction là ne marche pas dans une macro non?

"Misange" ù.net> a écrit dans le message de
news:%
Bonjour Coco le bobo ;-)

Dans ta feuille excel, menu insertion/nom/définir, au lieu de faire
maplage

= A1:A10, tu écris dans la case du bas
Þcaler(feuil1!$A$1;;;nbval($A:$A)) et tu cliques sur ajouter.
Maintenant


si tu recliques dans cette formule tu verras que sont sélectionnées
toutes


les valeurs de la colonne A. Si tu en ajoutes en dessous, elles seront
ajoutées automatiquement à ta plage.
Si tu mets un titre à ta colonne, pour ne pas prendre en compte cette
étiquette, tu écris
Þcaler(feuil1!$A$1;;;nbval($A:$A)-1)
D'autres précisions sur decaler dans excelabo, page lexique notamment et
graphiques (graph dynamiques).

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= > > mail : http://cerbermail.com/?k5Q8Dh2mta




"Coco le bobo" a écrit dans le message de news:
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon
dynamique.



Je
voudrais détermine la plage de données en trouvant le nombre de ligne
et



le
nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il
faut


utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage
avec



ces
variables.
J'ai essayé de faire
ListBox.RowSource > > Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.

Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide

PS : avant j'utilisais la propriété
'ListBox.List=unTableau_de_valeurs',



mais apparemment, pour utiliser la propriété ListBox.ColumnHeads True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si
quelqu'un



a
une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi















Avatar
bobo le bo
Merci pour votre aide. Après quelques réflexions et quelques recherches,
j'ai pu trouver une solution qui convenait à mes besoins. En fait on peut
déterminer la lettre de la colonne d'une cellule avec
Colonne = Left$(maCells(ligne_colonne).Address(0, 0),
(Cells(ligne,colonne).Column < 27) + 2)
ainsi je n'ai plus qu'à faire une concaténation pour obtenir un chaine de la
forme "a1:b5" par exemple.

Voilà, ça peut ptet servir, et encore merci



"Misange" ù.net> a écrit dans le message de
news:
Tu peux tout à fait utiliser decaler (=offset) par macro mais ce n'est pas
ce que je te préconise ici : tu définis une fois pour toutes dans la
feuille

excel les noms *dynamiques* de tes plages en utilisant la fonction
decaler.

Ensuite dans le code de ta macro tu fais appel à ces noms pour remplir tes
listes :
listbox1.rowsource=("feuil1!maplage")
c'est assez facile à relire en plus comme code et bien plus compact que
les

machin.end xl bidule...
La seule contrainte c'est que dans les colonnes qui vont servir à définir
tes plages de données source tu ne dois pas mettre de trous ni mettre
autrechose qui ne soit en rapport vu que la fonction calcule le nombre de
lignes à prendre en compte à partir du nombre total d'éléments inscrits
dans

la colonne...
mais cette façon de procéder est de mon point de vue et de loin la plus
simple à réaliser quand tu as ce pb de sources de données vaiables.

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= > mail : http://cerbermail.com/?k5Q8Dh2mta




"bobo le bo" a écrit dans le message de news:
bmf2ee$vc5$
Cette fonction là ne marche pas dans une macro non?

"Misange" ù.net> a écrit dans le message de
news:%
Bonjour Coco le bobo ;-)

Dans ta feuille excel, menu insertion/nom/définir, au lieu de faire
maplage

= A1:A10, tu écris dans la case du bas
Þcaler(feuil1!$A$1;;;nbval($A:$A)) et tu cliques sur ajouter.
Maintenant


si tu recliques dans cette formule tu verras que sont sélectionnées
toutes


les valeurs de la colonne A. Si tu en ajoutes en dessous, elles seront
ajoutées automatiquement à ta plage.
Si tu mets un titre à ta colonne, pour ne pas prendre en compte cette
étiquette, tu écris
Þcaler(feuil1!$A$1;;;nbval($A:$A)-1)
D'autres précisions sur decaler dans excelabo, page lexique notamment
et



graphiques (graph dynamiques).

--
Misange migrateuse http://www.excelabo.net
==Disciplus a migré chez excelabo !======= > > > mail : http://cerbermail.com/?k5Q8Dh2mta




"Coco le bobo" a écrit dans le message de news:
bmeduu$pnk$
Bonjour,

je souhaiterai créer dans un formulaire une ListBox de façon
dynamique.



Je
voudrais détermine la plage de données en trouvant le nombre de
ligne




et
le
nombre de colonne pour un onglet donné. Ca c'est bon, mais après, il
faut


utiliser la commande :
ListBox.RowSource = maPlage
où maPlage doit être de la forme "a1:c10"
Moir j'utilise des variable ligne_debut, ligne_fin, colonne_debut,
colonne_fin sous forme d'entier. Comment dois-je formater ma plage
avec



ces
variables.
J'ai essayé de faire
ListBox.RowSource > > > Range(Cells(ligne_debut,colonne_debut),Cells(ligne_fin,
colonne_fin)) et ça ne marche pas.

Quelqu'un aurait-il une idée pour résoudre ce problème?

Merci beaucoup pour votre aide

PS : avant j'utilisais la propriété
'ListBox.List=unTableau_de_valeurs',



mais apparemment, pour utiliser la propriété ListBox.ColumnHeads > True,
il

faut définir un rowsource pour avoir le titre des colonnes. Si
quelqu'un



a
une méthode pour forcer ou du moins initialiser le colonne, je suis
prenant

aussi