VBA - Evènements de graphique

Y compris Power BI, Power Query et toute autre question en lien avec Excel
P
Popooutai
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 février 2017
Version d'Excel : 2016 FR

Message par Popooutai » 8 mars 2017, 19:12

Bonjour,

J'ai un onglet dans lequel sont insérés deux graphiques.
Le premier est un diagramme circulaire (un camembert), le deuxième un histogramme.
Je souhaiterais que quand l'utilisateur clique sur une partie du camembert, l'histogramme se mette à jour automatiquement.

J'ai créé un module de classe "Classe 1":

Option Explicit
Public WithEvents GlobalChart As Chart

Private Sub GlobalChart_MouseDown(ByVal ElementID As Long, _
ByVal arg1 As Long, ByVal arg2 As Long)

Dim ID As Long
Dim arg1 As Long
Dim arg2 As Long
Dim n As Integer

GlobalChart.GetChartElement x, y, ID, arg1, arg2

If ElementID = 3 Then

n = ActiveChart.SeriesCollection(1).Points(arg2).Value

For i = 20 To 27
If n = Cells(i, 15).Value Then

ThisWorkbook.Worksheets("Chart 4").Activate
ActiveSheet.ChartObjects("Chart 2").Activate
ActiveChart.FullSeriesCollection(1).Name = ThisWorkbook.Worksheets(4).Cells(i, 2).Value

Set SourceRng = Sheets("Chart 4").Range("B" & i & ":N" & i)

ActiveChart.FullSeriesCollection(1).Values = SourceRng
End If
Next
End If

End Sub

Et sur la feuille qui contient les graphiques ("Chart 4"):

Option Explicit
Dim adaptGraph As New Classe1

Sub Worksheet_Activate()
Set adaptGraph.GlobalChart = Sheets("Chart 4").ChartObjects("Chart1").Chart
End Sub

Mais mon code ne fonctionne pas. Pas de message d'erreur, on dirait simplement que le code ne s'exécute pas.
Peut-être avez-vous une idée de ce qui est faux/de ce qui manque?

Merci d'avance pour votre aide!
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'553
Appréciations reçues : 215
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 9 mars 2017, 18:05

Bonsoir,

Essayer ce code :
Option Explicit
Public WithEvents GlobalChart As Chart

Public Property Set Obj_Chart(ByVal graphe As Chart)
    Set GlobalChart = graphe
End Property

Private Sub GlobalChart_MouseDown(ByVal ElementID As Long, _
    ByVal arg1 As Long, ByVal arg2 As Long)
    
    Dim ID As Long
    Dim arg1 As Long
    Dim arg2 As Long
    Dim n As Integer
    
    GlobalChart.GetChartElement x, y, ID, arg1, arg2
    
    If ElementID = 3 Then
    
        n = ActiveChart.SeriesCollection(1).Points(arg2).Value
    
        For i = 20 To 27
            If n = Cells(i, 15).Value Then
                ThisWorkbook.Worksheets("Chart 4").Activate
                ActiveSheet.ChartObjects("Chart 2").Activate
                ActiveChart.FullSeriesCollection(1).Name = ThisWorkbook.Worksheets(4).Cells(i, 2).Value
                
                Set SourceRng = Sheets("Chart 4").Range("B" & i & ":N" & i)
                
                ActiveChart.FullSeriesCollection(1).Values = SourceRng
            End If
        Next
    End If

End Sub
Option Explicit
Dim adaptGraph As New Classe1

Sub Worksheet_Activate()
    Set adaptGraph.Obj_Chart = Sheets("Chart 4").ChartObjects("Chart1").Chart
End Sub
P
Popooutai
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 février 2017
Version d'Excel : 2016 FR

Message par Popooutai » 9 mars 2017, 22:33

Bonsoir thev,

Merci pour votre réponse.
Je viens d'essayer votre code (la seule différence était bien dans le Public Property Set, non) mais il ne marche pas :(
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message