Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupération données contenu dans un listView

3 réponses
Avatar
flavien
Bonjour,

J'ai un listView à plusieurs colonne. J'aimerais savoir s'il est possible de
récupérer une valeur dans mon liste View lorsque je clique dessus.
En fait mon gros problème, c'est que j'arrive à récupérer l'index de la
ligne mais pas celui de la colonne.

Mercide votre aide.

Flavien

3 réponses

Avatar
Jacques93
Bonjour flavien,
flavien a écrit :
Bonjour,

J'ai un listView à plusieurs colonne. J'aimerais savoir s'il est possible de
récupérer une valeur dans mon liste View lorsque je clique dessus.
En fait mon gros problème, c'est que j'arrive à récupérer l'index de la
ligne mais pas celui de la colonne.




Peut être peut tu t'inspirer de ceci (qui suppose que tu es en mode
lvwReport) et en sachant que l'événement MouseUp se produit après
l'événement ItemClick :

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
Debug.Print "Ligne : " & Item.Index & " -";
End Sub

Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim Gauche As Long, Droite As Long
Dim i As Integer

Droite = 0
With Me.ListView1
ColNumber = -1
For i = 1 To .ColumnHeaders.Count
Gauche = Droite
Droite = Gauche + .ColumnHeaders(i).Width
If x > Gauche And x < Droite Then
ColNumber = i
Exit For
End If
Next i
End With
If ColNumber <> -1 Then
Debug.Print " Colonne : " & ColNumber
End If
End Sub


--
Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :

[...]

Pour être plus propre et plus complet c'est à dire récupérer la valeur
de la "cellule" du ListView :


Option Explicit

Dim LigNumber As Integer

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
LigNumber = Item.Index
End Sub

Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim Gauche As Long, Droite As Long
Dim ColNumber As Integer, s As String
Dim i As Integer

Droite = 0
With Me.ListView1
ColNumber = -1
For i = 1 To .ColumnHeaders.Count
Gauche = Droite
Droite = Gauche + .ColumnHeaders(i).Width
If x > Gauche And x < Droite Then
ColNumber = i
Exit For
End If
Next i

If ColNumber <> -1 Then
If ColNumber = 1 Then
s = .ListItems(LigNumber).Text
Else
s = .ListItems(LigNumber).SubItems(ColNumber - 1)
End If
Debug.Print "Ligne : " & LigNumber & _
" - Colonne : " & ColNumber & _
" - Valeur : " & s
End If
End With
End Sub

--
Cordialement,

Jacques.
Avatar
flavien
Je te remercie.

Pour palier à mon problème j'ai utiliser un flexGrid.

Merci.

"Jacques93" a écrit :

Jacques93 a écrit :

[...]

Pour être plus propre et plus complet c'est à dire récupérer la valeur
de la "cellule" du ListView :


Option Explicit

Dim LigNumber As Integer

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
LigNumber = Item.Index
End Sub

Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim Gauche As Long, Droite As Long
Dim ColNumber As Integer, s As String
Dim i As Integer

Droite = 0
With Me.ListView1
ColNumber = -1
For i = 1 To .ColumnHeaders.Count
Gauche = Droite
Droite = Gauche + .ColumnHeaders(i).Width
If x > Gauche And x < Droite Then
ColNumber = i
Exit For
End If
Next i

If ColNumber <> -1 Then
If ColNumber = 1 Then
s = .ListItems(LigNumber).Text
Else
s = .ListItems(LigNumber).SubItems(ColNumber - 1)
End If
Debug.Print "Ligne : " & LigNumber & _
" - Colonne : " & ColNumber & _
" - Valeur : " & s
End If
End With
End Sub

--
Cordialement,

Jacques.