Bonjour,

J'ai un userform contenant un listview de 15 colonnes (avec des tailles de colonne différentes)
Je cherche à identifier via click droit la valeur de l'élément cliqué ou a minima la référence de la colonne auquel appartient l'élément cliqué.
Je comptais me baser sur les coordonnées x,y de l'évènement ListView1_MouseDown en les comparant aux références ColumnHeaders(a).Left des colonnes du Listview.

Le hic, les coordonnées x,y renvoyées par rapport à l'événement ListView1_MouseDown sont incohérentes par rapport aux références de colonne.

Dans la textbox du userform, j'ai recensé la référence de fin de colonne (en additionnant ColumnHeader.Left et ColumnHeader.Width) et dans l'évènement ListView1_MouseDown, j'ai juste demandé une msgbox indiquant les coordonnées x,y.
Vous remarquerez qu'entre la position du curseur de la souris, les coordonnées x,y remontées par la msgbox et les références de colonnes de la textbox, il y a incohérence.

Je clique sur un élément de la colonne 8 de juin (entre 520 et 565) alors que la coordonnée x du curseur est à 704

Nom : Screen_Listview_subitems.jpg
Affichages : 673
Taille : 293,8 Ko
Désolé pour la photo de l'écran de PC mais je n'arrivais pas à avoir le cursus visible sinon

Je vous joins mon code sur l'initialize du userform

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
 
MsgBox ("En Pixels - X : " & x & " - Y : " & y)
 
End Sub
 
 
Private Sub UserForm_Initialize()
 
'Dim TabPositionLeftColonneListView(14, 1)
Dim ValeurLeft As Single
Dim ValeurWidth As Single
Dim ValeurRight As Single
 
'-----------------------------------------------------------------
'Création et complétude la listview
'-----------------------------------------------------------------
With ListView1
    'Définit le nombre de colonnes et Entêtes
    With .ColumnHeaders
        'Supprime les anciens entêtes
        .Clear
        'Ajoute 15 colonnes en spécifiant le nom de l'entête
        'et la largeur des colonnes
        .Add , , "NUM", 0
        .Add , , "Indicateur n°1 [Obj : 20% - Socle : 17%]", 250
        .Add , , "2016", 45
        .Add , , "Janv", 45
        .Add , , "Fev", 45
        .Add , , "Mars", 45
        .Add , , "Avril", 45
        .Add , , "Mai", 45
        .Add , , "Juin", 45
        .Add , , "Juil", 45
        .Add , , "Août", 45
        .Add , , "Sept", 45
        .Add , , "Oct", 45
        .Add , , "Nov", 45
        .Add , , "Déc", 45
    End With
 
    'Remplissage de la 1ere colonne (création de 5 lignes)
    With .ListItems
        .Add , , "TDB"
        .Add , , "ENRICH_TDB"
        .Add , , "PDA"
        .Add , , "ENRICH_PDA"
        .Add , , "RPP"
    End With
 
.ListItems(1).ListSubItems.Add , , "Résultat"
.ListItems(1).ListSubItems(Me.ListView1.ListItems(1).ListSubItems.Count).Tag = "C1L1"
 
.ListItems(1).ListSubItems.Add , , 1
.ListItems(1).ListSubItems.Add , , 2
.ListItems(1).ListSubItems.Add , , 3
.ListItems(1).ListSubItems.Add , , 4
.ListItems(1).ListSubItems.Add , , 5
.ListItems(1).ListSubItems.Add , , 6
.ListItems(1).ListSubItems.Add , , 7
.ListItems(1).ListSubItems.Add , , 8
.ListItems(1).ListSubItems.Add , , 9
.ListItems(1).ListSubItems.Add , , 10
 
.ListItems(2).ListSubItems.Add , , "Numérateur"
 
.ListItems(2).ListSubItems.Add , , 10
.ListItems(2).ListSubItems.Add , , 9
.ListItems(2).ListSubItems.Add , , 8
.ListItems(2).ListSubItems.Add , , 7
.ListItems(2).ListSubItems.Add , , 6
.ListItems(2).ListSubItems.Add , , 5
.ListItems(2).ListSubItems.Add , , 4
.ListItems(2).ListSubItems.Add , , 3
.ListItems(2).ListSubItems.Add , , 2
.ListItems(2).ListSubItems.Add , , 1
 
.ListItems(3).ListSubItems.Add , , "Dénominateur"
.ListItems(4).ListSubItems.Add , , "Classement national"
.ListItems(5).ListSubItems.Add , , "Classement sur 25 CPAM (cat2)"
 
End With
 
'-----------------------------------------------------------------
'Mémorisation des ColumnHeaders de la listview dans l'optique d'une comparaison avec les coordonnées x, y de l'èvenement MouseDown
'-----------------------------------------------------------------
 
Temp = "Valeurs 'Right' (Left+Width) de chaque colonne du listview :"
 
For a = 1 To Me.ListView1.ColumnHeaders.Count - 1
    TabPositionLeftColonneListView(a - 1, 0) = a - 1
    ValeurLeft = Me.ListView1.ColumnHeaders(a).Left
    ValeurWidth = Me.ListView1.ColumnHeaders(a).Width
    ValeurRight = ValeurLeft + ValeurWidth
    TabPositionLeftColonneListView(a - 1, 1) = ValeurRight
    Temp = Temp & vbLf & "Colonne " & TabPositionLeftColonneListView(a - 1, 0) & " - Left + Width = " & TabPositionLeftColonneListView(a - 1, 1)
Next a
 
Me.TextBox1 = Temp
 
 
'Spécifie l'affichage en mode "Détails"
ListView1.View = lvwReport
ListView1.LabelEdit = 1
ListView1.FullRowSelect = True
'ListView1.Gridlines = True
 
'-------------------------------------------------------------------------
'Création d'une barre de menu contextuel pour le listview
 
'Dim CBar As CommandBar, CBut As CommandBarButton
'Dim CTxt As CommandBarComboBox, CPop1 As CommandBarPopup, CPop2 As CommandBarPopup
 
'Set CBar = CommandBars.Add("MenuListView", msoBarPopup, False, True)
 
'Set CPop1 = CBar.Controls.Add(msoControlPopup)
'With CPop1
    '.Caption = "Actualiser les données"
'End With
 
End Sub
Après de multiples recherches, je sais qu'il y a peut être une histoire de Pixels et de Twips
Je vous liste ci-dessous les liens les plus pertinents que j'ai glané mais sans parvenir à les exploiter


https://markdagosta.com/2010/08/08/listview-hittest-right-click/

https://www.developpez.net/forums/d1...ent-d-colonne/
https://www.developpez.net/forums/d9...rvolee-souris/
https://www.experts-exchange.com/que...-subitems.html