Lenteur dans l'affectation des cellules

Le
defluc
Bonjour,

J'ai une macro qui affecte une valeur à des cellules mais le processus
est très lent.

For i = 0 To NbrElem - 1
For j = 2 To NbrProjets + 1
If Cells(CriterLastLine + 1, j) = AbregList(i) Then
Cells(CriterLastLine + 2, j) = NoOrder
' NoOrder = NoOrder + 1
End If
Next
NoOrder = NoOrder + 1
Next

Je vois les cellules se remplir une à une et cela dure 5 secondes pour
pour 20 cellules.

Une idée pour accélérer le processus ?

Merci d'avance
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
Daniel.C
Le #19589151
Bonjour.
Application.ScreenUpdating = False
t'empêchera de les voir se remplir et accélèrera le processus. Tu peux
aussi essayer de mettre le calcul en mode manuel.
Cordialement.
Daniel

Bonjour,

J'ai une macro qui affecte une valeur à des cellules mais le processus est
très lent.

For i = 0 To NbrElem - 1
For j = 2 To NbrProjets + 1
If Cells(CriterLastLine + 1, j) = AbregList(i) Then
Cells(CriterLastLine + 2, j) = NoOrder
' NoOrder = NoOrder + 1
End If
Next
NoOrder = NoOrder + 1
Next

Je vois les cellules se remplir une à une et cela dure 5 secondes pour pour
20 cellules.

Une idée pour accélérer le processus ?

Merci d'avance


Jacky
Le #19589741
Bonsoir,

Essaie avec un "exit for" juste avant le End if

--
Salutations
JJ


"defluc"
Bonjour,

J'ai une macro qui affecte une valeur à des cellules mais le processus est
très lent.

For i = 0 To NbrElem - 1
For j = 2 To NbrProjets + 1
If Cells(CriterLastLine + 1, j) = AbregList(i) Then
Cells(CriterLastLine + 2, j) = NoOrder
' NoOrder = NoOrder + 1
End If
Next
NoOrder = NoOrder + 1
Next

Je vois les cellules se remplir une à une et cela dure 5 secondes pour
pour 20 cellules.

Une idée pour accélérer le processus ?

Merci d'avance


defluc
Le #19590121
Daniel.C a écrit :
Bonjour.
Application.ScreenUpdating = False
t'empêchera de les voir se remplir et accélèrera le processus. Tu peux
aussi essayer de mettre le calcul en mode manuel.
Cordialement.
Daniel

Bonjour,

J'ai une macro qui affecte une valeur à des cellules mais le processus
est très lent.

For i = 0 To NbrElem - 1
For j = 2 To NbrProjets + 1
If Cells(CriterLastLine + 1, j) = AbregList(i) Then
Cells(CriterLastLine + 2, j) = NoOrder
' NoOrder = NoOrder + 1
End If
Next
NoOrder = NoOrder + 1
Next

Je vois les cellules se remplir une à une et cela dure 5 secondes pour
pour 20 cellules.

Une idée pour accélérer le processus ?

Merci d'avance






Il y a très longtemps que je n'avais plus programmé de macro.

"exit for" fait gagner 1 seconde.
Je savais bien que la désactivation de l'affichage accélérait
l'exécution mais je n'avais plus l'instruction en mémoire.
«ScreenUpdating» fait encore gagner 2 secondes.

Merci à tous
MichDenis
Le #19590061
Bonjour Defluc,

Il y a toujours la désactivation des événements...si tu as des procédures événementielles
dans ton fichiers.

En début de macro, tu écris :

Application.enableevents = false


En fin de macro :
Application.enableevents = true





"defluc"
Daniel.C a écrit :
Bonjour.
Application.ScreenUpdating = False
t'empêchera de les voir se remplir et accélèrera le processus. Tu peux
aussi essayer de mettre le calcul en mode manuel.
Cordialement.
Daniel

Bonjour,

J'ai une macro qui affecte une valeur à des cellules mais le processus
est très lent.

For i = 0 To NbrElem - 1
For j = 2 To NbrProjets + 1
If Cells(CriterLastLine + 1, j) = AbregList(i) Then
Cells(CriterLastLine + 2, j) = NoOrder
' NoOrder = NoOrder + 1
End If
Next
NoOrder = NoOrder + 1
Next

Je vois les cellules se remplir une à une et cela dure 5 secondes pour
pour 20 cellules.

Une idée pour accélérer le processus ?

Merci d'avance






Il y a très longtemps que je n'avais plus programmé de macro.

"exit for" fait gagner 1 seconde.
Je savais bien que la désactivation de l'affichage accélérait
l'exécution mais je n'avais plus l'instruction en mémoire.
«ScreenUpdating» fait encore gagner 2 secondes.

Merci à tous
Publicité
Poster une réponse
Anonyme