IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Philippe Tulliez

VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox

Noter ce billet
par , 22/03/2022 à 12h13 (4398 Affichages)
Préambule

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 ; ?"

Nom : ListBox - MultiSelect - Function GetSelectedValues.png
Affichages : 4214
Taille : 48,1 Ko

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
Important : Lorsque la propriété MultiSelect est définie sur Étendue ou Multi, nous devons utiliser la propriété Selected de la zone de liste pour déterminer les éléments sélectionnés. De plus, la propriété Value du contrôle est toujours Null

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 - 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
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
Le code du UserForm

Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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 - 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
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

Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Viadeo Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Twitter Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Google Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Facebook Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Digg Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Delicious Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog MySpace Envoyer le billet « VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox » dans le blog Yahoo

Mis à jour 03/04/2022 à 17h56 par Philippe Tulliez

Catégories
VBA Excel

Commentaires