OVH Cloud OVH Cloud

Format Listbox

3 réponses
Avatar
choko
Bonjour,

Est-t-il possible d'avoir un listbox dont la taille varie selon les listes
qui l'alimentent ?

3 réponses

Avatar
Steph
Tu trouveras une solution sur cette page

http://www.excelabo.net/xl/controles.php#listedynamique

Bien à vous,

Steph
Avatar
Michel Gaboly
Bonjour,

Bien sûr ;-))

Il faut ajuster la propriété Height du ListBox dans l'Initialize.

Voici un exemple. Crée un UserForm dont la hauteur (propriété Height)
est de 260, avec un ListBox nommé LTest avec les proriétés Top = 8 et
Height = 186, et 2 boutons nommés BOK et BAnnuler placés sous le
ListBox (Top = 200).

Nomme Source une plage de cellules de la feuille active lors du lance-
ment du UserForm, contenant au moins 15 lignes.

Associe ce code à l'Initialize :

Private Sub UserForm_Initialize()
LTest.List = Range("Source").Value
End Sub

Je préfère cette technique, car elle fonctionne sur Mac comme sur PC,
amors que RowSource n'est pas disponible pour les versions Mac.

Affiche le UserForm. Le ListBox affiche 15 lignes avec un ascenseur
vertical si la plage Source comporte 3 de 15 lignes (NB - le nb de
lignes visibles dépend de la police utilisée et de la plate-forme ;
avec la même police, la taille des contrôles varie entre Mac et PC,
avec un encombrement nettement supérieur sous Windows).
Toutes les valeurs indiquées dans mon exemple correspondent à
Excel 98 pour Mac, mais les pricipes sont applicables aux versions
Win.

Modifie ainsi la procédure :

Private Sub UserForm_Initialize()
Dim Ref As Integer
With Range("Source")
Ref = 12 * .Rows.Count + 6
LTest.Height = Ref
LTest.List = .Value
End With
BOK.Top = Ref + 14
BAnnuler.Top = Ref + 14
Me.Height = Ref + 74
End Sub

Réaffiche le UserForm. Il s'adapte au nombre de lignes de la plage
"Source" : la hauteur du ListBox, le positiopn des 2 boutons et la
hauteur du UserForm dépendent du nb de lignes de "Source".

Cependant, si "Source" contient un très grand nombre de lignes,
la hauteur des éléments et la position des boutons seront incompa-
tibles avec la résolution des écrans (par exemple avec 200 lignes,
la propriété Top des boutons serait de 2420).

Il faut donc limiter la valeur maxi de Ref, à environ 720 par exemple :

Private Sub UserForm_Initialize()
Dim Ref As Integer
With Range("Source")
Ref = 12 * Application.WorksheetFunction.Min(.Rows.Count, 60) + 6
LTest.Height = Ref
LTest.List = .Value
End With
BOK.Top = Ref + 14
BAnnuler.Top = Ref + 14
Me.Height = Ref + 74
End Sub




Bonjour,

Est-t-il possible d'avoir un listbox dont la taille varie selon les listes
qui l'alimentent ?


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
choko
Un grand merci pour vos éclaircissements.

Choko

"Michel Gaboly" a écrit dans le message de news:

Bonjour,

Bien sûr ;-))

Il faut ajuster la propriété Height du ListBox dans l'Initialize.

Voici un exemple. Crée un UserForm dont la hauteur (propriété Height)
est de 260, avec un ListBox nommé LTest avec les proriétés Top = 8 et
Height = 186, et 2 boutons nommés BOK et BAnnuler placés sous le
ListBox (Top = 200).

Nomme Source une plage de cellules de la feuille active lors du lance-
ment du UserForm, contenant au moins 15 lignes.

Associe ce code à l'Initialize :

Private Sub UserForm_Initialize()
LTest.List = Range("Source").Value
End Sub

Je préfère cette technique, car elle fonctionne sur Mac comme sur PC,
amors que RowSource n'est pas disponible pour les versions Mac.

Affiche le UserForm. Le ListBox affiche 15 lignes avec un ascenseur
vertical si la plage Source comporte 3 de 15 lignes (NB - le nb de
lignes visibles dépend de la police utilisée et de la plate-forme ;
avec la même police, la taille des contrôles varie entre Mac et PC,
avec un encombrement nettement supérieur sous Windows).
Toutes les valeurs indiquées dans mon exemple correspondent à
Excel 98 pour Mac, mais les pricipes sont applicables aux versions
Win.

Modifie ainsi la procédure :

Private Sub UserForm_Initialize()
Dim Ref As Integer
With Range("Source")
Ref = 12 * .Rows.Count + 6
LTest.Height = Ref
LTest.List = .Value
End With
BOK.Top = Ref + 14
BAnnuler.Top = Ref + 14
Me.Height = Ref + 74
End Sub

Réaffiche le UserForm. Il s'adapte au nombre de lignes de la plage
"Source" : la hauteur du ListBox, le positiopn des 2 boutons et la
hauteur du UserForm dépendent du nb de lignes de "Source".

Cependant, si "Source" contient un très grand nombre de lignes,
la hauteur des éléments et la position des boutons seront incompa-
tibles avec la résolution des écrans (par exemple avec 200 lignes,
la propriété Top des boutons serait de 2420).

Il faut donc limiter la valeur maxi de Ref, à environ 720 par exemple :

Private Sub UserForm_Initialize()
Dim Ref As Integer
With Range("Source")
Ref = 12 * Application.WorksheetFunction.Min(.Rows.Count, 60) +
6
LTest.Height = Ref
LTest.List = .Value
End With
BOK.Top = Ref + 14
BAnnuler.Top = Ref + 14
Me.Height = Ref + 74
End Sub




Bonjour,

Est-t-il possible d'avoir un listbox dont la taille varie selon les
listes
qui l'alimentent ?


--
Cordialement,

Michel Gaboly
http://www.gaboly.com