LENTEUR CHARGEMENT MACRO "filtre selon 2 critères"

Bonjour à tous,

J'ai réalisé une macro (feuille : ETIQUETTES EXPE; bouton : FILTRER DP) permettant de filtrer les lignes qui ne respectent pas les 2 critères ci-dessous :

  • Critère 1 : Les cellules colonne B contiennent "DS"

ET

  • Critère 2 : Les cellules colonne A contiennent une valeur égale à la celle de la case C1

Je masque les lignes qui ne respectent pas ces 2 critères et dans le cas ou la macro est active, je mets la valeur de couleur verte.

Problème : Le temps de chargement de la macro.

Voici la macro :

Sub Filtrer_DP_Etiquettes_Expe()
Application.ScreenUpdating = False
Range("C1").Font.Color = RGB(0, 255, 0)
Dim Ligne As Long
If Application.WorksheetFunction.CountIf(Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row), Range("C1")) = 0 Then
    MsgBox "N° DP introuvable : " & Range("C1")
    Exit Sub
End If
    For Ligne = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
        If Not (Cells(Ligne, "A") = Range("C1") And Cells(Ligne, "B") = ("DS")) Then Rows(Ligne).Hidden = True
    Next Ligne
Application.ScreenUpdating = True
Worksheets("ETIQUETTES EXPE").Protect UserInterfaceOnly:=True
End Sub
  • Remarquez-vous des éléments inutiles ralentissant la macro ?
  • Auriez-vous une idée pour accélérer sa vitesse de chargement ?

Merci

Fabien

Bonjour,

Tu fais allusion au Filtre ... sans l'utiliser ... dommage ...

Il s'agit ... et de très loin d'une méthode bien plus rapide et bien plus efficace qu'un boucle ...

A titre d'exemple ...

https://forum.excel-pratique.com/viewtopic.php?f=2&t=126140&p=773516&hilit=Autofilter#p773516

En espèrant que cel t'aide

Merci James !

Je viens de réaliser cette macro intégrant la fonction AutoFilter :

Sub Filtrer_DP_Etiquettes_Expe()
    Sheets("ETIQUETTES EXPE").Select
    Range("C1").Font.Color = RGB(0, 255, 0)
    If Application.WorksheetFunction.CountIf(Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row), Range("C1")) = 0 Then
    MsgBox "N° DP introuvable : " & Range("C1")
    Exit Sub
    End If
    Selection.AutoFilter Field:=1, Criteria1:=Range("C1")
    DerLig = Sheets("ETIQUETTES EXPE").Range("A65536").End(xlUp).Row
    Range("A2").Select
    Application.CutCopyMode = False
    Worksheets("ETIQUETTES EXPE").Protect UserInterfaceOnly:=True
End Sub

Cependant, je souhaiterais réaliser un filtre selon un 2ème critère : la valeur des cellules contenues dans la colonne "B2:B" doivent être égales à "DS"

Pour résumer, je souhaite cacher les lignes dont :

- la valeur dans la cellule C1 est différente de celle indiquée dans la colonne "A2:A"

ET

- la valeur indiquée dans la colonne "B2:B" est différente de "DS"

Sauriez vous comment intégrer ce second critère svp ?

Re,

Si tu poursuis la logique tu as choisie ... tu peux tester :

Selection.AutoFilter Field:=1, Criteria1:=Range("C1")
Selection.AutoFilter Field:=2, Criteria1:="<>DS"

En espèrant que cela t'aide

Parfait merci !

A plus

Ravi que tout fonctionne ...

Merci pour tes remerciements

J'espère que tu as pu constater qu'en termes de rapidité de traitement ... les choses se sont améliorées

La rapidité de traitement est grandement améliorée

Génial ... !!!

Puisque ... somme toute ... c'était ton objectif initial ...

Rechercher des sujets similaires à "lenteur chargement macro filtre criteres"