Bonjour à tous,
Comment puis-je rendre autosize le redimensionnement des colonnes
d'une ListBox ?
Voila un début.
http://cjoint.com/?kxnQCAG3Lf
Merci.![]()
Bonjour à tous,
Comment puis-je rendre autosize le redimensionnement des colonnes
d'une ListBox ?
Voila un début.
http://cjoint.com/?kxnQCAG3Lf
Merci.![]()
Tout dépend du format des caractères utilisé dans tes listbox (font)
La formule "Taille des caractères * Nombre de caractères pour le mot le plus long" devrait pouvoir t'aider à régler le problème.
Une boucle sur tous les mots inclus dans la liste serait nécessaire (!)
Ça devrait donner un truc comme ça
7 étant une valeur empirique que tu devras adapter en tâtonnant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub UserForm_Activate() Dim i As Integer, nbcar As Byte For i = 0 To ListBox1.ListCount - 1 If Len(ListBox1.List(i)) > nbcar Then nbcar = Len(ListBox1.List(i)) End If Next ListBox1.Width = 7 * nbcar Me.Repaint End Sub
C'est le bricolage le moins lourd que je connaisse
Toute autre solution plus sioux m'intéresserait également![]()
Bonjour, Ousk,
La solution "de sioux" sous VB6 est ultrasimple.
Sous VBA, maintenant ?
Là, il va falloir mettre une oreille à terre et écouter les vibrations ...
Ah ... Les voilà, justement ... et elles me disent :
-utilier un Label invisible avec la même Font et taille de Font et sa propriété Autosize à True
- envoyer dans son caption le texte le plus long
- mesurer maintenant sa taille (Width)
Et vla tout : on connait maintenant cette largeur ...
Bonjour à tous,
ouskel'n'orJ'ai deja essayé avec l'idée des caracteres, mais je n'arrive toujours pas
![]()
ucfoutuEn PJ un exemple avec des Label.
Mais pas encore réussi![]()
Bonjour ucfoutu,
D'accord, le voila mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Private Sub UserForm_Initialize() Dim Plg As Range, Cw1 As Long, Cw2 As Long ReDim Tablo(1, 0) Set Plg = Range([B2], [B2].End(xlDown)) Cw1 = 0: Cw2 = 0 S1 = "": S2 = "" For Each Lg In Plg Tablo(0, UBound(Tablo, 2)) = Lg Tablo(1, UBound(Tablo, 2)) = Format(Lg.Offset(0, 1), "# ##0.00") If Len(Lg) > Len(S1) Then S1 = Lg If Len(Lg.Offset(0, 1)) > Len(S2) Then S2 = Lg.Offset(0, 1) ReDim Preserve Tablo(1, UBound(Tablo, 2) + 1) Next Lg ReDim Preserve Tablo(1, UBound(Tablo, 2) - 1) Label1.Caption = S1 Label2.Caption = S2 Cw1 = Label1.Width Cw2 = Label2.Width With ListBox1 .Width = 20 + (Cw1 + Cw2) ' .ColumnCount = 2 'prévoir d'avance pour ci-dessous .ColumnWidths = Cw1 & ";" & Cw2 .List = Application.Transpose(Tablo) .MultiSelect = 2 .BackColor = RGB(204, 204, 255) End With Me.Width = ListBox1.Width + 20 CommandButton1.Left = (Me.Width / 2) - (Me.CommandButton1.Width / 2) End Sub![]()
Partager