Excel VBA - insertion de valeurs dans combobox multi-colonnes

J'ai deux zones de liste déroulante dans un formulaire utilisateur dans Excel. Lorsque je sélectionne la première zone de liste déroulante, il filtre les lignes sur la feuille de calcul en cours et affiche les valeurs dans combobox2.

Je voudrais combobox2 être un combobox multi-colonnes, donc je peux copier et coller plusieurs valeurs à partir d'une feuille de calcul à l'autre, mais je ne peux pas avoir plusieurs valeurs dans combobox2. C'est le code que j'ai bidouillé. Je suis en mesure de filtrer les résultats lorsque je change la valeur dans combobox1 mais combobox2 est l'affichage d'une seule valeur:

Private Sub ComboBox1_Change()
Me.ComboBox2.Clear
'filter the results in combo box 2 when the user selects the different         options in combo box 1
Dim wb As Workbook
Dim ws As Worksheet
Dim copyFrom As Range, aCell As Range
Dim lRow As Long
Dim strSearch As String
Set wb = ThisWorkbook
'~~> Set this to the worksheet where the autofilter is applied
Set ws = wb.Worksheets("RegEvents")
'~~> Filter Column on text in Combo box 1
strSearch = ComboBox1.Value
With ws
'~~> Remove any filters
.AutoFilterMode = False
With .Range("RegEvents_WorksheetData")
.AutoFilter Field:=Range("RegEvents_Action").Column, Criteria1:="="     & strSearch
'~~> Identify the filtered range
Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible)
'~~> Add values from filtered search to Combobox2
For Each aCell In copyFrom
If aCell.Value <> "" And aCell.Column = Range("RegEvents_EventID").Column Then
ComboBox2.AddItem (aCell.Value)
End If
If aCell.Value <> "" And aCell.Column = Range("RegEvents_Event").Column Then
ComboBox2.AddItem (aCell.Value)
End If
Next
End With
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub
Private Sub UserForm_Initialize()
'Used to create an array
Dim listItems As Variant
Me.ComboBox1.ListIndex = -1 ' -1 = no items selected
Label1.Caption = "Action"
Label2.Caption = "Event"
listItems = Range("CatogriesAction")
With ComboBox1
'Loops through the array and only adds non blank values to the combo box
For i = 1 To UBound(listItems, 1)
If Len(Trim(listItems(i, 1))) > 0 Then
.AddItem listItems(i, 1) ' populate the listbox
End If
Next i
.ListIndex = 0 ' -1 = no items selected, set to 0 to select the first item
End With
'Set number of columns for combobox 2
With Me.ComboBox2
.ColumnCount = 2
.BoundColumn = 2
.ColumnWidths = ".5 in; .5 in"
End With
End Sub
  • Autant que je sache, une zone de liste déroulante peut afficher plusieurs colonnes lorsqu'il est ouvert, mais une seule colonne, tandis que la zone de liste déroulante est inactif (effondré). Cette colonne est "lié" colonne qui peut être défini dans les propriétés. Peut-être une zone de liste serait mieux adapté? Comme cela, vous pouvez afficher plusieurs colonnes.
InformationsquelleAutor David H | 2015-05-26