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

615841

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

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

Option Explicit

Private Sub cmdCancel_Click()
Me.Hide
End Sub

Private Sub cmdOk_Click()
Me.Hide
End Sub


Comment l'invoquer ?
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.

Vous avez lu gratuitement 3 462 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

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