web-dev-qa-db-fra.com

Comment obtenir la valeur sélectionnée dans une liste déroulante multicolonne

J'ai une liste déroulante multicolonne dans mon formulaire utilisateur et j'aimerais obtenir toutes les valeurs des éléments qui se trouvent dans la ligne sélectionnée de la liste déroulante.

Voici mon formulaire utilisateur:  UserForm with ListBox


Tout comme sur la photo, je veux sélectionner une ligne, puis je cliquerai sur le bouton Associer et je pourrais obtenir les informations de cette ligne. Je peux juste obtenir la première colonne qui est CAN20168301436 Je veux obtenir les informations de toute la ligne.
Comment puis-je le faire? 
Voici mon événement cliqué sur un bouton: 

Private Sub CommandButton3_Click()
   a = ListBoxResultatFind.Text
End Sub
4
Yiao Sun

vous pouvez utiliser ce code

Private Sub CommandButton3_Click()
    Dim strng As String
    Dim lCol As Long, lRow As Long

    With Me.ListBox1 '<--| refer to your listbox: change "ListBox1" with your actual listbox name
        For lRow = 0 To .ListCount - 1 '<--| loop through listbox rows
            If .selected(lRow) Then '<--| if current row selected
                For lCol = 0 To .ColumnCount - 1 '<--| loop through listbox columns
                    strng = strng & .List(lRow, lCol) & " | " '<--| build your output string
                Next lCol
                MsgBox "you selected" & vbCrLf & Left(strng, (Len(strng) - 1)) '<--| show output string (after removing its last character ("|"))
                Exit For '<-_| exit loop
            End If
        Next lRow
    End With
End Sub
10
user3598756

Il n'est pas nécessaire de boucler toute la liste. Pour obtenir la ligne d'élément sélectionnée, vous pouvez utiliser la propriété ListIndex. Ensuite, vous pouvez utiliser la propriété List(Row, Column) pour récupérer les données, comme dans les exemples de @DragonSamu et @ user3598756:

'***** Verify that a row is selected first
If ListBoxResultatFind.ListIndex > -1 And ListBoxResultatFind.Selected(ListBoxResultatFind.ListIndex) Then
    '***** Use the data - in my example only columns 2 & 3 are used
    MsgBox ListBoxResultatFind.List(ListBoxResultatFind.ListIndex, 1) & ":" & ListBoxResultatFind.List(ListBoxResultatFind.ListIndex, 2)
End If
8
Olle Sjögren

Avec une seule colonne, vous pouvez récupérer la valeur comme ci-dessous:

Dim str as String
str = me.ListBox1.Value

Avec une multicolonne, vous pouvez récupérer la valeur comme ceci:

Dim strCol1 as String
Dim strCol2 as String
Dim strCol3 as String
strCol1 = ListBox1.List(0, 1)
strCol2 = ListBox1.List(0, 2)
strCol3 = ListBox1.List(0, 3)

ou vous pouvez ajouter toutes les données dans 1 chaîne:

Dim strColumns as String
strColumns = ListBox1.List(0, 1) + " " + ListBox1.List(0, 2) + " " + ListBox1.List(0, 3)
2
DragonSamu

C'est une zone de liste de 6 colonnes et la 3ème colonne serait le multiplicateur d'où le "(x)". Vous pouvez également réorganiser la liste à votre guise.

Private Function selList() As String
Dim i As Long

For i =LBound(lstListBox1.List) To UBound(lstListBox1.List)
    If lstListBox1.Selected(i) Then
        selList = selList & lstListBox1.List(i) & " " & lstListBox1.List(i, 1) _
        & "(x" & lstListBox1.List(i, 3) & ")" & " " & lstListBox1.List(i, 2) & " " & lstListBox1.List(i, 4) & ", "
    End If
Next i

If selList= "" Then
    selList= ""
Else
    selList= Left(selList, Len(selList) - 2)
End If

MsgBox selList
End Function
0