Filtre avancé à critères variables en VBA

Bonjour à tous,

Et bien voilà, j'ai entrepris de créer un fichier qui permette à des personnes de niveau "nul" de mieux suivre leur travail.

Moi même étant de niveau "débutant de base", j'ai déjà appris plein de chose en réalisant ce travail et grâce aux forums (figer lignes et colonnes, nommer des parties de tableau, créer des menus déroulants, valider les données suivant un formats de cellule, etc..) Waou!! J'ai même réussi à adapter des écritures VBA trouver ici et là, classe!

Mais là je bloque et j'ai besoin d'aide.

Je souhaite en effet extraire des données d'une base, et les afficher sur une autre feuille destinée aux impressions.

Un filtre avancé aurait pu faire l'affaire pour moi, mais pour les futurs utilisateurs du fichier, j'aimerais que ça soit plus simple.

J'aimerais donc que grâce à deux renseignements entrés par les utilisateurs sur la feuille à imprimer, les données extraites de la base s'affichent et se modifient sur cette même feuille.

Bref, cela fait quelques jours que j'écume les forums, mais je ne trouve pas mon bonheur.

Pourriez vous m'aider à réaliser cette opération (en vous rappelant que je suis super novice!^^)?

Pour bien comprendre ce que je cherche, je joins mon fichier.

Merci.

Bonjour,

Tu dois respecter la structure de ta base de données.

Dans l’exemple joint, j’ai conservé les 11 colonnes de la base pour concevoir le filtre.

Si besoin, tu peux masquer les colonnes inutiles.

A+

Au top!! Et rapide!!

Merci beaucoup.

J'ai un peu galéré pour l'adapter à mon vrai fichier, mais ça ma permis de comprendre ton bouton "filtrer"...

Je reviens vers toi si besoin...

Encore merci!

PS (pour mieux comprendre):

Le code tirer du site plus haut ne suffisait donc pas, il manquait juste des indications de changement de feuille?

Je pensais qu'en nommant les plages, meme sur différentes feuilles, excel pouvait s'y retrouver....?

Et à quoi correspondent tes WsC ou DerLig? Ce sont justes des noms "au hasard" que tu donne pour la suite?

PS (pour mieux comprendre):

Le code tiré du site plus haut ne suffisait donc pas, il manquait juste des indications de changement de feuille ? Je pensais qu'en nommant les plages, même sur différentes feuilles, excel pouvait s'y retrouver....

Il manquait la référence à la feuille qui contient la base, mais il manquait aussi de respecter la structure de la base qui se compose de 11 colonnes.

La "ZoneExtraction" doit faire référence à =Extraction!$A$7:$K$7, "Base" faisant référence à =BD!$A$2:$K$10

Avec ces corrections, le code serait

Sub Export()
  Worksheets("BD").Range("Base").AdvancedFilter _
         Action:=xlFilterCopy, _
         CriteriaRange:=Range("ZoneCriteres"), _
         CopyToRange:=Range("ZoneExtraction"), _
         Unique:=False
End Sub

Dans le code initial, il manquait également de respecter l’orthographe de la plage nommée "ZoneCriteres" (avec un s à la fin).

Et à quoi correspondent tes WsC ou DerLig? Ce sont justes des noms "au hasard" que tu donne pour la suite?

Remarque bien qu’avec ce code le nombre de ligne est figé.

Dans le code que je t’ai proposé, la dernière ligne à prendre en compte est définie par

DerLigC = WsC.Range("A" & Rows.Count).End(xlUp).Row

Cette variable représente la dernière ligne renseignée de la colonne A dans la feuille WsC

Si le nombre de ligne de la base change, le filtre prendra en compte cette évolution.

WsC représente la feuille cible.

Qu’il s’agisse de DerLig ou WsC, il n’est pas indispensable de déclarer ces variables pour faire fonctionner le code.

Cela permet simplement d’aérer le code et de le rendre plus lisible.

Plutôt que

    DerLigC = WsC.Range("A" & Rows.Count).End(xlUp).Row
    If DerLigC > 7 Then WsC.Range("A8:K" & DerLigC).Clear

On aurait pu écrire

    If WsC.Range("A" & Rows.Count).End(xlUp).Row > 7 Then WsC.Range("A8:K" & WsC.Range("A" & Rows.Count).End(xlUp).Row).Clear

