AutoSize des colonnes d'une ListBox

apt

XLDnaute Impliqué
Bonjour à tous,

Je devrais alimenté une ListBox depuis un tableau, et j'aimerais bien avoir un auto ajustement des colonnes de ma liste selon la largeur des données du tableau.

Merci.
 

DDalmont

XLDnaute Junior
Re : AutoSize des colonnes d'une ListBox

Bonjour apt, le forum

A adapter

Dim a As Range, x, b, tablo
For x = 1 To 3 'pour 3 colonnes
Set a = Feuil1.Cells(1, x)
b = b & ";" & a.ColumnWidth * 5 'A adapter suivant police
Next
b = Mid(b, 2)
ListBox1.ColumnWidths = b
tablo = Feuil1.Range("a1:c10")
ListBox1.List = tablo

Cordialement
 

DDalmont

XLDnaute Junior
Re : AutoSize des colonnes d'une ListBox

Re

Une petite correction


Dim a As Range, x, b, tablo
For x = 1 To 3 'pour 3 colonnes
Set a = Feuil1.Cells(1, x)
b = b & ";" & a.Width + 3 'A adapter suivant police
Next
b = Mid(b, 2)
ListBox1.ColumnWidths = b
tablo = Feuil1.Range("a1:c10")
ListBox1.List = tablo

Cordialement
 

apt

XLDnaute Impliqué
Re : AutoSize des colonnes d'une ListBox

Bonjour DDalmant,

Merci mais j'ai bien un tableau et non pas une plage à traiter.

Mon tableau va de tablo(0,1) à tablo(0,n)

Et de tablo(1,1) à tablo(1,n)

Comment trouver le nombre de colonnes avec leurs largeurs respectives depuis tablo() pour dimensionner la ListBox ?

Merci.
 

skoobi

XLDnaute Barbatruc
Re : AutoSize des colonnes d'une ListBox

Bonjour DDalmont, apt,

Pour le nombre de colonne d'un tableau VBA (2eme dimension du tableau ici)
Code:
Ubound(tablo, 2)
Par contre, il n'est pas possible de connaitre la largeur d'une colonne d'un tableau VBA mais il est possible de connaître le nombre de caractère du plus grand élément qu'il contient.
 

apt

XLDnaute Impliqué
Re : AutoSize des colonnes d'une ListBox

Bonsoir skoobi,

Pour l'exemple, j'ai réussi à coder ces quelques lignes.

Mais l'auto ajustement des colonnes de la ListBox, ne se fait toujours pas !!!! :mad:

Que me manque-t-il :confused:

Merci.
 

Pièces jointes

  • Autosize_ListBox_v1.zip
    12.7 KB · Affichages: 154

skoobi

XLDnaute Barbatruc
Re : AutoSize des colonnes d'une ListBox

Re bonjour,

le soucis c'est que la largeur d'un contrôle s'exprime en point pas en largeur de caractères...
Il faut "bricoler" en faisant des tests en multipliant la largeur du texte.
Cw1 * 4 et Cw2 * 5 a l'air de donné de bon résultat:
Code:
ListBox1.Width = 30 + Cw1 * 4 + Cw2 * 5
    .ColumnWidths = Cw1 * 4 & ";" & Cw2 * 5
Il me semble que l'on peut changer l'unité de dimension (point, inch ...) des contrôles mais je ne trouve pas:eek:.

PS: en fait il faudrait connaître la largeur d'un caractère en point dans un contrôle, si quelqu'un connaît cette valeur....
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : AutoSize des colonnes d'une ListBox

re:

le problème pour la largeur dépend de la police utilisée !?
il faut mettre une police où tous les caractères ont la même largeur.
soit la police "Courier New" avec Size 8 et un multiplicateur de 6

voir avec cet exemple mieux adapté !
 

Pièces jointes

  • LargListBoxAuto.xls
    33.5 KB · Affichages: 143
  • LargListBoxAuto.xls
    33.5 KB · Affichages: 144
  • LargListBoxAuto.xls
    33.5 KB · Affichages: 181
