Je viens vers vous aujourd'hui car j'ai trouvé (sur ce site et d'autres) des morceaux de codes qui ressemble à ce que je veux réaliser mais que je n'arrive pas à adapter à ce que je veux faire.
- Le besoin:
J'ai une macro VBA qui à partir d'un fichier texte génère un fichier Excel contenant des graphiques ( Exemple_#1.xlsx ci-joint ).
Ce que je souhaite faire aujourd'hui c'est lorsque je balade la souris sur ce graphique je veux afficher dans un rectangle texte contenant toute une série de données (colonnes 1 à 10 de la page Données du point en question).
Ces graphiques sont dans une page et non en tant qu'objet d'une page.
Ces graphiques se composent de 3 types de données (une bleu & une rouge avec la même abscisse et ordonnée ainsi qu'une verte avec la même abscisse et une ordonnée #2). Chaque type de donnée peut être composé d'une ou plusieurs séries (une série ne pouvant pas contenir plus de 32000 valeurs, il se peut donc qu'il y en ait 2/3/4/....).
- L'exemple:
En gros ce que je souhaite faire est réalisé dans l'exemple trouvé (Recap.xls): lorsque l'on balade la souris sur une donnée du nuage, un rectangle apparait avec diverses informations.
Sauf qu'il n'y a qu'un seul graphe avec une seule série et qu'il est situé en tant qu'objet d'une page.
J'espère avoir été clair.
Merci d'avance pour votre aide à toutes et à tous.
Dans l'attente de vos nouvelles
Gilles
PS: je suis nouveau sur ce site, je ne trouve pas pour mettre une pièce jointe ...
Voilà les extraits de codes de l'exemple trouvé Récap.xls:
Dans ThisWorbook:
Option Explicit
Dim ClTabChart As ClasseChart
Private Sub Workbook_Open()
Dim i As Integer
Set ClTabChart = New ClasseChart
'Spécifie le 1er graphique de la Y.S Densité
Set ClTabChart.Graph = Worksheets("Y.S Densité").ChartObjects(1).Chart
Worksheets("Y.S Densité").ChartObjects(1).Activate
'désactive les intitulés et les valeurs
Application.ShowChartTipNames = False
Application.ShowChartTipValues = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'réactive les intitulés et les valeurs
Application.ShowChartTipNames = True
Application.ShowChartTipValues = True
End Sub
et dans le module de classe ClasseChart :
Option Explicit
Public WithEvents Graph As Chart
'*** Utilisation des évènements *********
Private Sub Graph_MouseMove(ByVal Button As Long, ByVal Shift As Long, _
ByVal x As Long, ByVal y As Long)
Dim ElementID As Long
Dim Arg1 As Long, Arg2 As Long
On Error Resume Next
ActiveChart.GetChartElement x, y, ElementID, Arg1, Arg2
If Arg2 = 0 Then
ActiveChart.Shapes("Rectangle 1").Visible = msoFalse
Else
With ActiveChart.Shapes("Rectangle 1")
.Visible = msoTrue
.TextFrame.Characters.Text = _
Range("C1").Offset(Arg2, -2) & vbCrLf & _
"Porosité" & "=" & Range("C1").Offset(Arg2, -1) & vbCrLf & _
"YS" & "=" & Range("C1").Offset(Arg2, 0)
.Left = 0
.Top = 0
.Width = "200"
.Height = "50"
End With
End If
End Sub
Finalement, dans ThisWorkbook, je pense que je ne mettrais que ceci
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'réactive les intitulés et les valeurs Application.ShowChartTipNames = True Application.ShowChartTipValues = True End Sub
Si je comprends bien :
- x,y sont les coordonnées en pixel du point où si situe la souris
- ElementID est le type d'élément sur lequel se situe la souris ( au passage j'ai mofifié
If Arg2 = 0 Then
en
If ElementID <> 3 Then
comme cela le rectangle ne s'affiche que si l'on est sur une série)
- Arg1 c'est le numéro de la série
- Arg2 c'est la n_ième valeur du nuage de point, il vaut 3 si on est sur le 3ième point de la série.
J'espère que jusque là j'ai bon ?!
Donc tout fonctionne très bien sur le premier graphe, je m'explique (cf image ci-dessous):
- mon premier graphe va de la ligne 2 à 478 (valeurs variables)
- mon deuxième graphe va de la ligne 479 à 800 (valeurs variables)
Donc pour le premier graphe les infos du rectangle sont bonnes mais pour le second, l'info du point 1 correspond à la ligne 2 et non à la ligne 479.
Une petite idée supplémentaire ?
Merci encore
Gilles
Vous n’avez pas trouvé la réponse que vous recherchez ?