2 pièce(s) jointe(s)
problème manipuler un graphique dynamique
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.
Pièce jointe 242928Pièce jointe 242933
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,
Citation:
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Nom"). _
CurrentPage = Range("o1").Value
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.
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:
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 macro
Code:
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