OVH Cloud OVH Cloud

optimisation de boucles

6 réponses
Avatar
pierref
Bonjour,=20

J'ai le code suivant en vba :

For i =3D 1 To n
For j =3D 1 To n1
[debut1].Cells(i, j).Value =3D tab1(i, j)
Next j
For j =3D 1 To n2
[debut2].Cells(i, j).Value =3D tab2(i, j)
Next j
Next i

En fait, je fais des calculs que je stocke dans des=20
tableaux (tab1 et tab2).
A la fin du code je souhaite =E9crire ces tableaux sur ma=20
feuille excel (cf code ci dessus).
Le probl=E8me est que cette =E9criture prend beaucoup de temps.

Y a t-il moyen d'optimiser ce code par une =E9criture plus=20
rapide ?

Par avance merci

pierref

6 réponses

Avatar
Daniel.M
Salut Pierref,

En 2 instructions (pas de boucles):

[debut1].Cells(1,1).Resize(n,n1) = tab1
[debut2].Cells(1,1).Resize(n,n2) = tab2

Note: Les boucles sont normalement assez rapides quand même sauf que si tu as le
calcul automatique activé, Excel recalcule à chaque ajout.
Mieux vaut mettre le calcul à Manuel AVANT les boucles imbriquées pour le
remettre à Automatique ensuite.

Application.Calculation = xlCalculationManual
... le code des boucles (ou le mien) ici
Application.Calculation = xlCalculationAutomatic

Salutations,

Daniel M.

"pierref" wrote in message
news:0ae401c3da85$cbaaf4b0$
Bonjour,

J'ai le code suivant en vba :

For i = 1 To n
For j = 1 To n1
[debut1].Cells(i, j).Value = tab1(i, j)
Next j
For j = 1 To n2
[debut2].Cells(i, j).Value = tab2(i, j)
Next j
Next i

En fait, je fais des calculs que je stocke dans des
tableaux (tab1 et tab2).
A la fin du code je souhaite écrire ces tableaux sur ma
feuille excel (cf code ci dessus).
Le problème est que cette écriture prend beaucoup de temps.

Y a t-il moyen d'optimiser ce code par une écriture plus
rapide ?

Par avance merci

pierref
Avatar
Christian.L
Bonjour

Pourquoi ne pas faire les calculs directement dans la cellule de résultat

C.L.


"pierref" a écrit dans le message de
news:0ae401c3da85$cbaaf4b0$
Bonjour,

J'ai le code suivant en vba :

For i = 1 To n
For j = 1 To n1
[debut1].Cells(i, j).Value = tab1(i, j)
Next j
For j = 1 To n2
[debut2].Cells(i, j).Value = tab2(i, j)
Next j
Next i

En fait, je fais des calculs que je stocke dans des
tableaux (tab1 et tab2).
A la fin du code je souhaite écrire ces tableaux sur ma
feuille excel (cf code ci dessus).
Le problème est que cette écriture prend beaucoup de temps.

Y a t-il moyen d'optimiser ce code par une écriture plus
rapide ?

Par avance merci

pierref
Avatar
pierref
merci bcp

finalement j'ai meme fait

range("A1:A" & nb) = tab1

Et ca tourne bcp plus vite que mes boucles !!

a+



-----Message d'origine-----
Bonjour,

J'ai le code suivant en vba :

For i = 1 To n
For j = 1 To n1
[debut1].Cells(i, j).Value = tab1(i, j)
Next j
For j = 1 To n2
[debut2].Cells(i, j).Value = tab2(i, j)
Next j
Next i

En fait, je fais des calculs que je stocke dans des
tableaux (tab1 et tab2).
A la fin du code je souhaite écrire ces tableaux sur ma
feuille excel (cf code ci dessus).
Le problème est que cette écriture prend beaucoup de
temps.


Y a t-il moyen d'optimiser ce code par une écriture plus
rapide ?

Par avance merci

pierref
.



Avatar
Daniel.M
Salut,

range("A1:A" & nb) = tab1


Ton code fonctionne avec des tableaux qui n'ont qu'UNE colonne.
Ton exemple montrait des tableaux avec plusieurs colonnes (2e boucle imbriquée:
For j=1 to n1).

Salutations,

Daniel M.

Avatar
Michel Pierron
Bonjour Daniel;
Décidément, ta logique de raisonnement me "surleculte" toujours; nous les
béotiens, on aborde le problème en partant du début vers la solution et toi, tu
"peaudelapinises" le problème en remontant du résultat vers le début.
:-))) MP

"Daniel.M" a écrit dans le message de
news:
Salut Pierref,

En 2 instructions (pas de boucles):

[debut1].Cells(1,1).Resize(n,n1) = tab1
[debut2].Cells(1,1).Resize(n,n2) = tab2

Note: Les boucles sont normalement assez rapides quand même sauf que si tu as le
calcul automatique activé, Excel recalcule à chaque ajout.
Mieux vaut mettre le calcul à Manuel AVANT les boucles imbriquées pour le
remettre à Automatique ensuite.

Application.Calculation = xlCalculationManual
... le code des boucles (ou le mien) ici
Application.Calculation = xlCalculationAutomatic

Salutations,

Daniel M.

"pierref" wrote in message
news:0ae401c3da85$cbaaf4b0$
Bonjour,

J'ai le code suivant en vba :

For i = 1 To n
For j = 1 To n1
[debut1].Cells(i, j).Value = tab1(i, j)
Next j
For j = 1 To n2
[debut2].Cells(i, j).Value = tab2(i, j)
Next j
Next i

En fait, je fais des calculs que je stocke dans des
tableaux (tab1 et tab2).
A la fin du code je souhaite écrire ces tableaux sur ma
feuille excel (cf code ci dessus).
Le problème est que cette écriture prend beaucoup de temps.

Y a t-il moyen d'optimiser ce code par une écriture plus
rapide ?

Par avance merci

pierref




Avatar
Daniel.M
Salut Michel,

... et toi, tu "peaudelapinises" le problème


Merci pour cet ajout à mon vocabulaire. Merci beaucoup ;-))

Daniel M.