Récupérer les coordonnées d'un point sur un graphique d'un simple clic

leblesois

XLDnaute Nouveau
Bonjour à tous,

jusqu'à maintenant, j'ai toujours trouvé réponse à mes problèmes sur ce forum, mais là nada !

Je me permets donc de vous embêter avec mon problème.

En cliquant sur deux points d'un graphique Excel (courbe d'une action en Bourse), je souhaite obtenir l'abscisse et l'ordonnée de chacun de ces points afin de pouvoir tracer une droite reliant ces deux points.

Afin que vous compreniez bien mon problème, je vous ai mis en PJ un fichier exemple.

Merci d'avance pour vos réponses

Cordialement
 

Pièces jointes

  • Essai bourse 2014.xlsx
    34 KB · Affichages: 103

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Bonjour leblesois et bienvenue sur XLD :),

Un essai (laborieux) dans le fichier joint. Pour faciliter et avoir un code relativement court, le graphique a été déplacé dans une feuille de type "Graph".

Comment cela marche t il ?
.
  • Il faut sélectionner la feuille "Graph1"
  • Zoomer l'affichage d'un facteur important pour être en mesure de cliquer sur les marqueurs de couleur verte (sur mon écran et avec ma vue basse, le zoom est d'au moins 200)
  • Cliquer sur le point du graphe qui sera le point A le plus à gauche sur la future droite à tracer
  • Répondre oui (car il s'agit du point A) dans la boîte de dialogue qui s'affiche
  • Cliquer sur un autre point du graphe qui sera le point à droite sur la future droite à tracer
  • Répondre non (car il s'agit du point B) dans la boîte de dialogue qui s'affiche
  • Une dernière boîte de dialogue demande si on veut dessiner la droite


Nota: le plus simple est de sélectionner les marqueurs type carré vert. Je suis arrivé à sélectionner les "hauts" de barre; c'est plus difficile mais faisable.

J'ai honte! J'ai confondu (disons interverti) la gauche et la droite dans la boite de dialogue.
Donc le fichier de ce post leblesois-Essai bourse 2014 v1.xlsm‎ était erroné (néanmoins, j'ai corrigé le code posté ici)
et il est remplacé par le fichier leblesois-Essai bourse 2014 v1a.xlsm‎ du message #3 ici.

Le code est entièrement dans le module de code de la feuille "Graph1":
VB:
Option Explicit

'coordonnées des points sélectionnées A (gauche)et B (droite)
Dim x1!, y1!, x2!, y2!

Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Dim rep, a!, b!, x0!, y0!, x3!, y3!, i&, Pas&
Pas = 2     'valeur du pas


'test si on a sélectionne un point de graphique
If ElementID = xlSeries Then
   'c'est un point de graphique
   If Arg2 = -1 Then
    'msgbox "Tous les points du graphique " & Arg1 & " ont été sélectionnés"
   Else
    'demander si c'est le point A (celui de droite)
    rep = vbNo
    rep = MsgBox("S'agit il du point A (Le plus à gauche)?" & vbLf & "( sinon c'est le point B le plus à droite )", vbYesNo + vbQuestion + vbDefaultButton1)
    If rep = vbYes Then
      'point le plus à droite
      x1 = ActiveChart.SeriesCollection(Arg1).Points(Arg2).Left
      y1 = ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height - ActiveChart.SeriesCollection(Arg1).Points(Arg2).Top
      y1 = y1
    Else
      'point B le plus à gauche
      rep = vbNo
      x2 = ActiveChart.SeriesCollection(Arg1).Points(Arg2).Left
      y2 = ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height - ActiveChart.SeriesCollection(Arg1).Points(Arg2).Top
      
      rep = MsgBox("Voulez vous tracer la droite ?", vbYesNo + vbQuestion + vbDefaultButton1)
      If rep = vbYes Then
        'traçage de la droite
        'coeff directeur de la droite
        a = (y2 - y1) / (x2 - x1) 'coeff directeur de la droite
        'ordonnée à x=0
        b = (x2 * y1 - x1 * y2) / (x2 - x1)
        ' abscisse du point du graphe le plus à gauche
        x0 = ActiveChart.PlotArea.Left
        ' ordonnée du point du graphe le plus à gauche (positif)
        For i = 0 To 1000 Step Pas
          x0 = ActiveChart.PlotArea.Left + i * Pas
          y0 = ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height - (a * x0 + b)
          If y0 > 0 And y0 <= ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height Then Exit For
        Next i
        'correction hauteur du marqueur
        If a > 0 Then y0 = y0 - 1# Else y0 = y0 + 1.5
        ' abscisse du point du graphe le plus à droite
        x3 = ActiveChart.PlotArea.Left + ActiveChart.PlotArea.Width
        ' ordonnée du point du graphe le plus à droite
        For i = 0 To 1000 Step Pas
          x3 = ActiveChart.PlotArea.Left + ActiveChart.PlotArea.Width - i * Pas
          y3 = ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height - (a * x3 + b)
          If y3 >= 0 And y3 <= ActiveChart.PlotArea.Top + ActiveChart.PlotArea.Height Then Exit For
        Next i
        'correction hauteur du marqueur
        If a > 0 Then y3 = y3 - 1# Else y3 = y3 + 1.5
        On Error Resume Next
        ' on tente de supprimer la précédente droite
        ActiveChart.Shapes("toto").Delete
        On Error GoTo 0
        'Limitation des bornes de la droite
        a = a
        ' On trace la droite
        ActiveChart.Shapes.AddConnector(msoConnectorStraight, x0, y0, x3, y3).Select
        ' on nomme la droite pour l'effacer la prochaine fois
        Selection.Name = "toto"
        ' épaisseur et couleur de la droite
        With Selection.ShapeRange.Line
          .Visible = msoTrue
          .Weight = 1.25
          .ForeColor.RGB = RGB(255, 0, 0)
          .Transparency = 0
        End With
      End If
    End If
  End If
End If
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Bonjour à tous,

Bon, à l'instar d'autres, Alois me guette. Confondre gauche et droite à mon âge. Si ça persiste, je vais prochainement voter n'importe quoi !

Le fichier joint a été corrigé et son auteur correctionné, dynamité, dispersé et ventilé.

rem: le fonctionnement est identique à la version v1 puisque seul le texte de la boîte de dialogue a été modifié
 

Pièces jointes

  • leblesois-Essai bourse 2014 v1a.xlsm
    44.2 KB · Affichages: 98
Dernière édition:

leblesois

XLDnaute Nouveau
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Merci !

N etant pas a mon domicile, je ne peux tester votre solution, mais des mon retour je teste cela et vous tiendrai au courant. Cependant, cette solution fonctiobnne t elle également si le graph est sur une feuille de type non graph, car c est mon cas pour mon fichier reel ?

Encore merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

(re)

(...) Cependant, cette solution fonctionne t elle également si le graph est sur une feuille de type non graph, car c est mon cas pour mon fichier reel ? (...)

Pour l'instant non, mais il existe une solution via des modules de classe que je n'ai pas encore examinée. Si j'ai du temps et du courage, j'essaierai de m'y atteler...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Bonsoir à tous,

(...) Cependant, cette solution fonctionne t elle également si le graph est sur une feuille de type non graph, car c est mon cas pour mon fichier reel ? (...)
Pour l'instant non, mais il existe une solution via des modules de classe que je n'ai pas encore examinée. Si j'ai du temps et du courage, j'essaierai de m'y atteler...

Ayant eu un peu des deux, j'ai tenté de faire quelque chose. C'est un piratage héhonté du fichier Get X&Y on Any Chart.xls trouvé sur le net suite à la lecture de l'excellent article de SilkyRoad sur le site developpez.com. Je me suis contenté de reprendre le code du fichier sus-cité et d'inclure dans le module de classe clsChartEvent ma précédente procédure. La feuille "Graph1" peut-être supprimée, elle n'est présente que pour vérifier que le code fonctionne à la fois pour les graphiques intégrés à une feuille de calcul et aussi pour les feuilles de type graphique.
 

Pièces jointes

  • Get X&Y on Any Chart.xls
    75.5 KB · Affichages: 145
  • leblesois-Essai bourse 2014 v10.xlsm
    68.3 KB · Affichages: 108

Staple1600

XLDnaute Barbatruc
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Bonsoir à tous

mapomme
Pour rendre la chose moins shameless, je citerai ici le nom du non moins excellent Jon Peltier qui a l'air d'adorer les graphiques ;)
(Tu me diras que son nom est déjà dans le classeur), mais comme cela ton sentiment sera un peu moins éhonté qu'à 21h44 ;), et tu pourras dormir du sommeil du juste. ;)
PS: Je loue ta force de volonté pour trouver temps et courage un dimanche soir pour aller tâter du module de classe.
(peut-être un effet de la pleine lune, moi cela me fait souvent cet effet là ;) )
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupérer les coordonnées d'un point sur un graphique d'un simple clic

Bonsoir Staple1600 :)

C'est un oubli de ma part de ne pas l'avoir cité surtout que j'ai son blog en favori (à l'occasion d'une lubie au sein de ma boîte: les graphique "Waterfall" - ça leur est passé à ch't'heure :p). C'est vrai que je vais aller dormir avec un sentiment de turpitude un peu amoindri.

Quant au module de classe, c'est maximum une fois par mois et c'est bien assez! Maintenant que tu l'as suggéré, effectivement la lune n'est peut-être pas étrangère à l'affaire :D
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 101
Membres
104 031
dernier inscrit
RimeF