Le choix des noms pour ces variables ne se fait pas tout à fait au hasard.

On choisi généralement un nom qui "parle" et qui est adopté par bon nombre de programmeurs.

WsC pour Worksheet cible

WsS pour worksheet Source

DerLig … je te laisse deviner.

A+

Ok, super, merci pour ces explications bonus!

Il me reste un dernier point à améliorer sur ma demande initiale:

J'aimerais que les données ainsi filtrées apparaissent sous forme de tableau, ou en apparence seulement, cad avec "toutes les bordures", sans que les utilisateurs aient à faire la manip chaque fois, et bien sur que ça s'adapte au nombre de lignes. Comme cette page est destinée à l'impression....

Pourriez vous m'aider encore une fois, je n'ai rien trouvé sur ce "problème"?

Bonjour,

Je n'ai pas compris ton souci.

Les bordures sont identiques à celles de la BD.

A+

Ah oui, normal que tu ne comprennes pas, cela fonctionne sur ton fichier réponse...

Quelle "option" t'as permis de faire cela?

J'ai du adapter ton code VBA à mon vrai classeur et j'ai peut etre zappé quelque chose...

Pour ce faire j'ai opérer une exportation/importation de ton module sur mon vrai classeur.

J'ai ensuite renommé les champs de nom de feuilles pour que cela fonctionne, et redirigé l'action du bouton "filtrer" qui appellait toujours le module de ton fichier.

Je n'est pas appliqué "option explicit" à chaque feuille.

J'ai plus de colonnes dans ma vraie base, mais dont les informations n'ont pas à apparaître dans l'extraction (donc pas de problème).... Je n'ai donc pas modifié les valeurs "DerLigC >7" et "A8:K" et ça à l'air de bien fonctionner (j'ai du mal à comprendre ce que sont les valeurs 7 et A8 d'ailleurs).

La zone d'extraction n'est pas un tableau.... Je ne vois pas comment la "copie de format" s’opère...

S'agit-il donc d'une option à paramétrer, ou cela se trouve-t-il dans l'écriture du code (que j'ai pourtant copié)?

Au pire je posterai le vrai classeur, qui n'a finalement pas un caractère très confidentiel....

Encore merci de suivre mes demandes.

PS: Désolé de ne pas tout suivre, mon but étant d'arriver à réaliser ce travail en comprenant au mieux ce que je fais (car je trouve ça intéressant en plus) sans forcement apprendre précisément à coder...

Bonjour,

Au pire je posterai le vrai classeur, qui n'a finalement pas un caractère très confidentiel....

Au pire avec ton classeur, je parviendrai à comprendre

A+

Ok pas de soucis, je pensais que t'aurais pu m'expliquer d'où venait le problème juste avec les explications...

Juste un petit "attention": sur ta première réponse, ma fonction utilisant le userform sur la colonne "Pièces envoyées" avait disparue...

De plus j'en profite pour te poser une question sur mon dernier problème:

Je voudrais qu'un 2eme userform, meme genre que le premier, s'ouvre sur la colonne "langues parlées" dont j'ai fait la prepa sur la feuille données PE (waou!! ). J'ai aussi pas mal cherché, j'avoue que je fatigue un peu, et comme tu as l'air calé et sympa...

Si tu as d'autres suggestions pour rendre mon outil plus ergonomique, je suis aussi preneur! (bon après je voudrais pas abuser non plus ).

J'attends ton retour.

Merci.

84tableau-de-suivi.xlsm (107.00 Ko)

Bonjour,

Pour régler le problème des bordures, j'ai fait du ménage. En particulier, j'ai converti tous les tableaux en plage et j'ai placé des mises en formes conditionnelles pour garder l'alternance de couleurs sur les lignes.

Pour les langues parlées, j'ai utilisé le même Userform. La liste dépend de la colonne sélectionnée.

170tableau-de-suivi.xlsm (109.13 Ko)

A+

Ok super, merci encore!!

Ce sera tout je pense. J'ai encore appris sur la mise en forme conditionnelle grace à cette derniere réponse...

Bonne continuations, Ô grand maître 8)

Grand maître, c'est un peu court.

Habituellement, on m'appelle double mètre (1.89 m très exactement).

Bonne continuation.

A+

Rechercher des sujets similaires à "filtre avance criteres variables vba"