Bonjour,
je suis nouveau ici et je vous serais très reconnaissant si quelqu’un pouvait m’aider avec une macro que je dois développer pour mon projet. Mon objectif est de synchroniser tous les graphiques avec une liste déroulante, à la manière d’un « segment ». certains données pour ces graphiques proviennent d’un fichier externe, donc je souhaite que chaque fois qu’une valeur est sélectionnée dans les listes déroulantes, les graphiques correspondants se mettent à jour automatiquement.
De plus, je voudrais, si possible, que lorsqu’un CP (Chef projet) est sélectionné, seuls les projets correspondants à ce CP soient affichés dans une autre liste déroulante. Cela permettrait une interaction plus dynamique entre les éléments de l’interface utilisateur selon les sélections faites.
J’ai créé la macro suivante, mais elle ne fonctionne pas tout à fait correctement. À titre d’information, certains tableaux croisés sont créés comme « modèles de données » et d’autres comme modèles traditionnels. En effet, pour ceux créés comme modèles traditionnels, la macro fonctionne bien, mais elle ne marche pas pour les autres tableaux
Sub UpdateChartsAndPivotTables()
Dim wsData As Worksheet
Dim wsCharts As Worksheet
Dim pt As PivotTable
Dim cht As ChartObject
Dim selectedCP As String
Dim selectedProject As String
Dim wsActive As Worksheet
' Définir la feuille active
Set wsActive = ThisWorkbook.Sheets("Tbd") ' Remplacez par le nom exact de la feuille contenant les ComboBox
' Récupérer la feuille de données et la feuille de tableaux croisés dynamiques
Set wsData = ThisWorkbook.Sheets("Data_Donées")
Set wsCharts = ThisWorkbook.Sheets("Charts_méteo_Ch")
' Récupérer les valeurs sélectionnées dans les ComboBox
selectedCP = wsActive.OLEObjects("Liste_CP").Object.Value
selectedProject = wsActive.OLEObjects("Liste_Projets").Object.Value
' Filtrer les tableaux croisés dynamiques dans la feuille "Charts_méteo_Ch"
Dim pivotNames As Variant
pivotNames = Array("Tableau croisé dynamique27", "Tableau croisé dynamique28", "Tableau croisé dynamique29", _
"Tableau croisé dynamique23", "Tableau croisé dynamique24", "Tableau croisé dynamique31", _
"Tableau croisé dynamique1", "Tableau croisé dynamique3")
Dim pivotName As Variant
For Each pivotName In pivotNames
On Error Resume Next
Set pt = wsCharts.PivotTables(pivotName)
On Error GoTo 0
If Not pt Is Nothing Then
' Vérifier si le champ "RESP PLANNING" existe dans le tableau croisé dynamique
On Error Resume Next
If pt.PivotFields("RESP PLANNING").Name <> "" Then
With pt.PivotFields("RESP PLANNING")
.ClearAllFilters
.CurrentPage = selectedCP
End With
Else
MsgBox "Le champ 'RESP PLANNING' n'existe pas dans " & pivotName
End If
On Error GoTo 0
' Vérifier si le champ "Nom Projet" existe dans le tableau croisé dynamique
On Error Resume Next
If pt.PivotFields("Nom Projet").Name <> "" Then
With pt.PivotFields("Nom Projet")
.ClearAllFilters
.CurrentPage = selectedProject
End With
Else
MsgBox "Le champ 'Nom Projet' n'existe pas dans " & pivotName
End If
On Error GoTo 0
End If
Next pivotName
' Actualiser les graphiques dans la feuille "Charts_méteo_Ch"
For Each cht In wsCharts.ChartObjects
cht.Chart.Refresh
Next cht
End Sub
Je vous remercie d’avance.
Cordialement,
Emy
Test_Charts.xlsm (225,5 Ko)