Dernière édition:

apt

XLDnaute Impliqué
Re : AutoSize des colonnes d'une ListBox

Bonjour Roland, le forum,

1) Ne peut-on pas trouver une valeur pour remplacer "Taille" en rapport entre la taille des caractères dans les cellules et celle des caractères dans la ListBox ? parce qu’on est obligé à chaque fois d'élargir au mieux la ListBox pour pouvoir afficher toutes ces colonnes.

2) la largeur "ColumnWidths" des colonnes d'une ListBox est donnée en pt. Alors quelle est la mesure "Font.Size" des caractères ?

Merci.
 

Roland_M

XLDnaute Barbatruc
Re : AutoSize des colonnes d'une ListBox

re:

1) Ne peut-on pas trouver une valeur pour remplacer "Taille" en rapport entre la taille des caractères dans les cellules et celle des caractères dans la ListBox ? parce qu’on est obligé à chaque fois d'élargir au mieux la ListBox pour pouvoir afficher toutes ces colonnes.

comprend pas !? c'est ce que tu voulais adapter la largeur de ListBox !?
peu importe la police et la taille dans les cellules, ils n'ont aucun rapport dans la ListBox !?
et puis comme je l'ai dis la longueur du texte n'a rien à voir avec le nombre de caractères ! ci-dessous 10 i et 10 m ! ils n'auront pas la même longueur à l'affichage !?
iiiiiiiiii
mmmmmmmmmm
mais avec la police Courier New on a la même longueur !

2) la largeur "ColumnWidths" des colonnes d'une ListBox est donnée en pt. Alors quelle est la mesure "Font.Size" des caractères ?

eh bien oui ! là encore c'est pour cela qu'il faut:
une police "Courier New" pour avoir tous les caractères de même longueur à l'affichage !
ici Taille de police 8 et le multiplicateur de 6 à cause des Pt

si tu veux changer la taille il faut faire des essais avec le multiplicateur !
 

apt

XLDnaute Impliqué
Re : AutoSize des colonnes d'une ListBox

Bonsoir Roland,

-Donc la police "Courier New" est la seule qui règle le problème ?

-Est-ce qu'il est nécessaire d'ajouter un "+20" dans la largeur de la ListBox ?

-On voit parfois des espaces entre les colonnes, est-ce normal ?

-Les chiffres sont alignés à gauche au lieu d'avoir une format "Comptabilité" est alignés selon cette format ?

Je m'excuse, mais j'aimerais comprendre le code et ainsi le résultat obtenu :

Merci d’avance.
 

Roland_M

XLDnaute Barbatruc
Re : AutoSize des colonnes d'une ListBox

Bonsoir,

réponse à tes questions (-)
-Donc la police "Courier New" est la seule qui règle le problème ?
oui ! tu peux faire un essai pour voir le comportement du texte dans Word avec différente police (peut être en trouveras tu une autre !? (mais courier new est dispo partout)

-Est-ce qu'il est nécessaire d'ajouter un "+20" dans la largeur de la ListBox ?
oui ! c’est pour l'ascenseur quand la liste est plus longue que l'affichage visible ! (+20 voir+25)

-On voit parfois des espaces entre les colonnes, est-ce normal ?
oui ! il n'est pas évident d'être aussi précis en rapport police et Pt !

-Les chiffres sont alignés à gauche au lieu d'avoir une format "Comptabilité" est alignés selon cette format ?
comprend pas la question !? mais si c'est pour l'alignement dans listbox tout est en texte !

revoir explication du code
 

Pièces jointes

  • LargListBoxAuto.xls
    34.5 KB · Affichages: 205
  • LargListBoxAuto.xls
    34.5 KB · Affichages: 213
  • LargListBoxAuto.xls
    34.5 KB · Affichages: 224

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 886
Membres
103 404
dernier inscrit
sultan87