Fonction IF

E

Elve

Guest
Bonjour à tous,


J'ai besoin de votre aide pour reduire le temps d'execution d'une macro.
En efffet ma macro s'execute pendant plus de 3 heures!!!!

Il est vrai qu'elle s'applique sur plus de 40000 lignes mais quand même

J'utilise plusieurs fonctions mais je croie avoir reperer que c la fonction "If" qui prend un temps monstrueux!

J'aimerais donc savoir si je peux utiliser une fonction que serait plus rapide.

Un exemple

Dim LaDerniere As long 'Declaration de la variable LaDerniere
Dim LaLigne As long 'Declaration de la variable LaLigne
Dim AutreDerniere As long 'Declaration de la variable AutreDerniere

For LaLigne = LaPremiere To LaDerniere 'Depart de la boucle
Range("S" & LaLigne).FormulaR1C1 = _
"=IF(AND(RC[-11]>=500000,RC[-11]<600000),30,RC[-1])"
'Declaration du calcul pour Si
Next LaLigne 'Fin de la boucle

Je ne pense pas que ce soit la boucle for car je l'utilise pour une recherche verticale et elle fonctionne bien (moins d'une minute d'execution).

Je vous remercie tous pour le temps que vous prendrez à lire ce post

@ +++

Elve
 
M

Minick

Guest
Salut,

Si j'ai bien compris tu veux copier une frmule sur toute ta plage

Tu peux essayer comme ca

Dim LaDerniere As long 'Declaration de la variable LaDerniere
Dim LaPremiere As long 'Declaration de la variable LaPremiere

Application.Calculation = xlCalculationManual

Range("S" & LaPremiere).FormulaR1C1 = _
"=IF(AND(RC[-11]>=500000,RC[-11]<600000),30,RC[-1])"

Range("S" & LaPremiere & ":" & "S" & LaDerniere).Select
Selection.FillDown

Application.Calculation = xlCalculationAutomatic

@+

Minick
 
E

Elve

Guest
salut

Merci
Je viens de lancer mon programme...
J'attends qu'il finisse et j'essaye ta méthode, je te tiendrais au courant.

Mais en attendant je me demande si on peut remplacer la fonction si par une autre fonction que donne le meme resultat.
En d'autre terme exist'iluen fonction qui retourne un resultat sous condition ?

Voili, voila

et encore merci Minick

Elve
 
B

bellenger florian

Guest
Bonjour,


je n'ai pas d'idée pour réduire le temps d'exécution de la macro, mais comme j'ai aussi des macros qui mettent du temps à s'exécuter, une solution est bien sûr susceptible de m'interesser.



Toutefois, je pense que l'on pourrait se poser la question:

Serait-il raisonnable d'exiger qu'un programme doive toujours traiter une quantité de plus en plus grande de données sans que cela ait d'influence conséquente sur son temps d'exécution?


Je reformule à l'intention de ceux d'entre vous qui ont le plus d'expérience dans la programmation en générale:

L'expérience peut-elle (vous) permettre d'écrire des programmes dont on peut attester que l'on pourrait l'utiliser sur n'importe-quelle quantité de donnée sans qu'il mette plus de disons quelques minutes pour s'exécuter?

Et pour aider ceux qui serait capable de trouver une solution à ton problème Elve, en combien de temps minimim faudrait-il que ton programme s'exécute pour qu'une solution soit efficace pour toi? :

-2H59min
-1H
-30min
-quelques minutes
-quelques secondes



Maintenant, je me permets de retourner le problème: N' existe-t-il pas des périodes où tu n'es pas sur ta machine, et où celle-ci ne fait rien? (par exemple, pendant que tu dors)

L'utilisation de ces périodes non utilisée serait peut-être un autre moyen de résoudre le problème.


Florian
 
J

Jean-Marie

Guest
Bonjour Elve, Minick

En écrivant une formule dans une cellule, tu obliges excel à recalculer la feuille à chaque fois, d'où les temps de calcul.

Pourquoi ne pas écrire le résultat de la condition dans la cellule ?

@+Jean-Marie
 
E

Elve

Guest
Salut florian,


Ce que tu dis nest pas denué de sens , mais je pense qu'il faut toujours essayer de s'ameliorer et si une solution existe l'utiliser!!

J'ai deja prevu les futurs utilisateurs que ce serait une application à lancer pendant une pause dejeuner, mais bloquer un PC pendant trois heures , ca devient rude....


Voila

@ +

Elve
 
E

Elve

Guest
Re à tous,

Desolée pause déjeuner et réunion..

J'ai essayé la technique de Minick avec Application.Calculation = xlCalculationManual mais je rencontre deux problème.
D'une part il ne se passe rien (aucune formule ni résultat ds les cases ) et d'autre part je ne peux utiliser cette formule plusieur fois.
J'essaye donc de trouver des renseignement sur internet pour comprendre comment elle fonctionne.

Pour la technique de Jean-Marie, j'essaye de suivre la piste.
Je pense essayer de la maniere suivante:
J'execute le calcul en l'affectant à une variable sus vba puis je copie le resultat (juste la valeur numerique) dans la colonne.
J'ai d'abord essayer en passant par un ".value" mais ca ne fonctionne pas.
Je pense qu'il faudrait que j'arrive à créer une sorte de colonne virtuelle (ie n'existant que sur l'editor ).

Voila pour l'instant où j'en suis.
J'essaye de trouver la solution afin que votre aide ne soit pas vaine..


Merci à tous
Elve
 
E

Elve

Guest
Un grand merci a tous
J'ai utilisé la methode de minick doublé des infos sur internet et au lieu de trois heures cela met 8 minutes :)

Je rencontre maintenantl'erreur 1004 mais je vais me renseigner sur le site ou sur le web.

Pour notre philosophe,j 'ai nommé Florian ,va voir sur http://longre.free.fr/pages/prog/accvba.htm qui est un site d'acceleration d'execution de macro plein de trucs bien utile.

Encore merci,
je me permettrai de vous tenir au courant via ce fil

+++
Elve

PS: quand le programme n'a mis que 8 min je croie avoir fais un bon d'au moins 1 m de mon siege ;-)
 

Discussions similaires

Réponses
16
Affichages
786

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau