Advanced filter et boucle sur filtre

Bonjour tout le monde,

Je me posais la question tout à l'heure, j'aimerais savoir s'il est possible d'effectuer une boucle qui parcourt tous les filtres disponible

J'ai voulu essayer avec la méthode Advanced filter, cependant ça n'a pas marché comme possible, étant donné que le filtre avancé ne marche que sur la feuille actuelle.

Merci beaucoup à vous par ailleurs.

Bonjour

Non le filtre avancé peut fonctionner sur une autre feuille...

Mais hors de tout contexte, tant des données que de la finalité opérationnelle, tu as peu de chance d'obtenir une réponse

"tous les filtres disponible" n'a intrinsèquement pas beaucoup de sens...

Bonjour,

Je te remercie de ta réponse. Quand je disais tous les filtres disponibles c'était dans le sens une colonne qui comporte X entreprises (une quinzaine à peu près).

Est-ce que c'est possible dans ce cas là d'enregistrer une feuille directement sous un nouveau classeur xls ?

C'est plus facile de mettre en place une boucle sur différents champs d'un filtrer pour c/c dans un nouveau classeur ou utiliser les feuilles d'un classeur et ensuite enregistrer sous un nouveau classeur.

Merci d'avance

Re

S'il existe plusieurs lignes par société tu auras intérêt à créer préalablement un segment sur les sociétés pour les lister afin de ne pas boucler ligne à ligne dans les données

Principe

Avec une source sous forme de tableau nommé BDD, la plage de critères en A1:A2 de Feuill1 (à adapter) et un segment sur la société (nom à adapter)

Dim ClasseurSource As Workbook, ClassserCible As Workbook
Dim Criteres As Range

Set ClasseurSource = ThisWorkbook
FeuilleSource = [BDD].Parent.Name
Set Criteres = ClasseurSource.Worksheets("Feuil1").Range("A1:A2") 'A adapter

ThisWorkbook.SlicerCaches("Segment_STE").RequireManualUpdate = False

For Each Nom In ClasseurSource.SlicerCaches("Segment_STE").SlicerItems
    Criteres.Cells(2, 1) = Nom.SourceName 'A adapter selon les critères autres que STE
    Workbooks.Add
    Set ClasseurCible = ActiveWorkbook

    ClasseurSource.Sheets(FeuilleSource).Range("BDD[#All]").AdvancedFilter _
        Action:=xlFilterCopy, CriteriaRange:=Criteres, _
        CopyToRange:=ClasseurCible.Sheets("Feuil1").Range("A1"), Unique:=False

    ActiveWorkbook.SaveAs ..... 'A préciser
    ActiveWorkbook.Close
Next Nom

Salut,

Je te remercie de ta réponse. Je viens de décortiquer ton code avec le peu que je connaisse, à quoi correspond la ligne suivante

ThisWorkbook.SlicerCaches("Segment_STE").RequireManualUpdate = False

Si je comprends bien, il faut que j'ai un classeur avec mes données et une colonne société que je définis pour ma plage de critères ? Et le segment qui agis sur cette colonne en question ?

J'ai une erreur au tout début quand tu affectes la variable FeuilleSource : moi en l’occurrence c'est mon classeur source c'est ça ?

Bonjour

Je viens de décortiquer ton code avec le peu que je connaisse, à quoi correspond la ligne suivante
ThisWorkbook.SlicerCaches("Segment_STE").RequireManualUpdate = False

Sur 365 semble nécessaire pour les segments de tableaux mais sur 2016 je ne sais pas

Si je comprends bien, il faut que j'ai un classeur avec mes données et une colonne société que je définis pour ma plage de critères ? Et le segment qui agis sur cette colonne en question ?

Tu as parlé de sociétés sur lesquelles tu veux boucler donc je suppose qu'une colonne de ta source correspond à la société et on crée donc un segment à partir de ta source sur ce champ

Le code va boucler sur le segment au lieu de boucler sur chaque ligne ce qui évite le tri et raccourcit le temps de traitement

J'ai une erreur au tout début quand tu affectes la variable FeuilleSource

As-tu respecté la consigne :

Avec une source sous forme de tableau nommé BDD,

C'est la feuille qui contient le tableau nommé BDD : cela évite de se donner le nom de la feuille puisqu'on l'obtient à partir du tableau.

Bonjour,

Effectivement, j'avais oublié de définir le tableau BDD, désolé.
Par rapports aux segments, d'accord ça marche, je savais pas que c'était possible de boucler sur chaque "champs" d'un segment.

Du coup j'ai tout réadapter mais j'ai une erreur au niveau du filtre avancé ; mon tableau BDD est une colonne à part qui contient le nom de toutes les sociétés sans doublons ou la colonne qui correspond à toutes les sociétés (vu que c'est un tableau à partir d'une extraction de donnée) : quoiqu'il en soit j'ai essayé les deux et en vain

Je te mets ci-joint mon fichier Excel en question.

RE

Si tu construit à part une table des sociétés, le segment ne sert plus : tu peux utiliser la table

Un tableau avec des colonnes vides, ce n'est pas idéal car tu va les retrouver en sortie

Tu n'as pas compris la logique des filtres avancés et leur zone de critères : il faut que cette zone existe et reçoive à chaque tour de la boucle la société à extraire

Voir ci-joint avec une feuille Critères et sans segment mais utilisation du tableau flop

Salut,

Je te remercie infiniment, c'est exactement ce que je voulais !

Par rapport aux colonnes vides, c'est pcq j'avais des données "confidentielles" c'est pour cela ^^'

Donc si je comprends bien, la méthode avce le segment c'est uniquement si dans mon tableau de données/BDD j'avais pas la colonne "Société Technicien" ?

Par rapport à la fonctionnalité du filtre avancé, enfaîte pour que ça marche, il faut que j'ai dans même classeur et soit sur la même feuille ou une feuille différente une "colonne" de mon tableau en question c'est ça ? Et après la copie tu l'as faîte directement en paramètre au niveau de l'appel de cette fonction ?

Re

Soit tu utilises un segment, soit tu utilises un tableau annexe comme ton tableau flop.

Le segment ne peut correspondre qu'à un champ existant dans la base

La zone de critères peut être n'importe où mais elle doit exister

On peut la créer par VBA en début de procédure puis la supprimer en fin de procédure

Rechercher des sujets similaires à "advanced filter boucle filtre"