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

XL 2013 Filtre avec plusieurs mots clefs

  • Initiateur de la discussion Initiateur de la discussion siyaru
  • 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 !

siyaru

XLDnaute Nouveau
Bonjour,
J'ai une colonne avec des centaines de mots.
Je souhaite appliquer un filtre contenant une dizaine de mots clefs, si ma colonne contient un de ses mots clefs, il ne l'affiche pas.
En gros si contient le mot A ou contient le mot B ou contient le C etc alors il le supprimer de ma ligne.

Mais je cale 🙂

Merci à vous !
 
Bonjour,

VB:
Sub FiltreInverseListe()
  Set f = Sheets("feuil1")
  Set d = CreateObject("scripting.dictionary")     ' Liste à ne pas sélectionner
  d.CompareMode = vbTextCompare
  For Each c In f.Range("E2:E" & f.[E65000].End(xlUp).Row)
    d(c.Value) = ""
  Next c
  Set d2 = CreateObject("scripting.dictionary")    ' liste complémentaire
  d2.CompareMode = vbTextCompare
  For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
   If Not d.exists(c.Value) Then d2(c.Value) = ""
  Next c
  ActiveSheet.Range("$A$1:$A$10000").AutoFilter Field:=1, Criteria1:=d2.keys, Operator:=xlFilterValues
End Sub

Boisgontier
 

Pièces jointes

Bonjour,
Merci de votre réponse.
Cela fonctionne partiellement, si ma liste brute ne contient qu'un seul mot cela fonctionne comme "lundi" mais si la cellule contient lundi je fais du foot, alors cela ne fonctionne pas :-(
 
Bonjour,
Merci de votre réponse.
Je vous joints un exemple concret de mon fichier histoire d'y voir plus clair.
Cela évitera les erreurs de compréhension, j'ai du mal m'exprimer, mon fichier se présente sous cette forme ^^
 

Pièces jointes

Bonjour siyaru, mdo100, JB, le forum,

Voyez le fichier joint et cette macro qui utilise des tableaux VBA :
VB:
Sub lister()
Dim tablo, exclu, d As Object, i&, s, j%, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
exclu = [D1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For i = 2 To UBound(exclu): d(exclu(i, 1)) = "": Next
For i = 2 To UBound(tablo)
    s = Split(tablo(i, 1))
    For j = 0 To UBound(s)
        If d.exists(s(j)) Then GoTo 1
    Next
    n = n + 1
    tablo(n, 1) = tablo(i, 1)
1 Next
With [F2] 'à adapter
    If n Then .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
La macro s'exécute chez moi en 23 millisecondes contre 53 millisecondes avec le filtre élaboré de JB.

Edit : testé avec le tableau recopié sur 117 000 lignes => ma macro 1,27 seconde, celle de JB 3,77 secondes.

Bonne journée.
 

Pièces jointes

Dernière édition:
On remarquera que ni ma macro précédente ni celle de JB n'excluent la ligne voiture b m w.

Pour y parvenir il faut supprimer les espaces dans la liste brute :
VB:
Option Compare Text 'la casse est ignorée

Sub lister()
Dim tablo, exclu, ub&, i&, x$, j&, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
exclu = [D1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ub = UBound(exclu)
For i = 2 To UBound(tablo)
    x = Replace(tablo(i, 1), " ", "") 'supprime les espaces
    For j = 2 To ub
        If InStr(x, exclu(j, 1)) Then GoTo 1
    Next
    n = n + 1
    tablo(n, 1) = tablo(i, 1)
1 Next
With [F2] 'à adapter
    If n Then .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
Fichier (2), sur 117 000 lignes c'est un peu plus long => 1,64 seconde.

A+
 

Pièces jointes

- 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
17
Affichages
595
Réponses
12
Affichages
282
Réponses
12
Affichages
631
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…