VBA - Commande pour filtrer avec plusieurs critères

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 :D.

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

  • Exemple.xlsx
    235.8 KB · Affichages: 41
  • Exemple.xlsx
    235.8 KB · Affichages: 45
  • Exemple.xlsx
    235.8 KB · Affichages: 49

BOISGONTIER

XLDnaute Barbatruc
Repose en paix

Pièces jointes

  • Exemple-1.xlsx
    259.7 KB · Affichages: 52
  • Exemple-1.xlsx
    259.7 KB · Affichages: 59
  • Exemple-1.xlsx
    259.7 KB · Affichages: 51
Dernière édition:

Bibinaire

XLDnaute Nouveau
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 :)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Exemple-1.xls
    818 KB · Affichages: 46
  • Exemple-1.xls
    818 KB · Affichages: 53
  • Exemple-1.xls
    818 KB · Affichages: 63
Dernière édition:

gosselien

XLDnaute Barbatruc
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:

Bibinaire

XLDnaute Nouveau
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 !
 

gosselien

XLDnaute Barbatruc
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:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Exemple-1-3.xls
    816.5 KB · Affichages: 46
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87