Filtrer TCD via une plage de cellules

Bonjour,

Je dispose d'un tableau de données, d'un TCD de ce tableau et d'une plage de cellules qui se veut être un filtre sur une étiquette de mon TCD. (voir exemple)

Malheureusement je ne sais pas comment faire pour que cette plage soit un filtre dynamique. J'aimerais pouvoir modifier mon filtre via des cellules et qu'en appuyant sur un bouton, ça actualise mon TCD avec le nouveau filtre.

Est-ce possible ? J'imagine qu'il faudra avoir recours au VBA, que je ne maitrise pas mais je suis prêt à lire vos solution.

Merci.

Catab

92exemple.xlsx (18.60 Ko)

bonjour

en ajoutant une colonne de pointage (que tu pourras +/- masquer) ensuite tu laisses en parmanence le filtre =1 dans ton TCD

nota : pourquoi le segment ne te suffisait pas ?

225exemple.xlsx (17.29 Ko)

Le segment ne suffit pas parce qu'il s'agit de faire une sélection de plusieurs codes articles dans un nombre gigantesque de codes article, et le segment ne dispose pas de champs de recherche. De plus, dans le tableau "Filtre", j'aimerais avoir la possibilité d'ajouter d'autres éléments en lien avec le code article.

Le filtre de base du TCD (la flèche sur l'étiquette), quand à lui, bien que disposant d'un champ de recherche, ne permet pas la sélection de plusieurs éléments.

Il me fallait donc une façon de filtrer le TCD autrement. Ta méthode semble fonctionner à merveille. C'était tellement logique que je m'en veux de ne pas y avoir penser plus tôt.

Merci pour ton aide.

Je teste ta solution en "grandeur nature" et si cela fonctionne je mettrais ce sujet résolu.

Bonjour,

Une proposition à étudier.

Cdlt.

157exemple-1.xlsm (28.95 Ko)
Option Explicit

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

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

End Sub

re

salut Jean-Eric

les colonnes de pointage, issues de la pratique des comptables depuis le Moyen-Âge , sont d'une simplicité et d'une puissance extraordinaires !

Alors, la solution de jmd marche mais... elle n'est pas adaptée à un tableau avec autant d'éléments que le mien (près de 100 000 codes articles). A chaque ajout d'un élément dans la liste "Filtre", le tableau "Données" recalcule le pointage sur chaque ligne, ce qui conduit à une forte latence entre chaque ajout (2-3 min).

Je vais tenter le passage en calcul manuel.

Sinon je vais tester la solution de jean-eric.

Merci à vous deux.

re

SOMMEPROD est en effet un peu lent

voir avec SOMME.SI comme ci-joint

77exemple-1.xlsx (17.54 Ko)

Bonjour

Pourquoi pas tout simplement NB.SI mais pas sûr que le temps soit inférieur à SOMMEPROD

=SI(NB.SI(Tableau1[Code article];[@[Code article]])>0;1;0)

Pour ma part, je placerais le champ en zone de filtre du TCD plutôt qu'en étiquette de ligne.

Bonjour,

Pas de retour sur ma proposition ? Même pas téléchargée...

Cdlt.

Merci pour vos conseils.

Je testerai ça sur mes fichiers volumineux lundi.

Actuellement en week-end

La formule SOMME.SI est plus rapide en effet. Mais c'est pas encore optimale (est-ce que ça peut l'être sur un montant pareil de lignes...)

Jean-eric, ton script marche bien mais étant novice, je ne sais pas comment l'adapter à mon fichier.

Peux-tu m'aiguiller ? (Variable à changer...)

Bonjour,

Peux-tu préciser ce que tu ne comprends pas ?

Cdlt.

A peu près rien en réalité XD

Je ne sais pas comment tu lies le script au classeur Excel, d'une part. Ou dois-je créer ma macro ?

D'autre part, je distingue bien quelques variables propre à mon fichier Exemple mais est-ce suffisant si je change leur nom avec ceux de mon "vrai" fichier ? ("Filtre" devient "SELECTION" et "Code article" devient "CodeArticle"). Rien d'autres à modifier ?

Merci.

Bonjour,

je suis confronté au même problème est la solution de Jean-Eric me semble idéale

Mais j'ai pas compris comme tu faisais le filtre sur ton TCD par la liste ???

Pouvez-vous m'aidez ?

Merci d'avance,

Bon courage

Rechercher des sujets similaires à "filtrer tcd via plage"