Public WithEvents Graph As Chart
'***
'la macro utilise une forme (rectangle) insérée dans le graphique
'***
Private Sub Graph_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
'Variables de la commande getChartElements
'x et y : position horizontale et verticale du pointeur au moment du clic
'ElementID : le type d'élément du graphique si clic sur une série, ElementID = 3
'Si ElementID =3,
'Arg1 = N° de la série
'Arg2 = N° du point de la série
Dim ElementID As Long
Dim Arg1 As Long, Arg2 As Long
Dim C As Range
Dim Txt As String
On Error Resume Next
'Récupération des éléments :
ActiveChart.GetChartElement x, y, ElementID, Arg1, Arg2
'Si on n'a pas cliqué sur une série
If Arg2 = 0 Then
'on masque le rectangle
ActiveChart.Shapes("Rectangle 1").Visible = msoFalse
Else
'Sinon, on a cliqué sur une série
With ActiveChart.Shapes("Rectangle 1")
'on rend la forme dimensionnable selon la longueur du texte
.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
'La variable Txt va contenir le texte à mettre dans le rectangle
Txt = ""
'Boucle sur la plage utile de la colonne A
For Each C In Range("A3", Cells(Rows.Count, 1).End(xlUp))
'[T5].Offset(Arg2) renvoie le numéro de semaine
'Si la cellule de la colonne A est égale au numéro ded semaine
If C = [T5].Offset(Arg2) Then
'et si elle n'est pas vide
If C.Offset(, 14) <> "" Then
'On ajoute un saut de ligne et la valeur de C à Txt
Txt = Txt & Chr(10) & C.Offset(, 14)
End If
End If
Next C
'On retire le saut de ligne au début de Txt
Txt = Right(Txt, Len(Txt) - 1)
'On affiche le rectangle
.Visible = msoTrue
'On entre la valeur du texte
.TextFrame2.TextRange.Text = Txt
'positionnement gauche du rectangle
' égal à la position gauche du point de série cliqué +7 points
.Left = ActiveChart.SeriesCollection(1).Points(Arg2).Left + 7
'positionnement haut du rectangle
' égal à la position haute du point de série cliqué
.Top = ActiveChart.SeriesCollection(1).Points(Arg2).Top
End With
End If
End Sub