Advanced Filter VBA

toline

XLDnaute Nouveau
Bonjour à tous,

Je me permets de solliciter de nouveau votre précieuse aide pour mes débuts en VBA.
Je suis actuellement bloquée sur une problématique. J'ai plusieurs onglets : un onglet "Data" et plusieurs onglets "Endroit 1", "Endroit 2", "Endroit 3"...

Je souhaite créer un bouton que l'on placerait dans chacun des onglets "Endroit x".
L'objectif est le suivant : si, dans l’onglet Data, colonne H=nom de l'onglet actif et valeur colonne K>31 alors je souhaite extraire les données de l’onglet Data pour les coller dans un nouvel onglet Extraction.

J'ai donc commencé la macro suivante, en utilisant Advanced Filter:

Code:
Sub Extraction1mois()
Dim DernLigne As Long
DernLigne = Sheets("Data").Range("A1048576").End(xlUp).Row
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Name = "Extraction"
Sheets("Data").Range("A1:K" & DernLigne).AdvancedFilter(Action:=xlFilterCopy, CriteriaRange:=Sheets("Data").Range("A1:K2"),Field:=8, Criteria:= ActiveWorkbook.ActiveSheet.Name, Field:=11, Criteria1:=">=31",CopyToRange:=Sheets("Extraction").Range("A1:K1"), Unique:=False)
End Sub

J’ai essayé ma macro mais j’ai un souci de syntaxe. Je pense que c’est lié aux deux critères mais je ne vois pas comment les formuler autrement.

Pouvez-vous m’aider ?
Merci beaucoup
Toline
 

Philippe Tulliez

XLDnaute Nouveau
Re : Advanced Filter VBA

Bonjour,
Le ou les critères doivent être dans une plage de cellules.
Le filtre élaboré ou avancé d'excel utilise deux ou trois zones (La zone des données, la zone des critères et éventuellement une zone d'exportation.
Les deux premières zones citées, doivent avoir des étiquettes de colonnes de même orthographe sauf si tu utilises des critères nommés (calculés) ensuite sur les lignes suivantes les données pour la zone data et le ou les critères pour la zone des critères.
 

Bebere

XLDnaute Barbatruc
Re : Advanced Filter VBA

bonjour Toline
bienvenue
à tester
Sub Extraction1mois() 'feuille extraction doit avoir les mêmes entêtes(ou une sélection,peu importe l'ordre) que data
Dim DernLigne As Long, nom As String
DernLigne = Sheets("Data").Range("A1048576").End(xlUp).Row
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Name = "Extraction"
nom = ActiveWorkbook.ActiveSheet.Name
'N1 reste vide
'critères
Sheets("Data").Range("N2").FormulaLocal = "=et(H2 = """ & nom & """; K2 >= 31)"
Sheets("Data").Range("A1:K" & DernLigne).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Data").Range("N1:N2"), CopyToRange:=Sheets("Extraction").Range("A1:K1"), Unique:=False
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Re : Advanced Filter VBA

Bonsour® Corona ;)
Bonjour,
Le ou les critères doivent être dans une plage de cellules.
Le filtre élaboré ou avancé d'excel utilise deux ou trois zones (La zone des données, la zone des critères et éventuellement une zone d'exportation.
Les deux premières zones citées, doivent avoir des étiquettes de colonnes de même orthographe sauf si tu utilises des critères nommés (calculés) ensuite sur les lignes suivantes les données pour la zone data et le ou les critères pour la zone des critères.

t'ain... cela faisait des années que je n'avais plus trace de ce pseudo :eek:

Bienvenue, soit ici aussi prolifique que sur les feux forums Microsoft...

A te suivre dans tes prochaines participations...:cool:
 

toline

XLDnaute Nouveau
Re : Advanced Filter VBA

bonjour Toline
bienvenue
à tester

Bonjour Bebere

Merci pour la réponse rapide!
J'ai testé la macro. Elle crée bien l'onglet mais par contre elle ne copie aucune des lignes qui respectent la critère car selon elle il n'y en a aucune.

La raison est pour moi la suivante : en N2, la formule évaluée est
Code:
et(H2 = "Extraction"; K2 >= 31)

Alors que je voudrais plutôt
Code:
et(H2 = "Endroit 1"; K2 >= 31)

La variable nom se réfère à l'active sheet juste après la création de mon nouvel onglet, donc à l'onglet Extraction.
Je souhaiterais plutôt que la variable se réfère à l'onglet dans lequel j'ai lancé la macro. Est-ce possible en VBA?

J'apprécie grandement l'aide trouvée sur ce forum, elle me permet de m'améliorer :)
 

Philippe Tulliez

XLDnaute Nouveau
Re : Advanced Filter VBA

Bonjour,
Si tu veux filtrer les données à l'aide de cette formule
Code:
=ET(E2="Ventes";F2>2000)
, cela se traduit en VBA par
Code:
"=AND(E2=""Ventes"",F2>2000)"
soit doublement des guillemets et le séparateur d'argument doit être une virgule et pas point-virgule
Exemple d'une exportation des données répondant aux critères reprit plus haut à l'aide de la méthode AdvancedFilter
Code de la procédure
Code:
Sub ExportByAdvancedFilter_Exemple_1()
 Const myFormula As String = "=AND(E2=""Ventes"",F2>2000)"
 Dim areaSource As Range, areaTarget As Range, areaCriteria As Range
 With ThisWorkbook
  Set areaSource = .Worksheets("Data").Range("A1").CurrentRegion
  Set areaTarget = .Worksheets("Export").Range("A1")
 End With
 ' Zone des critères à 2 colonnes après la zone des données
 With areaSource
  Set areaCriteria = .Offset(columnoffset:=.Columns.Count + 1).Resize(2, 1)
 End With
 ' Placement des critères
 With areaCriteria
 .Cells(1) = "_fn_": .Cells(2).Formula = myFormula
 End With
 ' Suppression des cellules de la feuille cible avant exportation
 areaTarget.Worksheet.Cells.Clear
 ' Exportation suivant les critères
 areaSource.AdvancedFilter xlFilterCopy, areaCriteria, areaTarget
 ' Suppression de la zone des critères
 areaCriteria.Clear
 ' Suppresion des références aux variables objets
 Set areaSource = Nothing: Set areaTarget = Nothing: Set areaCriteria = Nothing
End Sub

Illustration des données source (feuille nommée [Data]) et de la feuille nommée [Export] après avoir lancé la procédure.

ExportByAdvancedFilter.jpg
 

Pièces jointes

  • ExportByAdvancedFilter.jpg
    ExportByAdvancedFilter.jpg
    58.4 KB · Affichages: 102

Discussions similaires

Réponses
2
Affichages
118

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote