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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

VBA EXCEL - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox,
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

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


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
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
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.

Une erreur dans cette actualité ? Signalez-nous-la !