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.

Nom : Capture.JPG
Affichages : 925
Taille : 60,9 KoNom : Capture1.JPG
Affichages : 641
Taille : 21,3 Ko

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,
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 : 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 macro

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