
Question souvent posée sur les forums, "Comment obtenir une chaîne de caractères contenant l'ensemble des éléments sélectionnés dans un ListBox séparés par un ; ?"
Rappel
Pour pouvoir effectuer de la multi-sélection dans un contrôle ListBox, il y a lieu de le définir dans la propriété MultiSelect
La propriété MultiSelect peut prendre l'une des trois valeurs qui suivent
Constante | Valeur | Description |
fmMultiSelectSingle | 0 | Un seul élément peut être sélectionné (valeur par défaut) |
fmMultiSelectMulti | 1 | Un clic ou un appui sur la barre d’espacement permet de sélectionner ou de désélectionner un élément de la liste |
fmMultiSelectExtended | 2 | Combinaison de la touche Shift (Maj) ou Ctrl avec le clic de la souris. Shift + Clic permet d’étendre la sélection de l’élément précédemment sélectionné jusqu’à l’élément en cours Ctrl + Clic permet de sélectionner ou de désélectionner un élément |
La propriété LifeStyle : Dans un ListBox, en mettant 1 (fmListStyleOption) comme valeur à cette propriété on affiche des boutons "Options" ou des "Cases à cocher" pour une liste à sélections multiples (Voir l'illustration ci-dessus)
Code de la procédure
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Function GetSelectedValues(oListBox As MSForms.ListBox) As String ' Renvoie une chaîne de caractères contenant tous les éléments sélectionnés dans un ListBox MultiSelected ' Philippe Tulliez https://magicoffice.be ' Argument ' oListBox Contrôle ListBox concerné Dim Elem As Integer, Count As Integer Dim tbl As Variant ' Charge les éléments sélectionnés dans une table With oListBox For Elem = 0 To .ListCount - 1 If .Selected(Elem) Then If Count Then ReDim Preserve tbl(Count) Else ReDim tbl(Count) tbl(Count) = .List(Elem) Count = Count + 1 End If Next End With If IsArray(tbl) Then GetSelectedValues = Join(tbl, ";") End Function |
Les contrôles utilisés
Contrôle | Nom |
UserForm | usf_MultiSelect |
ListBox | ListBox1 |
CommandButton | cmdOk |
CommandButton | cmdCancel |
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | Option Explicit Private Sub cmdCancel_Click() Me.Hide End Sub Private Sub cmdOk_Click() Me.Hide End Sub |
Comment l'invoquer ?
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Sub Main_Select() Const TableName As String = "t_Fruit" ' Nom de la table utilisée comme liste Const LinkedCellName As String = "LinkedCell" ' Nom de la cellule cible Dim rng As Range Dim msg As String Set rng = Range(TableName) With usf_MultiSelect With .ListBox1 .ColumnWidths = mUserForm_Manager.GetColumnWidths(rng) .ColumnCount = rng.Columns.Count .List = rng.Value .MultiSelect = fmMultiSelectMulti ' Définit la multisélection .ListStyle = fmListStyleOption ' Style Case à cocher End With .Show msg = GetSelectedValues(.ListBox1) MsgBox IIf(Len(msg), msg, "Pas de sélection"), Title:="Résultat de la sélection" End With Unload usf_MultiSelect Set rng = Nothing End Sub |
Ressources
Voici une liste de tutoriels ou billets en rapport avec cet article.
- VBA - Fonction qui sélectionne les éléments d'un ListBox (MultiSelect) en fonction d'une chaîne de caractères
- Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
- Utiliser les UserForm en VBA Excel
- Utiliser les contrôles dans un UserForm, en VBA Excel
Vous avez lu gratuitement 479 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.