XL 2010 barre associée au mouvement de la souris sur graphique

nicroq

XLDnaute Occasionnel
J'aimerais savoir s'il est possible de créer une barre qu'on ferait défiler sur un graphique afin d'afficher les valeurs.

En soit est il possible lorsque la souris passe sur le graphique de faire apparaître une barre qui identifie la valeur du croisement de cette barre avec le graphique.?

Merci de m’éclairer

Cordialement
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il y a plein d'évènements disponibles sur un objet Chart
Les procédures qui les traitent peuvent être utilisées sans préparation spéciale sur une feuille graphique.
Pour un graphique incorporé dans une feuille de calcul c'est plus compliqué puisqu'il faut déclarer une Private WithEvents Cht As Chart et lui affecter préalablement par un Set la propriété Chart du ChartObject qui en est le support.
 

nicroq

XLDnaute Occasionnel
bonjour,
en effet il s'agit d'un graphique dans une feuille de calcul..
Serait t il possible que vous me montriez comment faire sur un graphique simple?
je ne connais pas très bien le codage avec events et surtt comment le passage de la souris sur le graphique puisse afficher la barre avec les valeurs.....
j'ai par VBA deja crée mon graphe de facon tres simple mais pour la suite je ne connais pas du tt..
Merci pour votre aide.
En vous remerciant
cordialement
 

Dranreb

XLDnaute Barbatruc
Qu'est-ce que vous appelez un graphique simple ? Pour moi c'est une feuille graphique. C'est un graphique incorporé dans une feuille de calcul qui est la configuration compliquée, puisqu'elle n'était pas faite pour ça au départ, et qu'il faut donc un support intermédiaire supplémentaire qui est le ChartObject.

Essayez comme ça dans le module de la feuille de calcul :
VB:
Option Explicit
Private WithEvents Cht As Chart

Private Sub Worksheet_Activate()
Set Cht = Me.ChartObjects(1).Chart
End Sub

Private Sub Cht_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)

End Sub

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

End Sub
Avec une feuille graphique pas besoin: on a directement les évènements de l'objet Chart.
 

nicroq

XLDnaute Occasionnel
bonjour
oui en effet il s'agit de la configuration compliquée.
Pourriez vous me montrer sur le fichier joint comment faire pour activer le mousemove events sur le graphique?
merci sincerement pour votre aide
 

Pièces jointes

  • test move mouse.xlsx
    130.4 KB · Affichages: 15

Dranreb

XLDnaute Barbatruc
Comme ça par exemple dans le module Feuil2 :
VB:
Option Explicit
Private WithEvents Cht As Chart, CelXY As Range

Private Sub Worksheet_Activate()
Dim S As Series, TSpl() As String
Set Cht = Me.ChartObjects(1).Chart
Set S = Cht.SeriesCollection(1)
TSpl = Split(S.Formula, ",")
Set CelXY = Application.Range(TSpl(1) & ":" & TSpl(2))
End Sub

Private Sub Cht_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim Gauche As Double, Largeur  As Double, XMin As Double, XMax As Double, XDon As Double, L As Long
Gauche = Cht.PlotArea.InsideLeft: Largeur = Cht.PlotArea.InsideWidth
With Cht.Axes(xlCategory): XMin = .MinimumScale: XMax = .MaximumScale: End With
XDon = XMin + (XMax - XMin) * (X * 0.75 - 0.3 - Gauche) / Largeur
If CelXY Is Nothing Then Exit Sub
DoEvents
On Error Resume Next
L = WorksheetFunction.Match(XDon, CelXY.Columns(1))
Me.[D26:E26].Value = CelXY.Rows(L).Value
End Sub
Mais je me suis aperçu que ça ne marche pas si le graphique n'est pas sélectionné.
 

Dranreb

XLDnaute Barbatruc
L'avez vous bien mis dans module de l'objet Worksheet Feuil2 associé à la feuille Excel du même nom, et non dans un module standard ?
Comme l'initialisation est faite pour l'instant à l'activation de la Feuil2, il faut peut être un coup activer la Feuil1 puis la Feuil2 pour que la Workheet_Activate du module Feuil2 s'exécute.
Aussi, n'oubliez pas de sélectionner le graphique.
Il écrit pour l'instant les valeurs X et Y dans les cellules D26 et E26, mais vous pourriez en tirer une série qui tracerait une ligne verticale.
 

nicroq

XLDnaute Occasionnel
ah oui je n'avais pas vu c est super! merci bcq
est il possible de faire cela avec plusieurs series?
est il possible en plus de l'avoir en D26 et E26 de faire apparaitre un shape au bout du pointeur de la souris avec les valeurs Y de chaque series et la valeur X?

ensuite je devrais arriver a me debrouiller pour adapter
merci de votre aide cela me permets de bcp mieux comprendre le codage de mousemove maintenant.
 

Dranreb

XLDnaute Barbatruc
Il devrait être possible d'ajouter une série avec ce seul point, une marque et une étiquette affichant la valeur x et y
Pour le faire avec plusieurs séries il faudrait sans doute une Cht_Select pour désigner celle qu'on veut et y reproduire une partie du code de la Worksheet_Activate qui déduit les plages de valeurs x et y de sa formule.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne savez pas ajouter une série ou une étiquette sur une série dans un graphique ?
Pour le Select dans un graphique il faudrait que je recherche sur internet.
Mais à priori si j'en crois un vieux code, quand on sélectionne une série ElementID = 3, Arg1 c'est le numéro de la série et Arg2 > -1.
Edit: Non, il semblerait que j'ai dit une bêtise: Arg2 est > -1 si c'est un point d'une série qui est sélectionné et c'est alors le numéro du point.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 727
Messages
2 081 962
Membres
101 852
dernier inscrit
dthi16088