Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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

5 réponses

Avatar
JB
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" wrote:
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


Avatar
eric
Bonjour JB,
Merci beaucoup. C'est fantastique! ;)
Bon week-end,
Eric
Avatar
Jacky
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" a écrit dans le message de news:
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



Avatar
Brunos
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" a écrit dans le message de news:
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" a icrit dans le message de news:
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







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