Filtre avancé à critères variables en VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
N
Nia
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 17 novembre 2014
Version d'Excel : 2007 FR

Message par Nia » 17 novembre 2014, 23:50

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.
Essai extraction filtrée.xlsm
(27.69 Kio) Téléchargé 83 fois
f
frangy
Passionné d'Excel
Passionné d'Excel
Messages : 4'337
Appréciation reçue : 1
Inscrit le : 19 novembre 2012
Version d'Excel : 2007 FR

Message par frangy » 18 novembre 2014, 01:29

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.
Essai extraction filtrée.xlsm
(25.61 Kio) Téléchargé 196 fois
A+
N
Nia
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 17 novembre 2014
Version d'Excel : 2007 FR

Message par Nia » 20 novembre 2014, 01:55

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?
f
frangy
Passionné d'Excel
Passionné d'Excel
Messages : 4'337
Appréciation reçue : 1
Inscrit le : 19 novembre 2012
Version d'Excel : 2007 FR

Message par frangy » 20 novembre 2014, 09:42

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+
N
Nia
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 17 novembre 2014
Version d'Excel : 2007 FR

Message par Nia » 23 novembre 2014, 00:39

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"?
f
frangy
Passionné d'Excel
Passionné d'Excel
Messages : 4'337
Appréciation reçue : 1
Inscrit le : 19 novembre 2012
Version d'Excel : 2007 FR

Message par frangy » 23 novembre 2014, 07:38

Bonjour,

Je n'ai pas compris ton souci.
Les bordures sont identiques à celles de la BD.

A+
N
Nia
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 17 novembre 2014
Version d'Excel : 2007 FR

Message par Nia » 23 novembre 2014, 18:18

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...
f
frangy
Passionné d'Excel
Passionné d'Excel
Messages : 4'337
Appréciation reçue : 1
Inscrit le : 19 novembre 2012
Version d'Excel : 2007 FR

Message par frangy » 23 novembre 2014, 18:32

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 :D

A+
N
Nia
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 17 novembre 2014
Version d'Excel : 2007 FR

Message par Nia » 23 novembre 2014, 20:55

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!! :D ). 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.
Tableau de suivi.xlsm
(107 Kio) Téléchargé 79 fois
f
frangy
Passionné d'Excel
Passionné d'Excel
Messages : 4'337
Appréciation reçue : 1
Inscrit le : 19 novembre 2012
Version d'Excel : 2007 FR

Message par frangy » 24 novembre 2014, 08:30

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.
Tableau de suivi.xlsm
(109.13 Kio) Téléchargé 162 fois
A+
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message