Microsoft 365 Filtre direct sans formuler

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous 🙂

Je bute sur un filtrage que je n'arrive pas à coder comme je le souhaite.
J'ai fait un petit code pour faire un filtre.
VB:
Sub lio()
    [H7].FormulaR1C1 = "=IF(ISERROR(SEARCH(""lio "",RC[-7])),""Mot non trouvé"",""lio "")"
    [H7].Copy
    Range("H8:H20").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

    For i = 7 To Range("h" & Rows.Count).End(xlUp).Row
        If Cells(Cells(i, 1).Row, 8) <> "lio " Then Rows(i).Hidden = True
    Next i
    [H7:h20].ClearContents
    [a1].Select
End Sub

Mon objectif est de ne laisser apparaître que les lignes qui contiennent "dans la chaine" en col A "lio "
Je passe pas un calcul que je fais en col H
Ce calcul doit ce faire sur toutes les lignes col A "NON VIDES"

Voici mon souci :
ça fonctionne mais dans mon fichier de travail, environ 40.000 lignes, ça me semble lourd.
Et toutes mes colonnes sont occupés sur environ 30 colonnes

Je pourrais fait le calcul dans une colonne loin, loin…. et ensuite l'effacer
Mais ce sont les opérations que je souhaite éviter pour alléger le temps de filtrage.

Est-il possible de faire plus directe, si possible dans passer par une formule ?
Je n'ai pas trouvé comment coder en direct : si col A contient "lio " = filtre

Auriez-vous le bon code ?
En cas, je joins le petit fichier test.

Un grand merci à toutes et à tous,
🙂
 

Pièces jointes

Bonjour Lionel,
[Oups! P***n de refresh] Bonjour Vgendron, Lolotte. 🙄
Encore une usine à gaz ? 😅
Ne serait ce pas suffisant de mettre un filtre en place puis ensuite de le piloter en VBA ?
Code:
Sub Filtre()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$A$6:$I$100000").AutoFilter Field:=1, Criteria1:="=*lio*", Operator:=xlAnd
End Sub
Sub Défiltre()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$A$6:$I$100000").AutoFilter Field:=1
End Sub
Mais avec 40000 lignes ..... 🙄
 

Pièces jointes

Bonjour Lionel, le fil,

Pour tester ton fichier j'ai copié la plage A7:B20 sur 42 000 lignes; puis la colonne B sur 30 colonnes.

Enfin exécuté ces 2 macros :
VB:
Sub Filtre()
Dim t
t = Timer
[A6].CurrentRegion.AutoFilter 1, "*lio*"
MsgBox Timer - t
End Sub

Sub Sup_Filtre()
Dim t
t = Timer
ActiveSheet.ShowAllData
MsgBox Timer - t
End Sub
Chez moi la 1ère s'exécute en 0,04 seconde, la 2ème est instantanée.

Donc aucune lourdeur.

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

Retour