Filtre élaboré avec nombre de critère variables

Adriano43

XLDnaute Occasionnel
Bonjour à tous

Débutant en vba, je suis tombé sur votre forum qui est vraiment très riche d'enseignements. Après plusieurs recherches et n'ayant pas trouvé la solution, je crée un nouveau topic; voici mon problème:

J'ai un classeur excel qui contient plusieurs onglets. Je dois faire des extractions à partir de l'onglet 1 (décrivant les semaines, et qui est donc actualisé chaques semaine)
Les critères se situent sur une autre feuille disons la feuille2, le nombre de critères est variable et l'extraction peut nécessiter des conditions de "et" et "ou".
Le résultat de l'extraction devra apparaitre sur le feuille 2 en cellule A5.
Mon problème:
Je réussis à faire la macro mais en définissant la zone de critères (exemple: A1:N3); si il y a une condition "et" et "ou", l'extraction fonctionne. Par contre si il n'y a qu'une condition "et" ou "ou" c'est à dire que soit la ligne 2 ou la ligne 3 est vide; le résultat de l'extraction est une copie de ma base de données. Il faudra je pense que la macro exclut les cellules vides dans la plage de critères pour ne faire l'extraction qu'à partir des critères mis par l'utilisateur.

Je vous joins un exemple de mon fichier.

Merci de votre aide

Cordialement

Adriano
 

Pièces jointes

  • Test.xlsm
    20.5 KB · Affichages: 103
  • Test.xlsm
    20.5 KB · Affichages: 107
  • Test.xlsm
    20.5 KB · Affichages: 113
Dernière édition:

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Et concrétement comment cela se traduit dans l'extrait du code précédent?
Je me suis peut être mal exprimé.
La base de données se situe toujours sur la 1ère feuille du classeur. La plage de cellules comportant les données débutent de la cellule A1 et est de taille variable.
Les critères sont situés sur une autre feuille de classeur (ce que je pensais définir comme Activesheet puisque la macro est lancée à partir de cette feuille) et l'extraction de la base de données résultant de la plage de critère située en A1 sur une feuille x si situera en cellule A15 de la feuille x.

Ma macro doit donc être applicable à toutes les feuilles.

J'espère avoir été clair.

Merci de votre aide
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Filtre élaboré avec nombre de critère variables

Re,

ça se traduit par : si tu ne veux pas que Sheets(1) devienne ta feuille Active, il ne faut pas la sélectionner

Code:
Sub Macro7()
'
' Macro7 Macro
    Dim bdd As Range
    Dim critères As Range
    
'Définition de la plage base de données située en feuille1
    Set bdd = Sheets(1).Range("A1").CurrentRegion
    
'Définition de la plage de critères située sur la feuille active débutant en A1
    With Activesheet
    Set critères = .Range("A1").CurrentRegion
    End With
    
'Réalisation du tri et affichage des résultats à partir de A15
    bdd.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=critères, CopyToRange:=sheets(2).Range("A15:AK15"), Unique _
        :=False
    
End Sub
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Et donc dans la ligne de code effectuant le tri, il faut aussi remplacer "CopyToRange:=sheets(2)" par "CopyToRange:=Activesheet" si j'ai bien compris?

Désolé de toutes mes questions mais je débute...:confused:
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Re Tototiti,

Voila le code que j'ai testé

Option Explicit
Sub Macro7()
'
' Macro7 Macro
Dim bdd As Range
Dim critères As Range

'Définition de la plage base de données située en feuille1
Set bdd = Sheets(1).Range("A1").CurrentRegion

'Définition de la plage de critères située sur la feuille active débutant en A1
With ActiveSheet
Set critères = .Range("A1").CurrentRegion
End With

'Réalisation du tri et affichage des résultats à partir de A15
bdd.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critères, _
CopyToRange:=ActiveSheet.Range("A15:AK15"), Unique _
:=False

End Sub

Mais il y a un toujours un débogage qui persiste sur la dernière ligne de code, celle effectuant le tri...
Désolé de vous solliciter autant
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Désolé de m'être pas fait comprendre.
Je vous mets le fichier en pièce jointe.
Pour vous répondre à vos questions:
- Je souhaite passer de sheets(2) à Activesheet car l'extraction ne sera pas toujours faite en feuille 2, l'extraction sera faite sur la feuille qui contient les critères (qui sont variables). Chaque feuille après la feuille 1 qui est la feuille qui contient les données peuvent faire l'objet d'une extraction. D'ou Activesheet qui désignerait dans mon esprit la feuille sur laquelle est lancée la macro et qui contient la plage de critères toujours située en A1.

