VBA : AutoFilter sur 3 critères avec *

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 !

Zepiii

XLDnaute Nouveau
Bonjour,

Je suis débutant en macro et je cale sur un cas "simple".

J'ai une liste du type :

A1
A2
A...
B1
B2
B...
Et ainsi de suite jusque Z.​

Je veux sélectionner tous ceux qui commencent par A et C. J'utilise donc la macro suivante :

AutoFilter Field:=1, Criteria1:=Array("A*", "C*"), Operator:=xlFilterValues​

Jusque là, pas de soucis. Tout fonctionne pour 2 critères.

Le problème est que si je veux sélectionner tous ceux qui commencent par A, C et D en utilisant la macro suivante :

AutoFilter Field:=1, Criteria1:=Array("A*", "C*", "D*"), Operator:=xlFilterValues​

Là, plus rien ne fonctionne 🙁

Comment faire pour sélectionner tout ce qui commence A, C et D ?

Merci,
Zepiii
 
Bonjour le fil, le forum, @Zepiii

@Zepiii [Bienvenue sur le forum]
Bonjour,
Comment faire pour sélectionner tout ce qui commence A, C et D ?
Merci,
Zepiii
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.
 
Dernière édition:
Bonjour, le fil, le forum
@Zepiii , @Staple1600

VB:
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
 
Merci @Ce lien n'existe plus et @kingfadhel

J'ai pris la version de Staple et ça fonctionne.

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.

Grand merci à vous 2 en tout cas.
 
Re

Avec des endives
VB:
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.
 
- 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

Discussions similaires

Réponses
1
Affichages
406
Retour