Filtre automatique sur plusieurs plages

Bonjour à tous,

J'ai écrit une macro qui permet d'extraire des données qui se trouvent sur une autre feuille selon plusieurs critères.

Cette macro fonctionne bien sur une seule plage de données.

Sub Export_1()

  Range("'feuille1'!A7:J1000").AdvancedFilter _
         Action:=xlFilterCopy, _
         CriteriaRange:=Range("N5:P6"), _
         CopyToRange:=Range("B7:K7"), _
         Unique:=False
End Sub

Je souhaite maintenant effectuer la même chose sur plusieurs plage de données qui ne sont pas forcement sur la même feuille.

J'ai essayé plusieurs syntaxe sans succés :

exemple :

Sub Export_1()

  Range("'feuille1'!A7:J1000";"'feuille2'!A7:J1000").AdvancedFilter _
         Action:=xlFilterCopy, _
         CriteriaRange:=Range("N5:P6"), _
         CopyToRange:=Range("B7:K7"), _
         Unique:=False
End Sub

Avez-vous une solution pour pouvoir ajouter plusieurs plages ?

Merci pour vos réponses.

Bonjour,

Un filtre s'applique sur une feuille...

Utilise une syntaxe VBA au lieu d'y incorporer une syntaxe Excel...

Eventuellement dis ce que tu veux faire et fournis un fichier adéquat.

Cordialement.

Bonjour,

Merci pour votre réponse.

vous trouverez ci-joint un fichier illustrant ma demande :

7extraction.xlsm (22.23 Ko)

Les données à extraire se trouvent dans deux feuilles différentes :

  • Feuille 1
  • Feuille 2

Dans la dernière feuille "Extraction", il y'a un tableau qui permet de définir :

  • La plage de données
  • Les paramétres de tri

La macro existante, permet d'extraire toutes les données selon mes critéres de la "Feuille 1", je souhaite également extraire selon ces mêmes critéres, les données de la "Feuille 2".

Ce fichier est un exemple, dans mon fichier de travail, les plages de données se trouveront sur plus d'une dizaine de feuilles.

Merci

Re,

Sub Filtrer()
    Dim Plg As Range, Crt As Range, PlC As Range, ws() As Worksheet
    Dim pas%, i%, f%
    With Worksheets("Extraction")
        i = 3
        Do While .Cells(i, 2) <> ""
            If .Cells(i, 2) Like "Données*" Then
                ReDim Preserve ws(f)
                Set ws(f) = Worksheets(.Cells(i, 3).Value)
                f = f + 1
            ElseIf .Cells(i, 2) Like "Critères*" Then
                Set Crt = .Range(.Cells(i, 3).Value)
            ElseIf .Cells(i, 2) Like "Copie*" Then
                Set PlC = .Range(.Cells(i, 3).Value)
            End If
            i = i + 1
        Loop
    End With
    pas = PlC.Columns.Count + 1
    Application.ScreenUpdating = False
    PlC.CurrentRegion.Offset(1).Clear
    For f = 0 To UBound(ws)
        With ws(f).Range("A1").CurrentRegion
            .AdvancedFilter xlFilterCopy, Crt, PlC.Offset(, pas * f)
        End With
    Next f
    For f = 1 To UBound(ws)
        Set Plg = PlC.Cells(1, 1).Offset(50000).End(xlUp)(2)
        With PlC.Offset(, pas * f).CurrentRegion
            .Offset(1).Copy Plg
            .Clear
        End With
    Next f
End Sub

NB-Les indications relatives aux données et paramètres sont recherchées en colonne B à partir de B3:

  • l'indication Données permet de récupérer les noms de feuilles en C (ne mentionner que les noms de feuille)
  • l'indication Critères permet de récupérer la zone de critères
  • l'indication Copie permet de récupérer la zone cible de résultats du filtrage.
Le nombre de feuilles peut donc être augmenté. Les plages de données sont supposées débuter en A1 sur chaque feuille, la ligne 1 étant la ligne d'en-tête.

La ligne 12 doit rester vide. La zone à droite de la zone de résultats doit également rester vide.

Cordialement.

bonjour

salut MFerrand

un simple TCD et des segments

note : un segment peut filtrer plusieurs TCD ou graphiques (faire un clic droit)

note 2 : on peut faire un seul TCD pour 10 onglets contenant des données. Tenté ?

pas de VBA, aucune formule

Merci MFerrand pour votre code

J'ai essayé de l'intégrer dans mon fichier réel, il subsiste juste un petit problème pour qu'il fonctionne complètement :

- Les zones de données sont clairement délimitées dans mon fichier (avec du texte au dessus et à droite), peux-t'on dans votre code rajouter un champ pour définir la plage exacte ?

Avec le code fourni, il faut obligatoirement que la ligne d'au dessus, et celle de droite soit vide, pour que l'extraction fonctionne.

Merci

TCD,

J'ai essayé avec un TCD, mais il n'a pas voulu que les plages soient sur plusieurs feuilles.

re

tu veux un unique TCD pour plusieurs sources de données (ici des onglets) ?

alors il te faut Power Pivot

tu l'as dans ton Excel récent !

il sait lier des tables

pas besoin de VBA

https://www.youtube.com/watch?v=eyCOOUHsaHU

Je ne veux pas spécialement de TCD,.

La solution de MFerrand me semble plus facile à intégrer dans mon document qui sera utilisé par plusieurs personnes (un unique bouton pour extraire les données en provenance de plusieurs feuilles).

Bonsoir,

Avec le code fourni, il faut obligatoirement que la ligne d'au dessus, et celle de droite soit vide, pour que l'extraction fonctionne.

Je suppose que tu parles de la feuille Extraction. Oui ! C'est bien le moins qu'une zone de filtre soumise à des modifications incessantes, et que l'on va effacer à chaque fois demeure relativement isolée !

D'ailleurs il est toujours conseillé de bien délimiter tous ses tableaux, c'est une organisation habituelle du travail sur Excel.

Par contre, quand tu dis que la colonne à droite de la zone de filtre doit être libre, non ! C'est toutes les colonnes à droite. Il faut de la place pour filtrer les différentes feuilles, et fusionner ensuite. Et donc plus tu auras de feuilles, plus on aura besoin de colonnes à droite...

Je ne veux pas spécialement de TCD,.

La solution de MFerrand me semble plus facile à intégrer dans mon document qui sera utilisé par plusieurs personnes (un unique bouton pour extraire les données en provenance de plusieurs feuilles).

re

soit je n'ai pas compris ta demande

soit tu méconnais les fonctions d'Excel, dont les TCD et surtout les "extractions/récupérations" de données venant de divers onglets (et de dizines d'autres sources aussi) actualisables d'un clic.

???

note que pour une utilisation à plusieurs, il est bon de fournir à chacun un fichier perso. En veillant aux liens (diverses méthodes s'offrent à toi) entre ces fichiers. Note valable quelle que soit ta méthode.

Effectivement, je ne connais pas trés bien les possibilités des TCD, je vais m'y penchez dessus.

Du coup pour mon application, j'ai modifié un peu le code de MFerrand, pour qu'il colle totalement à mes attentes.

Merci encore

Rechercher des sujets similaires à "filtre automatique plages"