Salut,
j'ai posté une source qui répond à ton besoin. en attendant la validation de cette source voici le code en avant première:
Option Explicit
Sub InfoSurPointGraph()
'cette macro est à affecter à un graphique.
'Le graphique choisi pour la demo est de type "camembert".
Dim MonGraph As Object, MaMacro As String, MonPoint As Point, SerieValues As Variant
Dim DataLabelEnable As Boolean, Nom As String, IndexPoint As Variant, SerieXValues As Variant
'on met le graphique appelant dans une variable object
Set MonGraph = ActiveSheet.ChartObjects(Application.Caller)
'on enregistre le nom de la macro associée
MaMacro = MonGraph.OnAction
'on dissocie la macro du graph pour éviter que l'utilisateur ne relance la macro
MonGraph.OnAction = ""
MonGraph.Activate
Do
Err.Clear
'ici on attend qu'un objet, dont le parent est une serie, soit sélectionné
On Error Resume Next
Nom = ActiveChart.SeriesCollection(Selection.Parent.Name).Name
'si l'objet attendu est sélectionné
If Err = 0 Then
Exit Do
ElseIf Err = 91 Or TypeOf Selection Is Range Then 'si une cellule ou un autre objet est sélectionnée on arrete tout.
'on associe à nouveau le graph avec la présente macro avant de sortir
MonGraph.OnAction = MaMacro
Exit Sub
End If
DoEvents
Loop
On Error GoTo 0 'annule le "on error resume next"
Do
'les secteurs d'un graph de type "camembert" sont des objets Point de la collection Points
' donc si un point(secteur) est sélectionné
If TypeOf Selection Is Point Then
'on le met dans une variable de type Point
Set MonPoint = Selection
'on vas passer par le datalabel pour récupérer l'index du point sélectionné
With MonPoint
Application.ScreenUpdating = False
If .HasDataLabel = False Then 'si les datalabels ne sont pas activés
DataLabelEnable = False 'on enregistre cet etat
.HasDataLabel = True 'on les actives pour pouvoir récupérer le nom du datalabel
Else
DataLabelEnable = True
End If
'le nom du datalabel est sous la forme : "S1P2" qui se traduit par Serie1 Point2
'on vas donc récupérer le chiffre apres le "P".
IndexPoint = LCase$(.DataLabel.Name)
IndexPoint = Right$(IndexPoint, Len(IndexPoint) - InStr(1, IndexPoint, "p", vbTextCompare))
If DataLabelEnable False Then .HasDataLabel False 'on retabli l'etat des datalabels
SerieValues = ActiveChart.SeriesCollection(Nom).Values
SerieXValues = ActiveChart.SeriesCollection(Nom).XValues
'
'-------------------------------------------------------------------
'ici la msgbox peut être remplacée par une macro
MsgBox "La consommation est de " & SerieValues(IndexPoint) & "% pour " & SerieXValues(IndexPoint) & " 2010"
'-------------------------------------------------------------------
'
Application.ScreenUpdating = True
End With
'on donne le focus au graph pour éviter de rester coincé dans une boucle qui afficherait la msgbox
MonGraph.Select
ActiveChart.ChartArea.Select
DoEvents
End If
DoEvents
'un clic dans une cellule arrête tout !
If TypeOf Selection Is Range Then Exit Do
Loop
'on associe à nouveau le graph avec la présente macro
MonGraph.OnAction = MaMacro
End Sub
Contrairement à ce que propose jordane45, je n'utilise pas les événements dans les graphiques, ce qui est plus facile à mettre en place si tu est débutant.
Si tu tien à utiliser les événement dans les graphiques tu aussi aller voir une source que j'ai posté ici :
http://www.vbfrance.com/codes/GRAPHIQUE-3D-TOUT-MOUVEMENT_47595.aspx
A+