Accélérer / optimiser la vitesse d'exécution d'une boucle

Bonjour,

J'ai créé cette macro afin de masquer une ligne complète si dans la colonne A la cellule est remplie en vert.

Sub masquer()
Dim c As Range
        For Each c In Range("A2:A100000")
        If c.Interior.Color = 11854022 Then 
        c.EntireRow.Hidden = True
    Next c
End Sub

ça fonctionne, seulement dans mon fichier réel, cela prend trop de temps !

J'ai donc fait quelques recherches : j'ai cru comprendre que de passer par une variable type Variant fait gagner énormément de temps d'exécution.

Mon code est donc devenu :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("B1")) Is Nothing Then

Dim rg As Range
Dim v As Variant
Set rg = Worksheets("Feuil1").Range("A1:A100000")
v = rg

    For l = 3 To 100000

        If v(l, 1).Interior.Color = 11854022 Then
            v(l, 1).EntireRow.Hidden = True
        End If

    Next

rg = v
End If
End Sub

Au passage j'ai changé la méthode d'exécution.

Seulement Excel m'affiche "erreur d'exécution 424. Objet requis" quand je lance la macro.

Je fais donc appel à vos âmes charitables !!

Fichier d'exemple ci-joint.

PS : je suis débutant en VBA

9classeur1.xlsm (25.19 Ko)

Bonjour,

Utiliser une plage très large fait déjà perdre du temps. Il serait préférable de déterminer d'abord la dernière ligne puis de ne boucler que jusqu'à celle-ci.

Si le fichier contient des formules, il est aussi préférable de désactiver leur réévaluation auto en début de macro, grâce à l'instruction :

Application.Calculation = xlCalculationManual
'Instructions
Application.Calculation = xlCalculationAutomatic

Ensuite, le mieux selon moi : pas de macro, on peut faire un filtre sur les couleurs... Ultra simple et rapide !

Bonjour Pedro22,

En effet j'ai exagéré, le traitement était uniquement sur 500 lignes. Mais ça prennait entre 5 et 10s et à la longue je trouvais ça usant.

Dans mon vrai code j'avais donc déterminé la dernière ligne.

Je viens de tester ton code : MIRACLE !!! Moins d'une seconde d'exécution !!!

Juste une question, ce code risque pas de bloquer les formules si je mets bien à la fin :

Application.Calculation = xlCalculationAutomatic
 

?

Parce que en effet il y a beaucoup de formules (dont certaines avec liens externes) qu'il ne faut pas planter.

En tout cas merci beaucoup !!

Et je vais quand même regarder les filtres pour ma culture.

Bonne continuation et encore merci

Rechercher des sujets similaires à "accelerer optimiser vitesse execution boucle"