Microsoft 365 Filtre direct sans formuler

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

  • filtre.xlsm
    23.4 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
bonjour

ce n'est pas vraimet un filtre que tu fais.. tu masques des lignes
pourquoi ne pas utiliser les fonctions d'excel??

ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:="=*lio*", Operator:=xlAnd
 

Pièces jointes

  • filtre.xlsm
    24.5 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
[Oups! P***n de refresh] Bonjour Vgendron, Lolotte. :rolleyes:
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 ..... :rolleyes:
 

Pièces jointes

  • filtre.xlsm
    20.2 KB · Affichages: 1

job75

XLDnaute Barbatruc
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

  • filtre.zip
    868.4 KB · Affichages: 5

Discussions similaires

Réponses
14
Affichages
1 K

Statistiques des forums

Discussions
312 047
Messages
2 084 858
Membres
102 688
dernier inscrit
Biquet78