2009-09-14 8 views
1

Dans Excel 2007, j'ai un jeu de données unique sous la forme d'un tableau Excel à partir duquel je souhaite créer plusieurs tableaux croisés dynamiques et tableaux croisés dynamiques. J'aimerais pouvoir synchroniser le champ 'filtre de rapport' sur tous les tableaux croisés dynamiques et graphiques simultanément, de sorte qu'en filtrant (par exemple) le champ US_Region sur 'Pacific Northwest' sur l'un des tableaux croisés dynamiques filtrez tous les tableaux croisés dynamiques et graphiques du classeur (qui partagent un seul ensemble de données). Y a-t-il un moyen de le faire sans VBA et, si ce n'est pas le cas, quelle serait la manière la plus flexible/la moins simple de le faire dans VBA?Excel 2007 Filtrage entre plusieurs tableaux croisés dynamiques

Merci

Répondre

2

Créer une procédure pour modifier tous les champs de la page. Celui-ci parcourt toutes les feuilles de calcul du classeur et si la feuille de calcul a un tableau croisé dynamique, il modifie le champ de page pour qu'il corresponde au champ de page sur la table pivotante passée au sous-marin.

Sub ChangePage(pt As PivotTable) 

    Dim strPageValue As String 
    Dim wks As Worksheet 
    Dim ptUpdate As PivotTable 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    strPageValue = pt.PivotFields("Area").CurrentPage 

    For Each wks In ThisWorkbook.Worksheets 

     On Error Resume Next 
     Set ptUpdate = wks.PivotTables(1) 

     If Err.Number = 0 Then 
      On Error GoTo 0 
      wks.PivotTables(1).PivotFields("Area").ClearAllFilters 
      wks.PivotTables(1).PivotFields("Area").CurrentPage = strPageValue 
     End If 
     Err.Clear 

    Next wks 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 

Placez ensuite un appel à cette procédure dans le code de feuille de calcul lui-même et passer le tableau croisé dynamique vous avez changé:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 

    Call ChangePage(Target) 

End Sub 

Modifier le nom du champ de pivot de « zone » au champ de page besoin, par exemple "US_Region". Ceci peut ne pas convenir si des personnes modifient fréquemment la structure de vos tableaux croisés dynamiques d'une autre manière, car elles se déclenchent chaque fois que le tableau croisé dynamique est changé, y compris lorsqu'il est rafraîchi. Il va également donner une erreur si les utilisateurs suppriment le champ de la page spécifiée.

Si les tables pivotantes sont statiques, cela peut être le cas.

Questions connexes