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.
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
Soyez tolérant, Lionel n'est inscrit que depuis le 13 Décembre 2011.
Soit à peine plus de 4100 jours, laissez lui le temps de percuter. ( il doit avoir des origines suisses )
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.