VBA - Filtre avancé

Bonjour à tous,

Je suis en train d'essayer de faire un filtre avancé sur VBA. Dans le fichier avancé j'ai besoin de filtrer la première feuille avec le filtre de la deuxième feuille en faisant apparaître le résultat dans la troisième.

Sachant que le nombre de ligne de ma première feuille est variable, je l'utilise pour des rapports hebdomadaires (avec une cinquantaine de lignes) mais aussi pour le rapport annuel ou il y a plus de mille lignes.

Si quelqu'un pouvait me guider dans l'élaboration du filtre VBA je lui en serait très reconnaissant.
Pas besoin de le faire en entier, ça doit être assez rébarbatif, mais les grandes lignes seraient déjà super, je compléterai après.

Merci d'avance et bonne année :)

Bonjour

Déjà ta zone de critères semble incomplète : si les choix de la colonne B doivent se combiner avec <>Logistics, il faut répéter <>Logistics sur chaque ligne

Idem pour la colonne C

Sub Extrait()

    Range("Tableau_Données").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("Filtre"), _
        CopyToRange:=Worksheets("Extraction").Columns("A:Q"), Unique:=False

End Sub

Cependant avec 365, le filtre peut être fait par PowerQuery, intégré à Excel, plutôt que VBA surtout s'il ne porte que sur 3 colonnes de critères

Bonjour,

Merci de ta réponse.
En effet je n'avais pas répété le <>Logistics parce que pour les critères des colonnes 2 et 3 ces critères n'existent que quand la colonne 1 est différente de "Logistics".

Je connais pas le filtrage power query. L'objectif final est que quand je fais une extraction de mon logiciel pour avoir les données de la feuille 1, je veux un système assez simple et automatisé. Sachant que je dois faire la démarche au moins une fois par semaine, le filtrage power query te semble bien ici ?

Bonjour,

EDIT : J'étais tellement agacé avec le système de téléchargement que j'ai pas vu ce qui se passait pendant ce temps là.

Je plussoie pour Query bien sur...

In extenso, ça doit pas être possible comme tu l'envisage, tu peux mettre tes critères de filtre sur une autre feuille, mais les données filtrées tu dois les mettre dans la feuille active. (Soit à coté soit en dessous)

Sinon on peut aussi utiliser des moyens détournés (en utilisant les Fonctions de base de données qui ont un fonctionnement identiques)

Bon déjà ce qui serait bien c'est que ta base de donné aie des en-têtes un peu plus conventionnel : Idéalement un seul mot devrait suffire.

Quitte à mettre le reste du Texte en commentaire si ça peut te servir à quelque chose....

Dans le classeur joint l'extraction est copié en dessous la base de donnée. (vers A100)

Après, si tu veux, avec VBA tout est permis tu peux choisir de déplacer l'extraction dans une feuille.

Mais la base de la zone de critères, c'est ça. Tu peux même multiplier les colonnes de certains critères pour faire des requêtes plus complexes, Mebon...

L'essentiel est dit !

A+

Le système de téléchargement de fichier étant comme d'habitude indisponible je te mets un lien vers mon fichier :

https://www.mazurczak.fr/excel/files2021/exemple-extraction_VG.xlsx Ce lien est à copier dans dans la barre d'adresse de ton navigateur pour télécharger le fichier.

RE à tous

En effet je n'avais pas répété le <>Logistics parce que pour les critères des colonnes 2 et 3 ces critères n'existent que quand la colonne 1 est différente de "Logistics".

Warehouse activities
02. Marine/fluvial transfer of personnel (embarking/disembarking)
03. Other Land transportation activity
01. Land transportation of personnel
Warehouse activities
08. DP Operation
03. Marine/fluvial transportation of goods and equipment

existent pour Logistics

de même que

2. Land transportation event
2. Man overboard
2. Marine or fluvial transportation event
4. Handling/Lifting event

donc dois-je conclure qu'on exclue bien logistics pour ces cas ?

Car là seul 01. Air transportation of personnel est exclu pour <>logistics

Galopin01,

Merci de ta réponse, malheureusement je n'arrive pas à ouvrir ton fichier, il ne marche sur aucun de mes navigateurs.

Je n'ai pas la main sur la base de données, je ne peux donc changer aucun en tête de colonne, je récupère les données uniquement sous forme excel directement issues du logiciel.

78chris,

Mon filtre me sert à savoir quels éléments je dois garder parmi tous ceux de ma liste de départ. Je veux garder tous les éléments logistics, d'où ma première colonne de filtre, et parmi ceux qui ne sont pas logistics, je garde ceux qui sont dans la deuxième colonne, pareil pour la troisième. Je pourrais en fait supprimer le <>logistics dans la première colonne.

" je n'arrive pas à ouvrir ton fichier "

Ce n'est pas grave dans la mesure ou j'avais renommé tous les en-têtes dans mon fichier.

La problème c'est qu'il n'est pas possible d'envoyer l'extraction sur une 3ème feuille.

Cela est réservé à VBA grâce auquel il est permis de "regarder les étoilesl" (c.a.d. réaliser un peu n'importe quoi !)

Sur le fond tu avais donc bien compris comment fonctionne le filtre.

Dans ton fichier on ne peut donc renvoyer le résultat que vers le bas de la feuille 1 comme suit :

A+

RE

Dans ton fichier on ne peut donc renvoyer le résultat que vers le bas de la feuille 1

Heureusement on peut extraire même manuellement un fichier dans une autre feuille même si la manip est un poil tordue...

J'ai donné le VBA à 10:21 mais aucun retour de Thejohntib...

Je demandais des éclaircissements pour regarder la solution PowerQuery ci-joint

42extraction-pq.xlsx (52.37 Ko)

Bonjour 78chris,

Je viens d'essayer la macro, elle ne marche pas au niveau du premier Range("tableau_données).

Pour la solution powerquery, je vais essayer de creuser pour voir si c'est une solution qui me convient.
Après il faudrait que je répartisse les données en fonction de certains parmètres, par exemple faire un tableau avec les données pour lesquels la colonne H est supérieure à 3 et un où c'est inférieur.
Je comptais pour ça faire un nouveau filtre à chaque fois que j'ai besoin de faire une distinction de données. Et je pense que pour enchainer les différents filtre le VBA peut être pas mal.
Qu'en penses tu ?

RE

Je viens d'essayer la macro, elle ne marche pas au niveau du premier Range("tableau_données)

Il faut

  • soit avoir créé sur la ligne 1 de Extraction les entêtes des colonnes à extraire
    (le plus souvent un filtre avancé sert à récupérer une partie des colonnes ou dans un ordre différent...)
  • soit remplacer dans la macro Columns("A:Q") par Range("A1")
Après il faudrait que je répartisse les données en fonction de certains parmètres, par exemple faire un tableau avec les données pour lesquels la colonne H est supérieure à 3 et un où c'est inférieur.
Je comptais pour ça faire un nouveau filtre à chaque fois que j'ai besoin de faire une distinction de données. Et je pense que pour enchainer les différents filtre le VBA peut être pas mal.

La colonne H contient du texte donc pour en traiter le 1er caractère ce n'est pas juste >

Sans avoir une vue précise de l'objectif complet, difficile de répondre ... "Il n'est pas de vent favorable pour celui qui ne sait où il va !"

Rechercher des sujets similaires à "vba filtre avance"