Vba execution longue (>5min)
Résolu
Jabba the Hutt
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour tout le monde,
J'ai un petit souci avec un code, je pense que je l'ai mal écrit parcequ'il mets environ 6 minutes pour s'exécuter (certes correctement).
mon classeur est certes lourd, mais j'opère l'instruction sur une seule feuille (env 40 000 ligne).
Voici mon code :
Sub CCCChanger_EXT()
Dim u As Long
Dim x As Long
Columns("AD:AD").Copy
Columns("IV:IV").Select
ActiveSheet.Paste
Application.CutCopyMode = False
u = 16005
For x = Cells(16005, 35).CurrentRegion.Rows.Count To 1 Step -1
If Cells(u, 30).Value <> "S300EXT" Then _
If Cells(u, 35).Value = "Ext" Then _
Cells(u, 30).Value = Cells(u, 256).Value & "Ext"
u = u + 1
Else _
u = u + 1
End If
Else
u = u + 1
End If
Next
End Sub
Merci
J'ai un petit souci avec un code, je pense que je l'ai mal écrit parcequ'il mets environ 6 minutes pour s'exécuter (certes correctement).
mon classeur est certes lourd, mais j'opère l'instruction sur une seule feuille (env 40 000 ligne).
Voici mon code :
Sub CCCChanger_EXT()
Dim u As Long
Dim x As Long
Columns("AD:AD").Copy
Columns("IV:IV").Select
ActiveSheet.Paste
Application.CutCopyMode = False
u = 16005
For x = Cells(16005, 35).CurrentRegion.Rows.Count To 1 Step -1
If Cells(u, 30).Value <> "S300EXT" Then _
If Cells(u, 35).Value = "Ext" Then _
Cells(u, 30).Value = Cells(u, 256).Value & "Ext"
u = u + 1
Else _
u = u + 1
End If
Else
u = u + 1
End If
Next
End Sub
Merci
A voir également:
- Vba execution longue (>5min)
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
1 réponse
Bonjour,
En début de code met application.screenupdating = false
remet à true en fin de code.
Et si ça ne suffit pas tu peux interdire le recalcul (si tu as beaucoup de formules par exemple) avec Application.Calculation = xlManual
Le rétablir avec xlAutomatic, et si besoin forcer un recalcul avec calculate
eric
En début de code met application.screenupdating = false
remet à true en fin de code.
Et si ça ne suffit pas tu peux interdire le recalcul (si tu as beaucoup de formules par exemple) avec Application.Calculation = xlManual
Le rétablir avec xlAutomatic, et si besoin forcer un recalcul avec calculate
eric
J'ai rajouté application.screen....
ça n'a pas trop changé la durée d'exécution, avec le recalcul xlautomatique cela à même buggé (le classeur était à la base défini en calcul sur ordre, dans outils, options ...). du coup je l'ai enlevé.
En fait je pense que mon code est mal écrit. Je me pencherai sur l'écriture de quelque chose de plus efficient.
encore merci.
En le regardant de plus près la structure est incorrecte. Je suis même étonné que tu aies le résultat désiré...
Si tu écris
if test... then résultat...
ton if est terminé, plus le droit aux else et autres endif
Si tu veux ton if sur plusieurs lignes ne rien mettre après le then :
Evite les
if test1... then if test2... then résultat...
Imbrique tes if et referme-les par des endif :
Quand tu auras réécris ton code avec ces règles ont y verra plus clair pour améliorer si besoin
eric