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

Bonjour à tous et Bonjour tototiti,

La macro faite précédemment fonctionne; je voudrais simplement y ajouter une fonction mais je ne sais comment faire...
Je voudrais toujours faire une extraction à partir des critères dont la plage se situe en A1 d'une feuille mais je voudrais que l'extraction proposée comporte uniquement comme colonne les colonnes passées en critères.
Ex: critères concernant la colonne a et c

Le résultat de l'extraction doit être uniquement les colonnes a et c

Je vous joins un fichier exemple.

Merci de votre aide par avance
 

Pièces jointes

  • Test.xlsx
    16.2 KB · Affichages: 28
  • Test.xlsx
    16.2 KB · Affichages: 28
  • Test.xlsx
    16.2 KB · Affichages: 27

tototiti2008

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

Bonjour Adriano,

Dans ce cas, tu ne dois pas copier la ligne de titre de la liste (Sheets(1)) mais tu dois copier la ligne de titres de la zone de critères (Activesheet), sans supprimer les 2 premières cellules
Tu as une idée de comment faire ?
 
Dernière édition:

Adriano43

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

Bonjour Tototiti,

Oui c'est bon je sais comment faire merci de m'avoir mis sur la piste.
J'étais entrain de réfléchir à une autre solution qui fonctionne en filtre avancé mais que je n'arrive pas à coder en vba.
Je mets mes entêtes de colonnes à partir de A15. ( Dans la fenêtre filtre avancé, je sélectionne cette plage comme "Copier dans" ce qui à l'avantage de me donner une extraction en foonction des critères situés en A1 et de me renseigner uniquement les colones que j'ai préalablement mise en A15.
Je voulais donc définir cette plage entêtes de la manière suivante:

"'Definition des entêtes située sur la feuille active débutant en A15
With ActiveSheet
Set entêtes = .Range(Selection, Selection.End(xlToRight)).Select
End With"

Mais il y a une erreur que je ne vois pas
Pourriez vous m'aider?

Cordialement
 

Adriano43

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

Voici un fichier avec mon exemple qui sera plus parlant je pense
 

Pièces jointes

  • Test.xlsx
    16.2 KB · Affichages: 45
  • Test.xlsx
    16.2 KB · Affichages: 41
  • Test.xlsx
    16.2 KB · Affichages: 43

tototiti2008

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

Re,

Je ne comprend pas bien, ça ne marchait pas avec Activesheet.range("A15").currentregion ?

Sinon, remplace peut-être par

with activesheet
set entetes = .Range(.range("A15"), .range("A15").end(xltoright))
end with
 

Adriano43

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

Re,

Non; la macro renvoyée jusqu'à présent un extraction certes en fonction des critères situés en A1 mais nous proposer l'ensemble des colonnes du fichier source.
Mais j'y suis arrivé en la modifiant.
Voici le code pour info:

Sub MacroExtractionavancée2()

' Macro qui fait l'extraction à partir de la bdd à partir des critères en A1 et des intitulés de colonne défini par l'utilisateur en A15
Dim bdd As Range
Dim critères As Range
Dim entetes 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

'Definition des entêtes située sur la feuille active débutant en A15
With ActiveSheet
Set entetes = .Range(.Range("A15"), .Range("A15").End(xlToRight))
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").CurrentRegion, Unique _
:=False

End Sub
 

tototiti2008

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

Re,

Juste pour que je meure moins bête, à quoi te servent les lignes

Code:
'Definition des entêtes située sur la feuille active débutant en A15
    With ActiveSheet
    Set entetes = .Range(.Range("A15"), .Range("A15").End(xlToRight))
    End With

si tu n'utilises pas la variable entetes dans la suite du code ?
 

Adriano43

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

Bonjour Tototiti

C'est effectivement une bonne question, je vais voir pour alléger le code en supprimant ces lignes de codes.
Une dernière précision, je voulais définir une zone d'impression comme une plage de cellule et je pensais au code suivant mais celui-ci doit comporter une erreur, avez vous une idéee?

Application.ScreenUpdating = False
With ActiveSheet
Set zoneimpression = .Range("A15").CurrentRegion
End With
Columns("A:A").EntireColumn.AutoFit
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = zoneimpression

Cordialement
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Filtre élaboré
Réponses
3
Affichages
223
Réponses
12
Affichages
325

Statistiques des forums

Discussions
312 242
Messages
2 086 532
Membres
103 243
dernier inscrit
SAH