Filtre avancé en VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
h
heimra
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 3 octobre 2019
Version d'Excel : 2013

Message par heimra » 3 octobre 2019, 00:44

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 :cry: (à 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 :)
TEST.xlsx
(12.1 Kio) Téléchargé 4 fois
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'029
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 3 octobre 2019, 04:48

Bonjour,
heimra a écrit :
3 octobre 2019, 00:44
Je ne copie pas dans un autre onglet même si j'aurais adoré que ceci fonctionne :cry: (à 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.
Exemple filtre avancé.xlsm
(24.74 Kio) Téléchargé 7 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
h
heimra
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 3 octobre 2019
Version d'Excel : 2013

Message par heimra » 3 octobre 2019, 12:07

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 :)
TEST.xlsx
(15.2 Kio) Téléchargé 2 fois
Merci Heimra
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'029
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 3 octobre 2019, 13:32

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 :
compiler filtrer (absences) tableau réponse.xlsm
(114.61 Kio) Téléchargé 3 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
h
heimra
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 3 octobre 2019
Version d'Excel : 2013

Message par heimra » 4 octobre 2019, 03:35

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

Sub filtre()

On Error Resume Next
ActiveSheet.Feuil2.Range("F:F").AdvancedFilter , Action:=xlFilterInPlace, Unique:=True
On Error GoTo 0

End Sub


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
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'029
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 4 octobre 2019, 04:19

heimra a écrit :
4 octobre 2019, 03:35
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.

heimra a écrit :
4 octobre 2019, 03:35
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").

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
h
heimra
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 3 octobre 2019
Version d'Excel : 2013

Message par heimra » 6 novembre 2019, 00:39

Merci, j'ai finis par résoudre mon problème :wink:
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'029
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 6 novembre 2019, 05:33

:btres:

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message