bonjour,

le titre n est pas forcement très claire ....
donc voici quelques explications.

Dans le cadre d un projet je doit récupérer l evenement mouse_move sur une feuille de calcul pour afficher une boite de dialogue lors du survol de certaines cellules (non prédéfinie pour l instant)

Je recupère les coordonnée de la souris avec l api
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
' Position de X et Y par rapport a l'écran
     Private Declare Function GetCursorPos Lib "user32" ( _
    lpPoint As POINTAPI) As Long
je arrete et demarre ma procédure a l aide de l' evenement "Worksheet_BeforeDoubleClick" ce dernier étant directement disponible dans une feuille

donc voici le code complet qui affiche la position de la souris dans un textbox (crée avec la boite outil)

***demmarrage et arret par dbl_click

dans une feuille
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
 
Option Explicit
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
' Position de X et Y par rapport a l'écran
Private Declare Function GetCursorPos Lib "user32" ( _
    lpPoint As POINTAPI) As Long
 
' Position de X et Y par rapport a la fenètre et a GetCursorPos
Private Declare Function ScreenToClient Lib "user32" ( _
    ByVal hwnd As Long, _
    lpPoint As POINTAPI) As Long
 
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Dim stp As Boolean
 
Private Sub Worksheet_Activate()
Ret = "Microsoft Excel - evenement_mouse"
'Search the window
WinWnd = FindWindow(vbNullString, Ret)
MsgBox WinWnd
Call mouse_move
End Sub
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim res As Integer
res = IIf(stp = False, "1", "0")
If res = "1" Then
stp = True
Else
stp = False
Call mouse_move
End If
End Sub
 
Sub mouse_move()
Dim pos As POINTAPI
Do While stp = False
    GetCursorPos pos
    ScreenToClient WinWnd, pos  '......ne sert a rien dans ce cas
    Me.TextBox1 = "Position Horizontale X = : " & pos.X & vbCrLf & _
            "Position Verticale Y = : " & pos.Y
            DoEvents
            If stp = True Then Exit Sub
            GetCursorPos pos
            ScreenToClient WinWnd, pos
Loop
End Sub
comme vous avez pu vous en apercevoir j ai essayé d utiliser l api "screentoclient" pensant pouvoir recupérer les point d origine x=0 et y=0 quant le pointeur est en haut à gauche de la cellule "a1"

cette api fonctionne tres bien sur un objet "userform" par contre dans le cas
d une feuille de calcul les coordonnées x=0 et y=0 renvoyé par la fonction correspondent au coin supérieur gauche de la feuille et non pas des cellules.

Je pourrais palier ce décallage en ajoutant un offcet a cette fonction, mais en suivant de l affichage des feuilles (commandbar,option etc..) cette valeur
ne sera pas la meme.

d ou (si vous m avez suivi) ma question comment retrouver les coordonnées de la cellules "a1".


merci



l