En utilisant le filtre élaboré (avec un critère "formulé")
VB:
Sub a()
Range("D2").Formula = "=OR(LEFT(A2)=""A"",LEFT(A2)=""C"",LEFT(A2)=""D"")"
Range(Cells(1,1),Cells(Rows.Count,1).End(3)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("D1:D2"), Unique:=False
End Sub
PS: Test OK sur mon fichier de test et sur mon PC.
Sub Filter_me()
Raneg("AD1") = "Filtre"
montableau = Array("A*", "C*", "D*")
For i = 2 To Application.CountA(Range("A:A"))
x = Range("A" & i)
trouve = False
For j = LBound(montableau) To UBound(montableau)
If x Like montableau(j) Then trouve = True
Next
If trouve Then
Range("AD" & i) = 1
Else
Range("AD" & i) = 0
End If
Next
Range("$AD$1:$AD$2700").AutoFilter Field:=1, Criteria1:="1"
End Sub
Re,
Autre méthode sans passer ni par l’auto-filtre, ni l'ajout d'une colonne.
Juste masquer la ligne.
VB:
Sub Filter_me()
Cells.EntireRow.Hidden = False
Range("A1").Select
montableau = Array("A*", "C*", "D*")
For i = 2 To Application.CountA(Range("A:A"))
x = Range("A" & i)
trouve = False
For j = LBound(montableau) To UBound(montableau)
If x Like montableau(j) Then trouve = True
Next
If trouve Then
GoTo suite
Else
Rows(i).EntireRow.Hidden = True
End If
suite:
Next
End Sub
Je suis aussi pour le principe K.I.S.S. donc j'aurais une petite question :
Code:
Sub a()
Range("D2").Formula = "=OR(LEFT(A2)=""A"",LEFT(A2)=""C"",LEFT(A2)=""D"")"
Range(Cells(1,1),Cells(Rows.Count,1).End(3)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("D1:D2"), Unique:=False
End Sub
Est-il possible de ne pas devoir écrire la formule dans une case mais de directement l'incorporer dans le CriteriaRange? J'ai essayé mais ça me donne des erreurs et ne comprends pas pourquoi.
Bien sûr, c'était de la curiosité comme je suis nouveau dans le monde des macros.
J'ai du mal à comprendre pourquoi ce n'est pas possible mais je vais le découvrir petit à petit!
Sub b()
With Range("D2")
.Formula = "=OR(LEFT(A2)=""A"",LEFT(A2)=""C"",LEFT(A2)=""D"")"
Range(.Offset(-1, -3), Cells(Rows.Count, 1).End(3)).AdvancedFilter 1, .Offset(-1).Resize(2), Unique:=False
.Clear
End With
End Sub
Ce n'est pas possible, parce que le filtre élaboré fonctionne avec une plage de cellules comme critère.