Bonjour,
Je souhaite manipuler un tableau croisé dynamique avec un graphique depuis un userform.
La solution que j'ai trouvé : depuis un combobox je colle un nom dans la feuille ou se trouve le tableau et ensuite avec une macro récupère le nom et modifie le filtre nom du tableau.
Dans l'userform j'importe l'image du graphique, le combo me permet de selectionner une personne, ensuite je valide, le nom est collé dans une cellule de la feuille, par une macro je le récupère et je modifie le tcd donc le graphique,ce qui me permet depuis l'userform de voir différents profils. Le problème est que j'alimente le combo à partir d'un liste de noms dans le classeur, et que si cet agent n'a pas encore suivi de formation il ne figure pas dans le tcd, et du coup j'ai un message d'erreur qui me plante le programme.ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Nom"). _
CurrentPage = Range("o1").Value
Question: peut on charger directement les valeurs contenues dans le filtre du tcd " PivotFields("Nom"). _CurrentPage =???? " dans la combo? ça me permettrai d'éviter d'une part ce bidouillage et d'autre part d'éviter le bug
ou alors une procédure qui contrôle si le nom se trouve dans le filtre et si vrai continu, si faut "messagebox" et abandon de la procédure.
Ci dessous le code pour l'appel de l'image du graphique dans l'userform et ensuite le code de la macro qui modifie le nom du filtre
code macro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub CommandButton10_Click() If Me.choix.Text = "" Then MsgBox "Vous devez entrer un nom." Me.choix.SetFocus Exit Sub End If Sheets("Stat agents").Select Range("o1") = Me.choix.Value Call agents_FMPA ' active la feuille contenant le graphique la feuille s'appelle Graphe équipes ActiveWorkbook.RefreshAll ' raffraichir les données du tableau croisé dynamique Set CurrentChart = Sheets("Stat agents").ChartObjects(2).Chart ' référencé l'objet CurrentChart, là dans l'exemple, c'est le 2eme graphique "ChartObjects(2)" Sheets("Stat agents").ChartObjects("Graphique 2").Activate ' active le graphique qui s'appelle "Graphique 2" ActiveChart.ChartArea.Select ActiveChart.ShowWindow = True Fname = ThisWorkbook.Path & "\temp2.gif" ' attribution d'un nom pour l'export du graphique, dans le dossier courant du fichier CurrentChart.Export Filename:=Fname, FilterName:="GIF" UserForm6.Image1.Picture = LoadPicture(Fname) ' ensuite j'ai créé un UserForm (userform3) avec juste une image (vierge, qui s'appelle Image1), qui charge donc l'image venant d'être enregistré. End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub agents_FMPA() ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Nom"). _ ClearAllFilters ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Nom"). _ CurrentPage = Range("o1").Value ActiveSheet.ChartObjects("Graphique 2").Activate ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = "Suivi formation" & ": " & Range("o1").Value End Sub
Je vous remercie pour votre aide
Partager