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:
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
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
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
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)
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