Filtres de TCD (différentes sources) liés à une cellule.

lmeynier

XLDnaute Nouveau
Bonjour à tous.
Je travail sur Excel 2010 (non développeur), j'ai plusieurs TCD avec des bases de données différentes.
J'ai créé des segments connectés, mais il ne sont connectables que sur la même base.
Est-il possible de lier plusieurs filtres à une cellule (avec liste déroulante) de telle sorte que le résultat de la liste aille directement dans le champ ''rechercher'' du filtre ?

plus de précisions :
Table A / colonne A
ligne2 : A1/A2/B1/B2
ligne3 : A3/B4/B5
ligne4 : A1/B2
...

Table B / colonne A
ligne2 : A1
ligne3 : A3
ligne4 : B1

1er problème :
les données n'étant pas au même "format", le point commun que j'ai trouvé est *A* ou *B* pour lister A ou B.
Cela fonctionne en saisissant *A* dans le champ ''rechercher'' d'un filtre mais pas si c'est le résultat de la cellule liée à plusieurs filtres..
Les VBA trouvées ici et là ne me permette pas de mettre *qqchose*, il faut le texte exacte sinon erreur...

2e problème :
si je demande de filtrer A et que cette valeur n'est pas présente dans l'une des bases = erreur et le vba s'arrête.

Voilà, je vous remercie par avance pour l'aide que vous pourrez m’apporter.
 
Dernière modification par un modérateur:

lmeynier

XLDnaute Nouveau
Re : Filtres de TCD (différentes sources) liés à une cellule.

voici les VBA essayées :
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Application.EnableEvents = False
With ActiveSheet.PivotTables("Tableau croisé dynamique26").PivotFields("Date")
.ClearAllFilters
.CurrentPage = Range("B1").Text
End With
Application.EnableEvents = True
End If
End Sub


et :

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
If Target.Name = "Tableau croisé dynamique15" Then
Application.EnableEvents = False
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Années1").ClearManualFilter
ActiveWorkbook.SlicerCaches("Segment_Années3").ClearManualFilter
For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Années").SlicerItems
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Années1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
ActiveWorkbook.SlicerCaches("Segment_Années3").SlicerItems(Iitem.Name).Selected = Iitem.Selected
Next
Application.EnableEvents = True
End If
If Target.Name = "Tableau croisé dynamique15" Then
Application.EnableEvents = False
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Trimestres1").ClearManualFilter
ActiveWorkbook.SlicerCaches("Segment_Trimestres3").ClearManualFilter
For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Trimestres").SlicerItems
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Trimestres1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
ActiveWorkbook.SlicerCaches("Segment_Trimestres3").SlicerItems(Iitem.Name).Selected = Iitem.Selected
Next
Application.EnableEvents = True
End If
If Target.Name = "Tableau croisé dynamique15" Then
Application.EnableEvents = False
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Date1").ClearManualFilter
ActiveWorkbook.SlicerCaches("Segment_Début_de_visualisation").ClearManualFilter
For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Date").SlicerItems
'ligne suivante à répéter pour chaque autre segment en adaptant le nom
ActiveWorkbook.SlicerCaches("Segment_Date1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
ActiveWorkbook.SlicerCaches("Segment_Début_de_visualisation").SlicerItems(Iitem.Name).Selected = Iitem.Selected
Next
Application.EnableEvents = True
End If
End Sub
 

Discussions similaires