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
je arrete et demarre ma procédure a l aide de l' evenement "Worksheet_BeforeDoubleClick" ce dernier étant directement disponible dans une feuille
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
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
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"
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
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
Partager