Filtre avancé en VBA

Bonjour,

Premièrement, je suis loin d'être top en VBA. Je commence à peine à fureter dans cet univers. .

Je recherche depuis quelques semaines, la manière de créer un bouton pour faire un filtre avancé (p.s. je sais comment créer le bouton et y affecter une macro) Le problème vient du filtre que je souhaite créer en vba. Peu importe, le code que j'essais, je fais des erreurs dans la création. J'ai tenté de créer une macro et de copier le code dans le VBA (pas très concluant après quelques essais ou si j'essais d'appliquer le même code sur une autre feuille )

Voici donc ce que je souhaite.

J'ai un ficher contenant quatres onglets de données à lesquels je souhaite appliquer le même bouton pour filtrer mes doublons. Je ne copie pas dans un autre onglet même si j'aurais adoré que ceci fonctionne (à chaque fois que je veux faire un filtre avancé et copier les tableaux dans un autre onglet, excel me dit qu'on peut copier uniquement dans la feuille active).

Je n'ai aucun critère.

En résume, (Dans mon fichier)je sélectionne ma colonne E et j'applique le filtre avancé pour filtrer mes données sans doublon.

(P.S. Je ne peux pas les supprimer car une formule dépends de ces cellules )

Je vous laisse un test mais il n'est pas pareil comme mon fichier de travail

29test.xlsx (12.10 Ko)

Bonjour,

Je ne copie pas dans un autre onglet même si j'aurais adoré que ceci fonctionne (à chaque fois que je veux faire un filtre avancé et copier les tableaux dans un autre onglet, excel me dit qu'on peut copier uniquement dans la feuille active).

Pour un filtre avancé, les critères doivent être dans la même feuille que le résultat attendu.

Exemples :

pour filtrer sur la même page que les données source :

Sub filtrer()
    On Error Resume Next
    ActiveSheet.ListObjects(1).Range.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion, Unique:=False
    On Error GoTo 0
End Sub

pour filtrer et copier sur une autre page

Sub filtrercopier()
    Sheets(1).ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1").CurrentRegion, CopyToRange:=Range("A4").CurrentRegion.Resize(1), Unique:=False
End Sub

Dans mon cas, les données sont structurées ne tableau avec en-tête de colonnes.

Bonjour Steelson,

Merci de m'avoir repondu. Je comprends l'idee mais le vba ne pourrait pas s'appliquer tel quel sur mon fichier car je n'ai pas de critere de recherche. Je cherche a masquer mes doublons sur plusieurs onglets. Le vba devrait donc etre sur feuille active pour pouvoir s'appliquer sur tous mes onglets. J'ai remis un fichier, et j'ai fait un filtre avance dans test 1 pour montrer le resultat desiree mais que je pourrais faire sur mon onglet test 2

14test.xlsx (15.20 Ko)

Merci Heimra

J'aime bien les choses un peu "standard" et donc ce que je ferais volontiers, c'est d'abord une compilation dans un seul onglet et ensuite l'application d'un filtre.

Exemple ici :

https://forum.excel-pratique.com/viewtopic.php?p=799692#p799692

Il y a une feuille recap masquée et une feuille alerte pour effectuer le filtre

remis à jour ici :

Bonsoir,

J'ai compris que je me compliquais l'existence avec les quatres onglets. Je vais donc résumer mes données mais je dois quand même avoir deux tableaux distincts qui cumule les données de mes deux onglets correspondants. Ce que je veux c'est vraiment filtrer mes données en double à l'aide de VBA qui pourrait s'appliquer sur les deux tableaux. Je n'ai pas besoin de critère dans un autre tableau car je souhaite simplement masquer mes doublons.

J'ai copié votre code suivant et appliquer dans le développeur en le modifiant comme suit

Sub filtrer()

On Error Resume Next

ActiveSheet.ListObjects(1).Range.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion, Unique:=False

On Error GoTo 0

End Sub

[b]Sub filtre()

On Error Resume Next

ActiveSheet.Feuil2.Range("F:F").AdvancedFilter , Action:=xlFilterInPlace, Unique:=True

On Error GoTo 0

End Sub[/b]

Est-ce que je devrais donner un nom à la plage que je souhaite filtrer ?

Comment faire en sorte que le VBA fonctionne selon la feuille où je me trouve? (Je souhaite lui affecter un bouton)

P.S. Votre exemple est très gros pour moi. Juste quelques lignes avec votre code serait plus simple et me permettrait de mieux comprendre.

Merci de votre aide

Est-ce que je devrais donner un nom à la plage que je souhaite filtrer ?

Pour cette raison, je passe mes données en tableau. En VBA, un tableau s'écrit ListObjects. Et comme généralement on n'en met qu'un seul par onglet, pas besoin de donner son nom, l'indice 1 suffit. D'où le ActiveSheet.ListObjects(1).Range. pour désigner le tableau dans sa totalité, en-tête comprise.

ActiveSheet.Feuil2.Range("F:F").AdvancedFilter : je ne suis pas certain en effet que cela puisse fonctionner. Mais essaie l'enregistreur de macro qui te donnera une réponse (souvent trop prolifique).

Mais je te conseille de passer tes données sous forme de tableau.

Comment faire en sorte que le VBA fonctionne selon la feuille où je me trouve? (Je souhaite lui affecter un bouton)

Si le bouton est sur la feuille,
ActiveSheet
suffit, sinon il faut indiquer le nom de la feuille
Sheets("MaFeuille")
.

Merci, j'ai finis par résoudre mon problème

Rechercher des sujets similaires à "filtre avance vba"