Trop long!!!

Mers

XLDnaute Junior
Bonjour à tous,

J'ai copié le contenu d'une macro sur le forum afin de supprimer des lignes inutiles en fonction de certaines valeurs. Mon problème est que, au moment où je vous écrit, ça fait 4 minutes que ma macro roule!!!:mad:

Voici une partie de la macro:
Code:
For i = Range("a65000").End(xlUp).Row To 1 Step -1
    If Range("d" & i).Value = "" Or Range("o" & i).Value = False Then
    Rows(i).Delete
    End If
    Next i

J'ai tenté de remplacé Range("a65000") par Rang("a6000") car je n'a pas de valeurs passé cette ligne mais ça ne semble pas rien changer.

Merci de m'indiquer ce qui ne va pas.

M.
 

eriiic

XLDnaute Barbatruc
Re : Trop long!!!

A-priori pas d'erreur.
Tu peux l'accélerer en desactivant le rafraichissement écran et le calcul automatique.

à mettre au début :
Application.ScreenUpdating = False
Application.Calculation = xlManual

rétablir à la fin :
Application.Calculation = xlAutomatic
Calculate
Application.ScreenUpdating = True

eric
 
Dernière édition:

Mers

XLDnaute Junior
Re : Trop long!!!

A-priori pas d'erreur.
Tu peux l'accélerer en desactivant le rafraichissement écran et le calcul automatique.

à mettre au début :
Application.ScreenUpdating = False
Application.Calculation = xlManual

rétablir à la fin :
Application.Calculation = xlAutomatic
Calculate
Application.ScreenUpdating = True

eric

Merci Éric,

Est-ce que fait d'écrire Range("A6000") devrait avoir un impact positif aussi?

M.
 

Mers

XLDnaute Junior
Re : Trop long!!!

A-priori pas d'erreur.
Tu peux l'accélerer en desactivant le rafraichissement écran et le calcul automatique.

à mettre au début :
Application.ScreenUpdating = False
Application.Calculation = xlManual

rétablir à la fin :
Application.Calculation = xlAutomatic
Calculate
Application.ScreenUpdating = True

eric

WOW!!! Je suis partie de 5 minutes à 8 secondes!!!

Merci!

M.
 

eriiic

XLDnaute Barbatruc
Re : Trop long!!!

Ben tu vois ;-)
Sinon pour répondre à ta question c'est non, car avec range("A65536").end(xlup) c'est optimisé au maximum car seules les lignes réellement occupées sont traitées (dans la mesure ou la dernière ligne à bien sa cellule en colonne A remplie).
Je suppose que tu avais beaucoup de formules et c'est surtout le Application.Calculation = xlManual qui a fait la différence.
eric
 

ROGER2327

XLDnaute Barbatruc
Re : Trop long!!!

Re...
Ben tu vois ;-)
Sinon pour répondre à ta question c'est non, car avec range("A65536").end(xlup) c'est optimisé au maximum car seules les lignes réellement occupées sont traitées (dans la mesure ou la dernière ligne à bien sa cellule en colonne A remplie).
Je suppose que tu avais beaucoup de formules et c'est surtout le Application.Calculation = xlManual qui a fait la différence.
eric
Entièrement d'accord avec vous, eriiiic !
Mais je préfère Cells(Rows.Count, 1) à Range("A65536") car le nombre de lignes d'une feuille varie avec la version d'Excel.​
ROGER2327
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 469
Messages
2 088 691
Membres
103 921
dernier inscrit
hhhh