Calcul du temps de calcul

Bonjour à tous,

Je viens vers vous car j'ai un problème de longueur de temps de calcul avec un code, le code met plusieurs jours à tourner...

Ce code reste assez simple, il s'agit de 2 boucles imbriquées comportant chacunes des formules à calculer. Cependant l'une de ses boucles doit être répétée un grand nombre de fois (plus de 1000 fois). J'aimerais cibler exactement ce qui pose problème dans cette boucle et pour cela j'aimerais déterminer très précisément le temps de chaque opération de calcul. Là est donc ma question, connaissez-vous une fonction ou un bout de code permettant d'avoir une estimation du temps utilisé? Je l'afficherais ensuite par le biais d'une Msgbox.

En vous remerciant par avance,

Jérémy

Bonsoir,

Des jours à tourner ? tu calcules tes données pour la NASA ?

Peux tu nous soumettre ton fichier ? avec des données.

Cdt,

Salut,

Je pense que le plus simple serait quand même que tu nous fournisses le fichier qui créé problème et que l'on voit comment on pourrait en améliorer la macro.

Cordialement.

Bonjour,

Voici mon code.

Il s'agit d'un code visant à connaître la concentration de gaz à une certaine distance effectué en projet dans mon école. Je n'arrive pas à vous mettre le fichier excel qui va avec.

J'ai trouvé le moyen d'affficher le temps de calcul maintenant, le problème est que je n'arrive pas à le faire tourner sur un temps raisonnable.

En vous remerciant et en espérant que vous trouviez quelque chose.

Bonjour,

Débutes ton module avec 'Option Explicit' puis menu 'Débogage', faire compiler VBAproject.

Tu déclares toutes tes variables en évitant au max le type variant.

Tu continues tant que tu as un message d'alerte.

Ensuite, pour les variables déclarées en variant, tu mets le type approprié.

Me dire si tu constates un gain de temps.

Cdlt.

edit : vois aussi pour remplacer tes ByVal par ByRef ([Implicite, pas besoin de préciser (par défaut)]

Excuse moi mon ignorance mais je ne vois pas ce que c'est qu' "option explicit" et je ne le trouve pas dans ma fenêtre visual basic. (je suis sous excel 2003, peut-être que ça joue).

Ne pas déclarer mes variables dans le type variant mais je n'ai pas de type variant? J'ai essayé de déclarer mes variables suivant le type pour essayer d'optimiser mais ça ne me fait pas gagner grand chose.

Je me demande si le temps si long ne vient pas du fait qu'il y a 3 boucles imbriquées les unes dans les autres et qui pourraient provoquer un nombre de boucles trop importantes, potentiellement 70 millions.

Algorithmiquement, je ne sais pas comment faire pour l'optimiser.

Merci

Re,

Je tente de répondre à tes questions

Pour 'Option explicit',

Option Explicit

Instruction utilisée au niveau module pour imposer la déclaration explicite de toutes les variables de ce module.

Syntaxe

Option Explicit

Remarques

Si elle est utilisée, l'instruction Option Explicit doit apparaître dans un module avant toute procédure.

Si l'instruction Option Explicit apparaît dans un module, vous devez déclarer explicitement toutes les variables à l'aide des instructions Dim, Private, Public, ReDim ou Static.

Si vous tentez d'utiliser un nom de variable non déclarée, une erreur se produit à la compilation.

Si vous n'utilisez pas l'instruction Option Explicit, toutes les variables non déclarées sont de type Variant à moins qu'un type par défaut soit précisé à un autre endroit à l'aide d'une instruction Deftype.

Note Utilisez l'instruction Option Explicit pour éviter toute faute de frappe lors de la saisie du nom d'une variable existante ou pour écarter tout risque de confusion dans un code où la portée de la variable n'apparaît pas clairement.

Tu dois donc ajouter en début de module, avant toute fonction/procédure:

'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////
' MODULE 2
' fONCTIONS ET MACROS DE L'OUTIL
Option Explicit
'////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////

Dans tes déclarations ci dessous, a, b, t1, t2, q1, q2, abc, max sont déclarées comme variant. Seul 'choix' est déclarée en 'double'

Dim a, b, t1, t2, q1, q2, abc, max, choix As Double

edit : vois aussi pour remplacer tes ByVal par ByRef ([Implicite, pas besoin de préciser (par défaut)]

Les déclarations avec ByVal amènent un certain ralentissement des calculs.

Je viens d'ajouter option explicit, ce qui pardonne moins les oublis de déclarations de variables.^^ En revanche ça n'a pas accéléré la vitesse d'éxécution de mon code.

Je ne pense pas que je doive utiliser moins de ByVal.

Est-ce que le fait de retirer une boucle if peut faire gagner un certain temps? Ou même limiter les appels aux sous fonctions et mettre directement les algorithmes des sous-fonctions à l'intérieur de la fonction principale?

j'en suis à me demander s'il est possible que mon programme puisse tourner en un temps raisonnable.

merci

Bonjour,

Pour l'instant, je ne vois pas ce que je peux faire, compte-tenu des mes connaissances.

J'aurai cependant quelques pistes, mais...

Tu auras plus de chances d'intéresser d'autres personnes, si tu joins un fichier avec des explications

(contraintes, val min max des données d'entrées, etc...)

Cdlt.

Ok merci de t'y être penché dessus en tout cas et si tu as des pistes, je suis preneur!

Après je pense qu'il faut voir si au niveau de l'algorithmique, il n'y a pas moyen d'améliorer le code, cependant de ce point de vue là, je suis pas qualifié, je ne fais pas des études d'informatique. L'équation est la suivante :

32cta.docx (14.03 Ko)

(pas réussi à l'envoyer autrement)

où : -max représente le nombre de points de débit utilisés permettant de calculer les Mi désirées par la formule Mi=Qi*delta t et max peut valoir jusqu'à 1000

-n représente le nombre de bouffées, c'est à dire n aussi dans la formule. Il peut valoir jusqu'à 1000 aussi (on n'aura pas plus de bouffées que de points de débit utilisées)

-nj représente le temps associé à la borne sup de l'intégrale, c'est à dire le temps total du rejet.

Dans le fichier, j'avais déja mis les max des données d'entrée, elles sont entourées par des //////////////// afin de les repérer.

Voilà en espérant que ça vous aide à y voir plus clair.

Rechercher des sujets similaires à "calcul temps"