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