Sur le fichier test joint, la feuille 1 sert de Base de données et les autres feuilles servent de résultat d'extraction, chaque feuille ayant sa propre plage de critères débutant en A1.

Merci à vous tototiti
 

Pièces jointes

  • Test.xlsx
    13.6 KB · Affichages: 36
  • Test.xlsx
    13.6 KB · Affichages: 39
  • Test.xlsx
    13.6 KB · Affichages: 37

tototiti2008

XLDnaute Barbatruc
Re : Filtre élaboré avec nombre de critère variables

Re,

Où sont les zones de critères sur le fichier joint ? en A1:B1 des feuilles Feuil1 et Feuil2 ?

Si oui, quels sont les critères, je n'en vois pas ?

Les résultats doivent toujours s'afficher en ligne 15 ?
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Re,

Les critères sont effectivement situés en A1.
L'exemple que je vous ai transmis contient sur la feuille 2 les critères de l'extraction qui sera sur la feuille 2 débutant en A15
La feuille 1 contient les critères de l'extraction qui sera placée sur la feuille 1 en A15.

Ce ne sont que des exemples. Le nombre de critères et de colonnes(a,g,c....) est variable.
Néanmoins les critères sont toujours situées sur une plage débutant en A1 et l'extraction qui en résulte sur une plage débutant en A15 sur la même feuille.

Je vous remets le fichier avec des exemples de critères choisis de manière aléatoire
 

Pièces jointes

  • Test.xlsx
    13.7 KB · Affichages: 46
  • Test.xlsx
    13.7 KB · Affichages: 35
  • Test.xlsx
    13.7 KB · Affichages: 35

tototiti2008

XLDnaute Barbatruc
Re : Filtre élaboré avec nombre de critère variables

Re,

Essaye comme comme ça

Code:
Sub Macro7()
'
' Macro7 Macro
Dim bdd As Range
Dim critères As Range

'Définition de la plage base de données située en feuille1
Set bdd = Sheets(1).Range("A1").CurrentRegion

'Définition de la plage de critères située sur la feuille active débutant en A1
With ActiveSheet
Set critères = .Range("A1").CurrentRegion
End With

'Réalisation du tri et affichage des résultats à partir de A15
bdd.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critères, _
CopyToRange:=ActiveSheet.Range("A15"), Unique _
:=False

End Sub
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Ok merci tototiti, j'en étais pas bien loin quand même mais je voyais pas qu'est qui clochait....
Une précision tout de même; supposant que je souhaites que ma plage de base de données débute à parti de la 3ème colonne (les 2 premières ne m'étant que très peu utiles), je remplacerai "A1" par "C1" lors de la définition de la plage base de données?
 

Adriano43

XLDnaute Occasionnel
Re : Filtre élaboré avec nombre de critère variables

Désolé , j'ai testé cela ne marche pas.
Comment procéder pour exclure de ma plage de base de données la colonne A et la colonne B qui dans le fichier de travail réel ne m'apporte pas de renseignements?

En remplaçant "A1" par"C1" cela ne fonctionne pas, puisque la fonction s'apparente à un CTRL+*...

Navré de vous solliciter encore une fois....

En vous remerçiant de votre aide
 

tototiti2008

XLDnaute Barbatruc
Re : Filtre élaboré avec nombre de critère variables

Re,

Oui, CurrentRegion c'est l'équivalent de Ctrl+*

Si tu ne veux pas les deux premières colonnes dans les résultats, il faut copier ta ligne de titre de ta base de données dans la ligne 15 de la feuille active et supprimer les étiquettes des 2 premiers champs de la version copiée

Code:
Sub Macro7()
'
' Macro7 Macro
Dim bdd As Range
Dim critères As Range

'Définition de la plage base de données située en feuille1
Set bdd = Sheets(1).Range("A1").CurrentRegion

'Définition de la plage de critères située sur la feuille active débutant en A1
With ActiveSheet
Set critères = .Range("A1").CurrentRegion
End With
'copie titres
Sheets(1).Range("A1").EntireRow.Copy ActiveSheet.Range("A15")
Range("A15:B15").Delete

'Réalisation du tri et affichage des résultats à partir de A15
bdd.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critères, _
CopyToRange:=ActiveSheet.Range("A15").CurrentRegion, Unique _
:=False

End Sub
 

Discussions similaires

Réponses
40
Affichages
2 K
  • Résolu(e)
Microsoft 365 Filtre élaboré
Réponses
3
Affichages
284
Réponses
12
Affichages
608

Statistiques des forums

Discussions
314 562
Messages
2 110 729
Membres
110 909
dernier inscrit
François19