trouver les points x et y de la cellule "a1"
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:
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:
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