Réduire le temps que passe Excel sur l'excution d'une macro ?

Le
eric
Bonjour,

J'aimerais réduire le temps que passe excel à faire marcher ma macro (> 10
minutes).
En fait je ne connais pas à l'avance le nombre de cellules "Ci" qui sont
remplies, donc j'ai mis 5000 pour être sûr d'englober le maximum.

Sub fina()
For i = 2 To 5000
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1") Then
Rows(i).Delete
Else
End If
Next i
End Sub

Merci d'avance,
Eric
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JB
Le #5292801
Bonjour


Sub Macro1()
Application.Calculation = xlManual
Application.ScreenUpdating = False
For i = 5000 To 2 Step -1
If Sheets("plom").Range("C" & i) <>
Sheets("date_du_jour").Range("A1") Then Rows(i).Delete
Next i
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub


Application.Calculation = xlAutomatic
Application.ScreenUpdating = True


JB

On 18 jan, 15:34, "eric"
Bonjour,

J'aimerais réduire le temps que passe excel à faire marcher ma macro ( > 10
minutes).
En fait je ne connais pas à l'avance le nombre de cellules "Ci" qui sont
remplies, donc j'ai mis 5000 pour être sûr d'englober le maximum.

Sub fina()
For i = 2 To 5000
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1") The n
Rows(i).Delete
Else
End If
Next i
End Sub

Merci d'avance,
Eric


eric
Le #5292761
Bonjour JB,
Merci beaucoup. C'est fantastique! ;)
Bon week-end,
Eric
Jacky
Le #5292751
Bonsoir,
Essaie comme cela
'------------
Sub fina()
Application.ScreenUpdating = False
Application.Calculation = xlManual
For i = Sheets("plom").[c65536].End(3).Row To 2 Step -1
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1") Then
Rows(i).Delete
End If
Next i
Application.Calculation = xlAutomatic
End Sub
'-------
Ps. Ce sont les lignes de la feuille active qui sont supprimer.

--
Salutations
JJ


"eric" 4790b923$0$31920$
Bonjour,

J'aimerais réduire le temps que passe excel à faire marcher ma macro (> 10
minutes).
En fait je ne connais pas à l'avance le nombre de cellules "Ci" qui sont
remplies, donc j'ai mis 5000 pour être sûr d'englober le maximum.

Sub fina()
For i = 2 To 5000
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1")
Then
Rows(i).Delete
Else
End If
Next i
End Sub

Merci d'avance,
Eric



Brunos
Le #5292701
Bonjour Eric


Sub fina()
For i = 2 To 5000
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1")
Then
Rows(i).Delete
Else
End If
Next i
End Sub



Ton code risque de produire un résultat imprévisible, étant donné que tu
parcours de haut en bas une plage dont tu supprimes des lignes.
Pour éviter ce problème, soit tu prends le tableau par le bas en haut
comme le propose Jacky, soit tu parcoures ta plage avec une boucle For
Each Next :
For Each Cellule in Range([C2], [C2].End(xlDown))
...
Next

Mais je ne sais pas ce que tu veux obtenir, à toi de voir !

Brunos

"Jacky" eH%
Bonsoir,
Essaie comme cela
'------------
Sub fina()
Application.ScreenUpdating = False
Application.Calculation = xlManual
For i = Sheets("plom").[c65536].End(3).Row To 2 Step -1
If Sheets("plom").Range("C" & i) <> Sheets("date_du_jour").Range("A1")
Then
Rows(i).Delete
End If
Next i
Application.Calculation = xlAutomatic
End Sub
'-------
Ps. Ce sont les lignes de la feuille active qui sont supprimer.

--
Salutations
JJ


"eric" 4790b923$0$31920$
Bonjour,

J'aimerais riduire le temps que passe excel ` faire marcher ma macro
(> 10 minutes).
En fait je ne connais pas ` l'avance le nombre de cellules "Ci" qui
sont remplies, donc j'ai mis 5000 pour jtre s{r d'englober le
maximum.

Sub fina()
For i = 2 To 5000
If Sheets("plom").Range("C" & i) <>
Sheets("date_du_jour").Range("A1") Then
Rows(i).Delete
Else
End If
Next i
End Sub

Merci d'avance,
Eric







Brunos
Le #5292441
Correction, j'ai dit une bêtise,
Seule la méthode de Jacky (parcourir de bas en haut) est valable.
Brunos

Ton code risque de produire un résultat imprévisible, étant donné que
tu parcours de haut en bas une plage dont tu supprimes des lignes.
Pour éviter ce problème, soit tu prends le tableau par le bas en haut
comme le propose Jacky, soit tu parcoures ta plage avec une boucle For
Each Next :
For Each Cellule in Range([C2], [C2].End(xlDown))
...
Next


Publicité
Poster une réponse
Anonyme