Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Filtre élaboré à "géométrie variable" - Excel 2002

jaclam

XLDnaute Nouveau
Bonjour à tous
Je suis nouveau sur ce forum car j'ai vu dans les fils de discussions le sujet évoqué, mais jamais sauf erreur dans le cas précis qui m'intéresse.
Bon voilà donc mon problème
- une base de données nommées "BD"
- une zone de critères en A1:F5 soit 1 ligne de titres et 4 lignes de critères possibles
- une zone d'extraction nommée "Extraire"

Imaginons qu'une première fois, j'indique un critère de tri en A2

Si je fais le tri manuellement, par Données > Filtrer > Filtre élaboré j'indique BD dans Plages, A1:F2 dans Zone de critères, je coche Copier vers un autre emplacement et j'indique Extraire dans "Copier dans"
Je fais OK et tout fonctionne parfaitement

Maintenant deuxième filtre : je laisse mon premier critère en A2 et j'en ajoute un en B3 par exemple

Je relance mon filtre sans changer les paramètres : erreur parce que la zone critères a été définie au départ sans la ligne 3. Il faut donc la changer à chaque fois.

Si je mets dès le départ dans critères A1:F5 en espèrant être tranquille une fois pour toutes, j'obtiens le résultat inverse puisque toutes ma base est extraite.

Donc question précise : je veux automatiser ce filtre élaboré en VBA en tenant compte uniquement des lignes remplies dans la zone de critères.
Quelle est la solution SVP ?

J'espère avoir été clair dans ma question.

Merci à tous et bon WE.
 

Catrice

XLDnaute Barbatruc
Re : Filtre élaboré à "géométrie variable" - Excel 2002

Bonjour et bienvenu sur le Forum,

Ci-joint 2 solutions :

La Base s'appelle "Base" (je n'utilise pas "BD" qui est une ref de colonne).
La base est déclarée en nom variable (CTRL+F3 pour voir)

La zone d'extraction est nommée Extraction et correspond à A1:F1

Pour la solution 1 :
La zone de criteres est aussi un nom variable (CTRL+F3 pour voir).

Sub Test1()
Range("Base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Criteres").Range("Criteres"), CopyToRange:=Sheets("Extraction").Range("Extraction")
Sheets("Extraction").Select
End Sub


Pour la solution 2 :
La zone de criteres est gerée dans le code.
Sub Test2()
With Sheets("Criteres")
For Each X In .Range("A1:" & .Range("IV1").End(xlToLeft).Address)
If .Cells(65536, X.Column).End(xlUp).Row > MaLigne Then MaLigne = .Cells(65536, X.Column).End(xlUp).Row
Next
End With
Range("Base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Criteres").Range("A1:F" & MaLigne), CopyToRange:=Sheets("Extraction").Range("Extraction")
Sheets("Extraction").Select
End Sub
 

Pièces jointes

  • Classeur1.xls
    33.5 KB · Affichages: 158
  • Classeur1.xls
    33.5 KB · Affichages: 163
  • Classeur1.xls
    33.5 KB · Affichages: 164
Dernière édition:

jaclam

XLDnaute Nouveau
Re : Filtre élaboré à "géométrie variable" - Excel 2002


Alors là moi je dis chapeau bas . Rapidité et fiabilité que demander de plus ?
J'ai testé les 2 méthodes et c'est magique ! J'ai adopté la solution 1 parce qu'elle me paraît plus simple - enfin plus simple à comprendre pour moi qui ne maîtrise par VBA. Et elle fonctionne parfaitement ! Et comme les 2 ont les mêmes fonctions (c'est bien ça non ?)
En tout cas j'ai découvert quelque chose de nouveau et je ne regrette pas d'être venu sur ce forum.
Merci infiniment Catrice et bonne journée à tous.
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré à "géométrie variable" - Excel 2002

Bonjour à tous

Je suis un petit nouveau sur le forum que j'ai découvert il y a peu et que je trouve très riche en informations.
Je débute vba et utilise Excel 2007. Je souhaitais une macro réalisant exactement la fonction décrite ci-dessus soit: à partir d'une base de données située en feuille 1, les critères étant définis en feuille 2 mais leur nombre pouvant être variable; extraire le résultat en fonction des critères de la feuille 2 proposer le résultat en feuille 2 cellule A5. J'ai essayé de passer par l'enregistreur de macro pour voir d'ou venait mon erreur mais je ne comprends pas non plus.
Et lorsque je transpose le code donné précédemment dans Excel 2007, il y a un visiblement un bug.
Quelqu'un pourrait il m'aider?

PS: Désolé de ressortir un sujet si vieux
 
Dernière édition:

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
16
Affichages
497
Réponses
12
Affichages
565
Réponses
69
Affichages
5 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…