FILTRE TCD via une liste de cellules

Bonjour à tous,

Newbie sur le forum mais je vous suis depuis un certain temps.

Je recherche une solution permettant de filtrer un TCD via une liste de valeur qui serait présente sur une autre feuille du classeur. (Sachant que cette liste peut-être variable de 1 à 50 par exemple.

J'ai trouvé ce post qui semble répondre à mes attente mais je n'arrive pas à adapter la macro

https://forum.excel-pratique.com/viewtopic.php?f=2&t=95715

Je joint un fichier type sur l'entre d'entre vous à une solution

L'idée étant dans la feuille Filtre de mettre les valeurs dans la colonne A et que cela filtre mon TCD en feuille TCD via un bouton ou au changement de feuille

Merci par avance

161test.xlsm (13.76 Ko)

Bonjour

Partant du principe que le meilleur code est celui qu'on n'écrit pas...

Filtrer avec une liste indépendante nécessite de s'assurer qu'aucun élément de la liste n'est absent de la source de données (sinon bonjour les problèmes), ce qui ralentit forcément le code...

Dans ton fichier joint, un effort pour afficher dans l'onglet filtre des valeurs en rapport avec les données aurait été bienvenu...

Une autre solution consiste à ajouter une colonne à la source : une simple actualisation du TCD donnera le filtre voulu.

Formule

=MAX(NB.SI(Filtre!A:A;A2);0)

champ à placer en zone de filtre du TCD avec filtre sur 1

Bonjour,

Une proposition à étudier.

Cdlt.

410test-1.xlsm (27.20 Ko)
Option Explicit

Private Sub Worksheet_Activate()
Dim wsList As Worksheet
Dim lo As ListObject
Dim pt As PivotTable, pf As PivotField, pi As PivotItem
Dim rCell As Range

    Set pt = Me.PivotTables(1)
    Set pf = pt.PivotFields("Article")
    '-------------------------------------------------------------
    With pt
        .PivotCache.MissingItemsLimit = xlMissingItemsNone
        .RefreshTable
        .ClearAllFilters
    End With
    '-------------------------------------------------------------
    Set wsList = ActiveWorkbook.Worksheets("Filtre")
    Set lo = wsList.ListObjects(1)
    If lo.DataBodyRange Is Nothing Then Exit Sub
    '-------------------------------------------------------------
    For Each pi In pf.PivotItems
        Set rCell = lo.DataBodyRange.Find _
                    (what:=pi.Name, _
                     LookIn:=xlValues, _
                     lookat:=xlWhole)
        If rCell Is Nothing Then pi.Visible = False
    Next pi

End Sub

Merci pour vos réponses 78Chris et Jean-Eric.

Je pense que la solution de Jean-Eric correspond mieux à ce que je recherche, la mise à jour se faisant de façon automatique.

Par contre je ne comprends pas pourquoi vous avez défini un tableau sur les feuilles "Données" et "Filtre". Sur le filtre ça ne me gêne pas trop en revanche sur données est-il possible de s'en passer ? la base étant mise à jour quotidiennement et avec un nombre de lignes différents chaque jour.

Au passage à quoi correspond"Set lo = wsList.ListObjects(1)" ?

Merci par avance

Du coup,

J'ai pu résoudre mon problème grâce à vous,

Je passe le sujet en résolu

Merci encore

Re,

Les tableaux sont dynamiques et non pas besoin d"être redimensionnés.

Comme pour l'ajout de lignes (copier/coller par exemple).

L'actualisation des TCDs est alors simplifiée.

Set lo=wsList.Lisobjects(1) fait référence à tbl_Filtre.

Il n'est pas nommé car il est unique dans la feuille (on utilise son index).

Tes plages Tableau1 et Tableau2 peuvent être supprimées...

Cdlt.

Rechercher des sujets similaires à "filtre tcd via liste"