Mouse Move : difficultés avec l'utilisation des barres de défilement

PhilippeROB Messages postés 5 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 17 octobre 2005 - 17 oct. 2005 à 11:00
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 - 17 oct. 2005 à 15:05
Bonjour le Forum,

J'espère que vous avez passé un agréable we.

J'ai besoin de vos lumières car je suis dans une impasse.

Ce programme utilise l'instruction Mouse_Move qui saisit la position du pointeur de la souris.

Cette instruction fonctionne bien tant qu'on reste dans l'écran.

Dès que j'utilise les barres de défilement horizontale ou verticale, je n'arrive pas à corriger les coordonnées du pointeur.

C'est assez compliqué.

Description :
Il s'agit d'un programme VB6 et non pas d'un programme VBA même si il s'applique sur un classeur EXCEL.
Ce classeur EXCEL comporte plusieurs représentations graphiques, chacune sur une feuille. Ces représentations graphiques sont très semblables : elles ont toutes le même axe des ordonnées [ la profondeur : déplacement Est Ouest (profondeur), déplacement Nord Sud (profondeur), inclinaison(profondeur), Niveau eau(profondeur) etc... etc... ].

Objectif :
J'ai besoin d'écrire des commentaires à certaines ordonnées (c'est-à-dire certaines profondeurs !).
Ces commentaires doivent apparaître sur toutes les feuilles !.
Je veux éviter de faire feuille par feuille car j'ai beaucoup de commentaire à écrire.

Démarche :
- Je sélectionne une feuille en particulier du classeur EXCEL intitulé « sNomFeuille » puis le graphique qui s'y trouve « sObjetGrafSelectionne ».
- Puis je fais apparaître en mode modeless une Form intitulée « F_PosXY » rudimentaire : elle ne contient qu'un TextBox intitulé « TextBoxComment » qui sert à la saisi du commentaire.
- Ensuite, je récupère les coordonnées du pointeur de la souris que je convertis dans l'unité POINTS nécessaire à EXCEL.
- Enfin je colle mon commentaire sur toutes les feuilles.

Qu'est ce qui se passe ?
La copie du commentaire se passe bien tant que je n'utilise pas la barre de défilement horizontale ou verticale.
Je m?explique ! En effet, pour écrire mes commentaires j'ai besoin de voir les détails de la courbe donc j'affiche la feuille à l'échelle 200%.
Par conséquent, si je veux voir l'allure de la courbe en bas, j'utilise la barre de défilement verticale.
Mais quand, je suis en bas (par exemple ), je n'arrive pas à corriger la position du pointeur de la souris : il ne tient pas compte du défilement verticale que j'ai effectué !.

Quelqu'un a t?il/elle rencontré ce problème et a t?il/elle une issue pour me sortir de là.

Je vous remercie.

Philippe







?***********************************************************************
Dans un module de classe intitulé M_PointeurSourisOFFSET:
?***********************************************************************
Public WithEvents PointeurSourisOFFSET As Chart

Private Sub PointeurSourisOFFSET_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)

Dim Xcorrige As Single, Ycorrige As Single
Application.Cursor = xlDefault
Xcorrige = PointsPerTwips * x * fctTwipsPerPixel(DIRECTION_HORIZONTAL)
Ycorrige = PointsPerTwips * y * fctTwipsPerPixel(DIRECTION_VERTICAL)
F_PosXY.Hide
Call PlaceCommentairePOINTS("ChartTemp", CStr(F_PosXY.TextBoxComment.Text), Xcorrige, Ycorrige)
Call OFFSET_DesactivePosPointeur

End Sub
?***********************************************************************
Dans un module :
?***********************************************************************
Option Base 1
Option Explicit

'*********************
'Les déclarations suivantes permettent de localiser le pointeur de la souris
Dim mongraphe As New M_PointeurSourisOFFSET 'Nom du module de classe

Public Pointeur As POINTAPI
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long

Type POINTAPI
x As Long
y As Long
End Type

'*********************
Sub OFFSET_ActivePosPointeur(sNomFeuille As String, sObjetGrafSelectionne As String)

Set mongraphe.PointeurSourisOFFSET = Sheets(sNomFeuille).ChartObjects(sObjetGrafSelectionne).Chart

End Sub

Sub OFFSET_DesactivePosPointeur()

Application.Cursor = xlDefault
Set mongraphe.PointeurSourisOFFSET = Nothing

End Sub
'*********************
Function fctTwipsPerPixel(iDirection As Long) As Long ' Détermine Nb de twips/pixels selon la direction horizontale ou verticale

If iDirection = DIRECTION_HORIZONTAL Then
fctTwipsPerPixel = Screen.TwipsPerPixelX
ElseIf iDirection = DIRECTION_VERTICAL Then
fctTwipsPerPixel = Screen.TwipsPerPixelY
End If

End Function
'*********************
Sub PlaceCommentairePOINTS(NomFeuilGraf As String, sTxtCommentaire As String, _
pointsX As Single, pointsY As Single, Optional pointsL As Single, Optional pointsH As Single)

ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, pointsX, pointsY, pointsL, pointsH).Select
Selection.Characters.Text = sTxtCommentaire
Selection.AutoSize = True

End Sub
A voir également:

1 réponse

tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
17 oct. 2005 à 15:05
Tu pourrais contourner le problème avec un keypress.

Le keypress te servirai à voir en bas avec la flèche du bas et remonter
avec la flèche du haut, aisin plus besoin d'utiliser ta souris.
(vbKeyDown et vbKeyUp)

Pour te déplacer avec le scroll

ActiveWindow.SmallScroll Down:=-2 'remonte de 2 ligne vers le haut

ActiveWindow.ScrollRow = 17 'reviens à la ligne 17

TBBUIM
0
Rejoignez-nous