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

calcul sur 65000 cellules en VBA

6 réponses
Avatar
ludovic Taillez
Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé de
65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour faire le
calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est plus
gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???

6 réponses

Avatar
Pierre Fauconnier
Bonsoir

Désactive le calcul automatique en début de procédure et remet-le après.

Dim ModeCalcul as xlCalculation
modecalcul = application.calculation
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000
application.calculation=modecalcul

Cela accélère-t'il le traitement?


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"ludovic Taillez" a écrit dans le message de
news: 4512ce96$0$344$
Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé de
65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour faire
le calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est
plus gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???






Avatar
ludovic Taillez
J'essaie ça demain et je vous tiens au courant

"Pierre Fauconnier" a écrit dans le
message de news:
Bonsoir

Désactive le calcul automatique en début de procédure et remet-le après.

Dim ModeCalcul as xlCalculation
modecalcul = application.calculation
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000
application.calculation=modecalcul

Cela accélère-t'il le traitement?


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"ludovic Taillez" a écrit dans le message de
news: 4512ce96$0$344$
Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé
de 65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour
faire le calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est
plus gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???










Avatar
Francois L
Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé de
65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour faire le
calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est plus
gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???

Bonsoir,


N'y a t'il pas autre chose, d'autres calculs ?

Je fais un test sur 65000 lignes avec mon excel 2000 sur une machine
assez poussive (P3 sous Win Me).

Avec une boucle For Next, sans désactiver le calcul automatique, ce
n'est pas instantané mais c'est de l'ordre de 30 à 40 secondes.

Ceci étant dit, si j'ai bien compris, ta macro est équivalente à une
formule qui serait en A1
= G7 * $J$10

Si j'étire cette formule sur 65000 lignes et que je change la valeur de
J10, le calcul de la colonne A est instantané. Alors pourquoi utiliser
une macro avec boucle dans le cas présent ?

--
François L

Avatar
ludovic Taillez
Oui il y a autre chose sinon effectivement j'aurai étirer la formule et cela
aurait étè bon,
Je fais un test dans ma boucle
DO
i = i+1
code produit= mid(cells(i,12),1,2)
select case code produit
case 11
cells(i,3) = cells(i,7)* cells(10,10)
case 2A
cells(i,3) = cells(i,7)* cells(11,10)
...
J'ai 17 remises différentes
ce choix est necessaire car je n'applique pas les memes remises suivant
le code produit
et c'est vrai que je n'ai pas pensé à le faire avec de simple IF THEN ELSE
Vous pensez que c'est ça????
Je vais tester ça aussi demain
En fait je n'ai jamais utiliser autant de donnée dans une feuille excel et
donc je n'ai pas d'expérience sur le temps que cela peut prendre mais c'est
vrai que je fais des recherches Verticales sur ces 65000 cellules qui sont
elle directement dans les cellules et là cela va relativement vite(qlques
Secondes à peine)

"Francois L" a écrit dans le message de news:

Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé
de 65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour
faire le calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est
plus gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???

Bonsoir,


N'y a t'il pas autre chose, d'autres calculs ?

Je fais un test sur 65000 lignes avec mon excel 2000 sur une machine assez
poussive (P3 sous Win Me).

Avec une boucle For Next, sans désactiver le calcul automatique, ce n'est
pas instantané mais c'est de l'ordre de 30 à 40 secondes.

Ceci étant dit, si j'ai bien compris, ta macro est équivalente à une
formule qui serait en A1
= G7 * $J$10

Si j'étire cette formule sur 65000 lignes et que je change la valeur de
J10, le calcul de la colonne A est instantané. Alors pourquoi utiliser une
macro avec boucle dans le cas présent ?

--
François L



Avatar
Jacky
Bonsoir,

Presque instantané...
Matricielle

Dans la première cellule
=G1:G65000*J10

Selection de la colonne et,
clique dans la barre des formules
Valider par "Majuscule+ctrl+entrée"

Salutations
JJ

"ludovic Taillez" a écrit dans le message de
news:4512ce96$0$344$
Bonjour,
j'ai besoin de calculer une remise sur un prix dans une colonne composé de
65000 prix en euro, j'ai fait ça en vba et il me met une plomb pour faire
le

calcul
Voici le code:
DO
i = i+1
cells(i,3) = cells(i,7)* cells(10,10)
LOOP UNTIL i = 65000

J'avais fait ça avec une boucle FOR next et apparement cette boucle est
plus

gourmande que celle ci en terme de temp

Il met plus d'une heure pour faire les calculs, sauriez vous pourquoi???
Vers quoi il faut que je cherche???






Avatar
Francois L
Oui il y a autre chose sinon effectivement j'aurai étirer la formule et cela
aurait étè bon,
Je fais un test dans ma boucle
DO
i = i+1
code produit= mid(cells(i,12),1,2)
select case code produit
case 11
cells(i,3) = cells(i,7)* cells(10,10)
case 2A
cells(i,3) = cells(i,7)* cells(11,10)
...
J'ai 17 remises différentes
ce choix est necessaire car je n'applique pas les memes remises suivant
le code produit
et c'est vrai que je n'ai pas pensé à le faire avec de simple IF THEN ELSE
Vous pensez que c'est ça????



Re,

Je ne sais pas si, dans le cas présent, et sous excel ce serait plus
rapide. Je passe la main aux gourous.

--
François L