par , 03/04/2022 à 09h47 (5500 Affichages)
Introduction
Dans un billet précédent, titré VBA - Fonction qui renvoie une chaîne de caractères des éléments sélectionnés dans un ListBox , j'ai publié une fonction nommée GetSelectedValues qui renvoie une chaîne de caractères reprenant tous les éléments sélectionnés dans un ListBox séparés par un ";".
Dans ce billet, je vous propose un fonction nommée SetSelectedValues qui sélectionne dans le ListBox tous les éléments, séparés par un ";", présents dans une chaîne de caractères.
Code de la procédure
Il suffit de passer à la fonction SetSelectedValues, les deux arguments oList et Value pour que la sélection s'effectue dans le ListBox
Exemple : SetSelectedValues ListBox1, "Poire;Cerise;Abricot;Raisin"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Function SetSelectedValues(oListBox As MSForms.ListBox, Optional Value As String)
' Modifie la propriété Selected du ListBox (True = Sélectionné)
' Arguments
' oListBox ' Objet ListBox
' [Value] ' Valeurs à sélectionner séparés par ";"
' Philippe Tulliez (https://MagicOffice.be)
'
' Déclaration des variables
Dim Tv As Variant ' Valeurs à sélectionner
Dim Tl As Variant ' Table de la liste
Dim Tf As Variant ' Table filtrée
Dim Elem As Integer
If Len(Value) Then
Tv = Split(Value, ";")
With oListBox
Tl = .List ' Charge la Liste du ListBox
For Elem = 0 To UBound(Tl)
Tf = Filter(Tv, Tl(Elem, 0), True)
.Selected(Elem) = UBound(Tf) > -1 ' Modifie la valeur de la propriété
Next
End With
End If
End Function |
Code d'une procédure qui l'invoque
Exemple utilisé
Un UserForm nommé usf_MultiSelect contenant un ListBox nommé ListBox1
La liste du ListBox est alimentée par la table structurée nommée t_Fruit
La cellule nommée LinkedCell est celle qui contient à la fois la chaîne de caractères qui sert de valeur pour l'argument Value de la procédure SetSelectedValues et le résultat renvoyé par la fonction GetSelectedValues (voir les liens plus bas)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Sub Main()
' Philippe Tulliez htts://MagicOffice.be
' Déclaration et assignation des constantes & variables
Const TableName As String = "t_Fruit" ' Nom de la table utilisée comme liste
Const LinkedCellName As String = "LinkedCell" ' Nom de la cellule source & cible
Dim Rng As Range
Dim Msg As String
Set Rng = Range(TableName)
'
With usf_MultiSelect
With .ListBox1
.ColumnWidths = GetColumnWidths(Rng)
.ColumnCount = Rng.Columns.Count
.List = Rng.Value
.MultiSelect = fmMultiSelectMulti ' Définit la multisélection
.ListStyle = fmListStyleOption ' Style Case à cocher
End With
SetSelectedValues .ListBox1, Range(LinkedCellName)
.Show
If .IsOk Then Range("LinkedCell").Value = GetSelectedValues(.ListBox1)
End With
Unload usf_MultiSelect
Set Rng = Nothing
End Sub |
Liens vers les articles traitant des fonctions génériques utilisées dans la procédure ci-dessus
Illustration
Ressources
Voici une liste de tutoriels ou billets en rapport avec cet article.