Filtrer des données sous excel en VBA

kennedy

XLDnaute Junior
Bonjour à toutes et à tous :).

Je souhaiterais filtrer un certain nombre de données dans la colonne F d'un fichier excel en vba donc.

voilà ce que j'ai commencé à faire:

Code:
With Selection
        .AutoFilter 'on active le filtre automatique
        .AutoFilter Field:=1, Criteria1:="abc"  
End With

Comment faire pour trier via vba plus d'une certaine donnée à la fois? (histoire d'avoir en un seul filtre, toutes les infos dont j'ai besoin d'un coup)
J'ai essayer le code qui suit: mais ça ne marche pas :(

Code:
With Selection
        .AutoFilter 'on active le filtre automatique
        .AutoFilter Field:=1, Criteria1:="abc" & Criteria1:="efg"  
End With

Merci d'avance :) Bonne journée!!
 

Gorfael

XLDnaute Barbatruc
Re : Filtrer des données sous excel en VBA

Salut kennedy et le forum

Code:
With Selection
        .AutoFiltermode =false 'on désactive le filtre automatique
        .AutoFilter Field:=1, Criteria1:="abc"  
End With
Déjà, utiliser selection dans une macro est une microsofterie :D : ça sert à rien.
Si tu essaies d'utiliser le filtre automatique, c'est que tu as réussi à faire manuellement la manipulation que tu essaies de faire par VBA ? Non ?

Petite question : En nous donnant un code manifestement faux, qu'est-ce qui te permet de croire qu'on va découvrir ce que tu envisages de faire ? Même la télépathie à besoin d'un minimum !
A+
 

kennedy

XLDnaute Junior
Re : Filtrer des données sous excel en VBA

Bonjour :) disons que la première partie de code marche très bien ;)...
c'est le fait de vouloir filtrer plusieurs données à la fois qui ne marche pas.
Et non je n'arrifve pas a faire manuellement une filtration de plus de 2 données... je voudrais en filtrer plus.

Avant de dire qu'il est manifestement faux? essaie le non? ;)
voila ce que je fais pour le moment si tu veux avoir un ordre d'idée...

Code:
Worksheets("étape").Activate
Columns("F").Select
[B]With Selection
        .AutoFilter 'on active le filtre automatique
        .AutoFilter Field:=1, Criteria1:="% CLIENTS"
End With[/B]
Range("A:N").Copy
Worksheets("end").Activate
Sheets.Add
ActiveSheet.Name = "i" & i
i = i + 1
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range("J2:J65536").Clear
Columns("I").Delete Shift:=xlToLeft
        
        
Worksheets("étape").Activate
Columns("F").Select
[B]With Selection
        .AutoFilter 'on active le filtre automatique
        .AutoFilter Field:=1, Criteria1:="MARGE" 
End With[/B]
Range("A:N").Copy
Worksheets("end").Activate
Sheets.Add
ActiveSheet.Name = "i" & i
i = i + 1
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range("J2:J65536").Clear
Columns("I").Delete Shift:=xlToLeft

je réitère x fois cette opération... pour x utilisation du filtre dans la même colonne. Le but de ma question est de rassembler en un coup toutes les informations que je souhaite en un seul filtre et le coller dans ce cas dans une feuille unique. Pour le moment je suis obligé de passer par plusieurs feuilles et plusieurs filtres pour arriver à mes fins.
 

Gorfael

XLDnaute Barbatruc
Re : Filtrer des données sous excel en VBA

Salut kennedy et le forum
Un filtrage simple avec un seul ET ou un seul OU (par colonne)
Un filtrage avec plusieurs Et et/ou OU => filtre élaboré
Menu Données>>filtrer>>Filtre élaboré
Il te faut une zone de critére comportant les mêmes titres que ta zone de données : une ligne fait des ET entre colonnes
Les OU se font de ligne à ligne.

Tant que tu n'arriveras pas à le faire manuellement, difficile d'imaginer comment le faire par programmation !
Code:
With Selection
        .AutoFilter '[COLOR=Red]on active le filtre automatique[/COLOR]
        .AutoFilter Field:=1, Criteria1:="% CLIENTS"
End With
C'est faux : S'il n'y a aucun filtre, ".autofilter" active le filtre auto. Mais s'il y a déjà un filtre auto sur la sélection, il désactive le filtre auto ! Pour t'en convaincre, teste un code du style
Code:
Sub test()
With Selection
        .AutoFilter 'on active le filtre automatique
        .AutoFilter 'on active le filtre automatique
        .AutoFilter 'on active le filtre automatique
        .AutoFilter 'on active le filtre automatique
        .AutoFilter 'on active le filtre automatique
End With
End Sub
En Pas-à-Pas, en regardant ta sélection.


Ta macro donnerait un code dans ce style
Code:
Worksheets("étape").Activate
Columns("F").AutoFilter Field:=1, Criteria1:="% CLIENTS"
Range("A:N").Copy
Sheets.Add
ActiveSheet.Name = "i" & i
i = i + 1
Range("A1").PasteSpecial Paste:=xlPasteValues
Range("J2:J65536").Clear
Columns("I").Delete
        
Worksheets("étape").Activate
Columns("F").AutoFilter Field:=1, Criteria1:="MARGE"
Range("A:N").Copy
Sheets.Add
ActiveSheet.Name = "i" & i
i = i + 1
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range("J2:J65536").Clear
Columns("I").Delete
Et encore, ne possédant qu'un lambeau de code, je ne peux boucler alors que 8 lignes de code sur 9 sont identiques, et que pour la neuvième, un texte, le critère, est différent : avec un select case et une variable, ce serait fait facilement.
A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Filtrer des données sous excel en VBA

Bonsoir à tous

Une précision sur le filtre élaboré
Il te faut une zone de critére comportant les mêmes titres que ta zone de données : une ligne fait des ET entre colonnes
Pas toujours vrai on peut utiliser une formule comme critère et là l'entête doit être vide (cf ci dessous)
felabf.jpg
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Filtrer des données sous excel en VBA

Re

Gorfael
Voir mon précédent message, je l'ai édité et y ai ajouté un exemple.

Ici la zone de critère du filtre élaboré sera : $B$1:$B$2 et B1 doit être vide.
felab2.jpg
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
120