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

VBA - Commande pour filtrer avec plusieurs critères

  • Initiateur de la discussion Initiateur de la discussion Bibinaire
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bibinaire

XLDnaute Nouveau
Bonjour le forum 🙂 !

Je rencontre une difficulté dans la rédaction d'une macro pour filtrer une colonne en retenant toutes les données à l'exception de celles correspondant à 5 valeurs critères.

J'arpente le net depuis hier et mes nombreux tests se sont avérés infructueux.
J'ai tenté le code suivant :

ActiveSheet.Range("A1:M" & ligneFin).AutoFilter Field:=2, Criteria1:=Array("<>1000", "<>1170", "<>1200", "<>1220", "<>1245"), Operator:=xlFilterValues

Mais cela ne fonctionne pas.
Il semble qu'on ne puisse pas multiplier les critères à l'envi.

Si l'un des sympathiques bénévoles de ce forum pouvait m'apporter ses lumières quant à la façon de résoudre ma problématique, ce serait extra 😀.

Je joins un fichier à titre d'exemple.
Si ma demande n'était pas suffisamment précise, je compléterai volontiers.

Merci par avance !
Très bonne soirée à vous !
 

Pièces jointes

Pièces jointes

Dernière édition:
Re : VBA - Commande pour filtrer avec plusieurs critères

Bonjour Bebere, Bonjour Boisgontier,
Bonjour le forum 🙂

Merci à tous deux de vous être penchés sur mon problème et merci pour vos propositions.

Je me rends compte que je ne suis pas allé au bout de mes explications :S.

En fait, dans mon programme, je dois :
1 - Sélectionner les lignes contenant "FHO" dans ma colonne A (simple à faire via un filtre) ;
2 - Filtrer, dans ma colonne B, pour retenir toutes les valeurs, à l'exclusion de "1000", "1170", "1200", "1220" et "1245"
3 - Supprimer les valeurs sélectionnées
4 - Et donc ne conserver au final, dans ma colonne B, pour les valeurs "FHO" de la colonne A, que les valeurs "1000", "1170", "1200", "1220" et "1245".

Par rapport à la macro que Bebere m'a détaillée, je m'en sors jusqu'à la création de la zone de critères, mais je n'arrive pas à coder correctement pour que le filtre avancé s'applique sur ma colonne B (qui sera en réalité la colonne J dans mon fichier complet).

J'espère que mes explications sont claires, si ce n'est pas le cas, n'hésitez pas à me demander de préciser.

Merci par avance pour votre aide !
Belle journée à vous 🙂
 
Re : VBA - Commande pour filtrer avec plusieurs critères

Bonjour,

cf PJ

Code:
Sub Filtre()
  [E2].Formula = "=and(countif(liste,B12)=0,A12=""FHO"")"
   Range("A11:B50000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
   Range("e1:e2"), Unique:=False
End Sub

Sub suppression()
  If MsgBox("Etes vous sûr?", vbYesNo) = vbYes Then
     Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
     Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
     ActiveSheet.ShowAllData
  Else
     MsgBox "Annulé"
  End If
End Sub

cf Le filtre élaboré: suppression de la zone filtrée

JB
 

Pièces jointes

Dernière édition:
Re : VBA - Commande pour filtrer avec plusieurs critères

Bonjour,

donc, on garde FHO et associés à FHO les "1000", "1170", "1200", "1220" et "1245" et c'est tout alors ?

4 - Et donc ne conserver au final, dans ma colonne B, pour les valeurs "FHO" de la colonne A, que les valeurs "1000", "1170", "1200", "1220" et "1245".

et... je pose la question, puisque je ne sais pas le faire: on ne pourrait pas mettre tout dans un tableau, traiter celui-ci et le recoller dans la feuille ?
 
Dernière édition:
Re : VBA - Commande pour filtrer avec plusieurs critères

Re-bonjour,

j'ai testé la méthode proposée par Boisgontier, que je remercie une fois encore au passage.
J'ai tenté d'adapter la formule à ma macro. Sans grand succès 🙁 ....

Voici mon code (je ne vous mets que la partie concernant le filtre).
Je l'ai repris en pas à pas détaillé et c'est la formule de tri avancé qui ne fonctionne pas :

' J'ajoute 3 lignes au-dessus de mon tableau pour créer ma liste et la formule
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

' Je crée ma liste avec mes 5 valeurs de B2 à F2
Range("A2").Select
ActiveCell.FormulaR1C1 = "liste"
Range("B2").Select
ActiveCell.FormulaR1C1 = "1000"
Range("C2").Select
ActiveCell.FormulaR1C1 = "1170"
Range("D2").Select
ActiveCell.FormulaR1C1 = "1200"
Range("E2").Select
ActiveCell.FormulaR1C1 = "1220"
Range("F2").Select
ActiveCell.FormulaR1C1 = "1245"
Range("B2:F2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
ActiveWorkbook.Names.Add Name:="liste", RefersToR1C1:="=SUIVIFMP!R2C2:R2C6"

' Je crée ma zone "formule" dans les cellules I2:J2
Range("I2").Select
ActiveCell.FormulaR1C1 = "formule"
Range("J2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

' J'intègre le filtre avancé
' En colonne H, je trouve mes valeurs NATCOD ("FHO", "FRE" et "FHR")
' En colonne J, je trouve mes valeurs MNTUNI
' la variable ligneFin = ActiveCell.Row (Numéro de ligne de mon curseur)
[J2].Formula = "=and(countif(liste,J5)=0,h5=""FHO"")"
Range("A4:m" & ligneFin).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("i2:j2"), Unique:=False
' ==> Après cette commande, la valeur qui s'affiche dans la cellule J2 = FAUX

Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
' ==> Le filtre est alors supprimé et toutes les valeurs du tri "FHO" sont conservées quel que soit le montant (FAUX / VRAI)

ActiveSheet.ShowAllData
' ==> Le message d'erreur suivant s'affiche :
' ==> Erreur d'exécution '1004'
' ==> La méthode Showdata de la classe Worksheet a échoué

J'avoue que je ne vois pas trop ce qui bloque, mais j'ai forcément commis une erreur quelque part.

Voyez-vous ce qui pose problème ?

Merci d'avance pour vos lumineuses propositions !
 
Re : VBA - Commande pour filtrer avec plusieurs critères

Bonjour
un exemple pour Gosselien

Hello,

merci 🙂 moi je pense plutôt à passer par un dictionnaire, ce que je comprends plus difficilement ansi que les tableaux malgré de nombreux exemples 🙂

ps pour Bibinaire : tu ne dis pas quelle ligne est "ligneFin" dans ton code
ex: Nblignes = Sheets("feuil1").[C65000].End(xlUp).Row + 1


' la variable ligneFin = ActiveCell.Row (Numéro de ligne de mon curseur)
[J2].Formula = "=and(countif(liste,J5)=0,h5=""FHO"")"
Range("A4:m" & ligneFin).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("i2:j2"), Unique:=False
 
Dernière édition:
Re : VBA - Commande pour filtrer avec plusieurs critères

Voir PJ

Code:
Sub Filtre()
   Rows("1:4").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
   [M2:Q2].Value = Array(1000, 1170, 1200, 1220, 1245)
  [E2].Formula = "=and(countif($m$2:$q$2,j6)=0,A6=""FHO"")"
   Range("A5:j50000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
   Range("e1:e2"), Unique:=False
End Sub

JB
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…