Bonjour,
Voici une nouvelle version du contrôle UserForm (CRUD) tenant en compte les différentes questions et réponses apportées sur le sujet.
La dernière modification (version 3,1) contient une cellule avec des éléments sélectionnés dans une liste de loisirs nommé lstHobby se trouvant dans une feuille nommée [ParamList]
Les procédures ajoutées
InitListBox Alimente le contrôle ListBox nommé lstHobby toutes les lignes de la liste nommée lstHobby (se trouvant dans la feuille ParamList) et est chargée lors de l'activation du UserForm
1 2 3 4 5 6 7 8
| Private Sub InitListBox()
With Me.lstHobby
.ColumnHeads = False: .ColumnCount = 1: .ColumnWidths = "3"
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption ' case à cocher
.RowSource = Range("lstHobby").Address(external:=True)
End With
End Sub |
JoinSelectedRows : Procédure qui renvoie dans une chaîne de caractères, les éléments sélectionnés dans le ListBox séparés par ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Function JoinSelectedRows(objListBox As Control, Optional Separator As String = ";") As String
' Limite de la fonction
' Maximum de lignes sélectionnée 256
' Author : Philippe Tulliez (10/03/2013)
' Renvoie une chaîne de caractères des éléments sélectionnés
' dans le ListBox (argument objListBox)
' et séparé par le caractère défini par l'argument [Separator]
' Arguments
' objListBox (Objet de type ListBox)
' [Separator] (string) par défaut ;
Dim Tablo(), ColumnNumber As Byte, Elem As Byte, Ind As Byte
If TypeName(objListBox) <> "ListBox" Then
MsgBox "L'argument objLstBox (" & objListBox.Name & ") n'est pas un ListBox": Exit Function
End If
With objListBox
For Elem = 0 To .ListCount - 1
If .Selected(Elem) = True Then ' Teste si la ligne du ListBox a été sélectionnée
ReDim Preserve Tablo(Ind)
Tablo(Ind) = .List(Elem, ColumnNumber): Ind = Ind + 1
End If
Next Elem
End With
JoinSelectedRows = Join(Tablo, Separator) ' Valeur renvoyée
End Function |
ListBoxSelected : Procédure qui modifie la propriété Selected de l'objet ListBox passé en argument de la fonction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Function ListBoxSelected(objListBox As Object, wRng As Range)
' Modifie la propriété Selected() de l'objet ListBox passé en argument
' Author : Philippe Tulliez (10/03/2013)
' Arguments
' objListBox (Objet de type ListBox)
' wRng (Objet de type Range) - Cellule contenant les éléments à sélectionner
Dim Tablo(), Elem As Byte
If TypeName(objListBox) <> "ListBox" Then
MsgBox "L'argument objLstBox (" & objListBox.Name & ") n'est pas un ListBox": Exit Function
End If
With objListBox
For Elem = 0 To .ListCount - 1
.Selected(Elem) = (InStr(wRng.Value, objListBox.List(Elem)) > 0)
Next
End With
End Function |
Les procédures qui invoquent les nouvelles fonctions
Private Sub UserForm_Activate
InitListBox ' Initialisation du contrôle lstHobby (27/12/2015)
Private Sub ReadRecord
ListBoxSelected Me.lstHobby, .Cells(RecordNumber, 6) ' 27/12/2015
Private Sub WriteRecord
.Cells(RecordNumber, 6) = JoinSelectedRows(Me.lstHobby) ' 27/12/2015
Illustration
Classeur à télécharger
[EDIT]
Suite au problème rencontré à un référencement, j'ai placé une version 3.2 nettoyé de cette référence.
Partager