ListBox.Height.Auto

Bonjour le forum

Voilà le sujet :

Je travail sur une base de données. Cette dernière est "manipulée" via un ListBox sur un UserForm. Pour des raisons technique je ne peux pas alimenter le ListBox via un .RowSrouce. Je souhaite cependant avoir un visu sur le nom des colonnes. L'astuce est donc d'insérer un ListBox dans un Frame, de générer des Label de manière dynamique en ligne (un Label par colonne), d'ajuster la largeur du ListBox via le dernier Label ajouté et pour finir d'ajouter un ScrollBar horizontal sur le Frame de la largeur du ListBox. Bref, jusqu'ici tout va bien (voir le code dans le fichier en PJ)

Dans mon cas la largeur du ListBox dépasse celle du Frame. Ce qui implique que si je veux descendre dans le ListBox je suis obligé daller tout à gauche avec le scroll horizontal du Frame puis d'utiliser le ScrollBar vertical du Listbox. Je trouve ça chiant (âme de développeur naissante )

Je suis donc à la rechercher d'une astuce pour ajuster automatiquement la hauteur du ListBox et de générer un ScrollBar vertical sur le Frame de la hauteur du ListBox, un peu comme ce que j'ai fait pour la partie horizontale.

J'espère avoir été clair dans ma demande. Par avance, merci de l'interet porté au sujet

102listbox-autosize.xlsm (32.39 Ko)

Bonjour il manque l'info d'ajustement en largeur dans votre code : exemple NewCtrl.Width = 50

 NewCtrl.Top = 0: NewCtrl.Left = 0: NewCtrl.Width = ColWidth: NewCtrl.Height = 25: NewCtrl.Width = 50: NewCtrl.Font.Size = 8

Bonjour à tous,

Une version qui permet le défilement de la souris ...

Il suffit de sélectionner un élément de la listbox > puis le défilement de la souris fonctionnera ...

ric

Bonjour Ric

j'aurai bien voulu voir ce que celà donne, malheureusement tu n'as indiqué que les paramètres de fonction 32bits.

Bonjour Xmenpl, Je n'ai pas oublié le paramètre .Width, il est géré avec ma variable ColWidth (ayant pour valeur 80 par défaut dans mon code)
Bonjour ric, alors oui le défilement à la souris fonctionne mais ce n'est pas le moyen que je veux utiliser. En tout cas ce bout de code est géniale, je vais le garder très précieusement

Vous trouverez un exemple de résultat final que j'aimerai obtenir.

Au départ j'avais pensé à fair une boucle do while / loop en augmentant la hauteur du Listbox tant que la valeur du ScrollHeigh du n'est pas égale à zéro. Mais impossible à ma connaissance de récupérer cette info, c'est pour ça que je cherche désespérément une autre technique

Bonjour, je relance le sujet, personne ?

Bonjour,

Devant ton désespoir > je me lance ...

Un essai ...

ric

Bonjour ric, merci de ta pitié
Malheureusement, je suis au regret de t'annoncer que ça ne marche pas vraiment
Comme tu va le voir sur le .gif ci-dessous le ListBox ne s'ettend pas sur sa hauteur total, ce qui fait que le ScrollBar du Frame n'a pas vraiment d'utilité.
Comme je ne sais pas si j'ai été clair dans ma question initiale j'essaie de reformuler : Comment obtenir la hauteur optimale d'un ListBox pour que toutes les lignes soient affichées ?

Après le principe est là, une fois la hauteur ajustée, là je réglerais la hauteur du scroll du Frame pour correspondre à la hauteur du Listbox.
autosize

Bonjour,

Ce n'est pas de la pitié > c'est de l'empathie ...

Ce n'est pas parfait ...

Les tests sur 28, 60 et 150 lignes restent passables ...

Ces nombres de lignes correspondent au nombre de lignes du Range("DATAS") lors de chaque test ...

Un autre essai ...

ric

C'est intéressant ! J'avais réfléchis au départ à une solution similaire. Compter le nombre de ligne dans DATAS et le multiplier par la hauteur par défaut d'une ligne d'un Listbox. Mais j'ai vite abandonné l'idée. Je me suis dit que pour moi ça marche mais après tout dépend de la resolution ou du zoom de l'écran pour un autre l'utilisateur.

J'ai donc une question. Tu te base sur la taille des caractère sur la feuille Excel. Ne serait-il pas plus judicieux de se baser sur la taille des caractères dans le Listbox (car j'imagine que la police et la taille par défaut du Listbox pourrais jouer sur la dimension finale) ?

L'utilisation de la taille des caractère permet-il d'éviter le "problème" de resolution ou du zoom d'un écran ?

Note : j'ai pas l'impression qu'utiliser Me.ListBox1.Height = (ListBox1.ListCount * Me.ListBox1.Font.Size) soit mieux

En tout cas bravo, ta solution permet de grandement avancer vers une solution

Rechercher des sujets similaires à "listbox height auto"