[VBA] utilister autofilter sur plusieurs criètes "<>" ; 1 colonne

Bonsoir,

J'essaie d'utiliser Autofilter pour conserver les lignes, pour lesquelles il est indiqué soit : PN, soit PR, soit LRR, soit LRN, soit ZDET dans la [colonne D]

Pour ce faire, je m'y prends ainsi : Pour toutes les valeurs différentes de "PN" ; "PR" ; "LRR" ; "LRN" ou "ZDET" en colonne D ; alors supprimer la ligne.

Malgré les explications trouvées sur internet et les tests réalisés, j'ai l'impression de réaliser la bonne méthode, mais je ne parviens pas à obtenir ce que je souhaite.

Voici quelques tests de code que j'ai fait :

'    .Rows(1).AutoFilter
    'Critères de recherche
    Criteres = Array("<>PN", "PR", "LRN", "LRR", "ZDET")
    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & Criteres, Operator:=xlAnd 'Operator:=xlOr

'    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & "PN", Operator:=xlOr, Criteria1:="<>" & "PR", _
'    Operator:=xlOr, Criteria1:="<>" & "LRN", Operator:=xlOr, Criteria1:="<>" & "LRR"

With so
    'Array("PN", "PR", _
'        "LRN", "LRR", "ZDET"), Operator:=xlAnd 'Operator:=xlFilterValues
'                     'Field:=3, Criteria1:="<>" & "PN", Operator:=xlAnd
    .Rows("2:" & lrso).Delete Shift:=xlUp
    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & "PR", Operator:=xlAnd
    .Rows("2:" & lrso).Delete Shift:=xlUp
    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & "LRN", Operator:=xlAnd
    .Rows("2:" & lrso).Delete Shift:=xlUp
    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & "LRR", Operator:=xlAnd
    .Rows("2:" & lrso).Delete Shift:=xlUp
    .Rows("1:" & lrso).AutoFilter Field:=3, Criteria1:="<>" & "ZDET", Operator:=xlAnd
    .Rows("2:" & lrso).Delete Shift:=xlUp
    .Rows(1).AutoFilter
    .ShowAllData
End With

Le résultat que j'obtiens est soit :

  • aucune ligne
  • 1 seule ligne, la première information traitée

Savez-vous ce que je fais de travers ?

Merci de votre aide !

Je suis pas loin du résultat, si je trouve d'ici peu, je posterai une réponse !

Bonne fin de soirée.

7test-2.xlsm (27.27 Ko)

Bonjour,

à tester,

Sub test()
m = Array("PN", "PR", "LRR", "LRN", "ZDET")
For j = 2 To Cells(Rows.Count, "D").End(xlUp).Row
    For i = 0 To UBound(m)
      If IsError(Application.Match(Range("$D" & j), m, 0)) Then Rows(j).Hidden = True
    Next i
Next j
End Sub

Bonsoir,

Quels sont les codes exhaustifs sur la colonne D ? Donne-les afin de voir d'autres possibilités.

Bonjour,

Pour répondre rapidement voici la liste des codes :

LRM

LRE

LRN

LRR

BONN

DH

DO

BERN

PN

BARC

OSPAR

PR

PD

POM

ZDET

PNA

exPNA

SCAP NAT

SCAP REG

SENSREG

SENSNAT

REGL

SENSDEP

REGLSO

REGLII

TAXREF_STATUT_BIOGEO

REGLLUTTE

PAPNAT

Je n'ai pas encore testé la solution proposée !

Dans le code, je vois ceci :

Rows(j).Hidden = True

Si les données sont cachées, ça risque de me poser problème, l'objectif est de supprimer ce qui est différent.

A plus tard

Bonjour

La proposition de Raja fonctionne

Pour supprimer la ligne il suffit de remplacer Hidden par delete

Si rows(j) coince mettre Cells(j, 1).EntireRow.Delete sans pb

Sub test()

m = Array("PN", "PR", "LRR", "LRN", "ZDET")

For j = 2 To Cells(Rows.Count, "D").End(xlUp).Row

For i= 0 To UBound(m)

If IsError(Application.Match(Range("$D" & j), m, 0)) Then Cells(j, 1).EntireRow.Delete

Next i

Next j

End Sub

Cordialement

FINDRH

Bonsoir,

Après de petits tests du code (de i20100) et sa modification comme proposé, le résultat donne exactement ce que je cherchais à faire !

Merci

Rechercher des sujets similaires à "vba utilister autofilter crietes colonne"