VBA Autres façons d'executer les lignes de commande dans un graphe

coolkoff

XLDnaute Nouveau
Bonjour à Tous
Je cherche le moyen d'appeler ou d'executer le code contenu dans la feuille du graphe.
A la base je souhaite récupérer les coordonnées des points du graphe. j'ai réussi à trouver un moyen de le faire (code tout en bas)
Sauf que ce code est integer directement dans le graph.
Je souhait que pour chaque graph généré ( non incorporé), je puisse récupérer les cordonnées des points
Je ne vais pas à chaque fois insérer ces lignes de code dans les graphes
Auriez vous une idée de comment je pourrai contourner ce probleme?
Je vous remercie par avance



Code:
Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Dim LabelStatus, X, Y, RangeX As Range, RangeY As Range, rangeXY As Range, i&
Dim Sh As Worksheet, F As String, S As String, SF As String, SR As String
If ElementID = xlSeries Then
   If Arg2 = -1 Then
    'msgbox "Tous les points du graphique " & Arg1 & " ont été sélectionnés"
   Else
    LabelStatus = ActiveChart.SeriesCollection(Arg1).Points(Arg2).HasDataLabel
    ActiveChart.SeriesCollection(Arg1).Points(Arg2).HasDataLabel = True
    ActiveChart.SeriesCollection(Arg1).Points(Arg2).ApplyDataLabels ShowValue:=True
    Y = ActiveChart.SeriesCollection(Arg1).Points(Arg2).DataLabel.Caption
    ActiveChart.SeriesCollection(Arg1).Points(Arg2).ApplyDataLabels Type:=xlDataLabelsShowLabel
    X = ActiveChart.SeriesCollection(Arg1).Points(Arg2).DataLabel.Caption
    ActiveChart.SeriesCollection(Arg1).Points(Arg2).HasDataLabel = LabelStatus
    If LabelStatus Then ActiveChart.SeriesCollection(Arg1).Points(Arg2).ApplyDataLabels
    MsgBox "X= " & X & " , Y=" & Y
    F = ActiveChart.SeriesCollection(Arg1).Formula
    S = Split(F, ",")(1)
    SF = Left(S, InStr(S, "!") - 1)
    SF = Replace(SF, "'", "")
    SR = Mid(S, InStr(S, "!") + 1)
    Set Sh = Sheets(SF)
    Set RangeX = Sh.Range(SR)
    
    S = Split(F, ",")(2)
    SR = Mid(S, InStr(S, "!") + 1)
    Set RangeY = Sh.Range(SR)
    
    For i = 1 To RangeY.Rows.Count
      If CStr(RangeY(i, 1).Value) = Y And CStr(RangeX(i, 1).Value) = X Then
        Sh.Select
        Union(RangeX(i, 1), RangeY(i, 1)).Select
        Exit For
      End If
    Next i
    MsgBox "Adresse de X = " & RangeX(i, 1).Address(False, False) & vbLf & _
        "Adresse de Y = " & RangeY(i, 1).Address(False, False)
   End If
 Else
  'MsgBox "Aucun point d'aucun graphique n'a été sélectionné"
 End If
End Sub

=
 

Discussions similaires

Statistiques des forums

Discussions
314 659
Messages
2 111 623
Membres
111 236
dernier inscrit
vinthi