IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mesure de la performance d'un code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut Mesure de la performance d'un code VBA
    Bonjour,

    je travaille actuellement sur l'optimisation et la simplification d'un projet VBA.
    Le programme actuel met plus de 7 heures à tourner.
    Afin de tracker les ameliorations dans le code, je voudrais à chaque optimisation, obtenir le gain de temps.
    J ai donc créer une fonction timer, qui me donne le temps d'éxecution.
    Mais travaillant sur plusieurs PCs, j'aurais aimé obtenir une mesure qui puisse être comparé quel que soit le PC utilisé.
    Ou si par exemple d'autres applications tournent sur le PC, que les temps d'execution puissent être comparables.

    Merci beaucoup!

    Lucile

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Lorsque l'on veut faire ce genre de comparaisons, il est indispensable de comparer ce qui est comparable et donc de s'affranchir de tout le reste, ce qui veut dire :
    - 1) mesurer le temps d'exécution un grand nombre de fois, toujours sur la même machine et toujours dans les mêmes conditions (pas d'autre application/tache en cours)
    - 2) calculer le temps MOYEN (temps total / nombre de tests)
    - 3) garder à l'esprit une particularité de Windows en matière de gestion de la mémoire et surtout (en cas de dépassement et d'utilisation de swap) garder à l'esprit que Windows adaptera le Fichier de pagination à la dernière opération effectuée. Ce qui veut dire que si l'on veut être objectif, il ne convient pas de mesurer le temps d'exécution de la même opération deux fois de suite (la seconde sera plus rapide que la première). Il faut donc (si l'on veut un résultat à peu près pur) , intercaler les tests avec le lancements d'autres applications intervenant sur le pagefile.
    Tout cela prend beaucoup de temps et nécessite calme et maîtrise.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par lucileMarie Voir le message
    Le programme actuel met plus de 7 heures à tourner.
    Alors Excel n'est peut-être pas le bon outil !
    Dans une récente discussion, un traitement sous Excel prenait plus de 50 minutes
    tandis que le même traitement optimisé sous Access n'avait pas besoin de plus de 20 secondes !

    Plus il y a de boucle et plus c'est long !
    Plus c'est du Général VBA, plus c'est long comparativement à l'utilisation des fonctionnalités internes d'Excel.

    Chercher à optimiser une usine à gaz n'étant pas l'idéal sinon il y a le risque de rester enfermé dans la "conception" initiale !
    Mieux vaut déjà mettre à plat le besoin, bien cerner tenants & aboutissants …   Quitte à repartir d'une page vierge !

    Comparer des temps dans des conditions différentes est totalement illusoire et inapproprié !
    Le protocole doit être le même à chaque test en évitant donc d'autres applications ouvertes en même temps …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    les différentes configurations des ordi entre le processeurs, la mémoire (et type de barette mémoire), disque dur ou flash, certains logiciels qui peuvent ralentir le processus, et j'en passe … ne vont pas forcément aider à l'optimisation !
    Ce qui est important avant tout c'est l'optimisation du code et donc la conception/manière de faire ce code, car tout les chemins mènent à Rome (ou presque ),
    mais certains sont plus rapide que d'autres, et donc je pense (après je peux me tromper) que la 1ère question à se poser, est de savoir si on a utiliser la(les) bonne(s) méthode(s), pour faire tel type ou tel type d'action(s) …!?

    pour exemple, je n'ai pas su le temps réel de départ (plus 1h30 à mon avis), mais en se concentrant sur l'optimisation des processus à faire :
    voir le résultat de ce lien => https://www.developpez.net/forums/d1...s/#post8668750
    même lien (début du post)

    Edit : salut Marc - post entrecroisé
    Mieux vaut déjà mettre à plat le besoin, bien cerner tenants & aboutissants …
    en effet c'est la 1ère chose à faire
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Entièrement d'accord !

    En dehors de l'application support, la méthodologie employée est importante quant à la célérité d'exécution.
    La semaine dernière sur un autre forum pour traiter 57 000 lignes d'une feuille de calculs d'Excel
    le code initial du demandeur prend presque trois minutes, ma version privilégiant le B-A-BA d'Excel un peu plus de 7s
    et ma version optimisée à l'aide d'un objet externe au VBA donne le même résultat en 0,25s ! …

    Si j'avais cherché à améliorer le code initial, je n'aurais pas gagné grand-chose !
    Une fois les tenants & aboutissants bien formulés, je suis parti d'une page blanche après avoir mené une réflexion …

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    C'est clair, cela a été montré maintes et maintes fois dans différentes interventions,
    et si c'est toujours trop long, comme le dis Marc-L, ce n'est peut être pas le bon outil ! ,
    il faudra alors se tourner vers un solution plus appropriée dont l'outil dépendra du contexte et des actions à faire
    afin d'éviter les usines à gaz

    Edit : une page blanche, rien de tel pour mettre en place les bonnes méthodes, et cela évite aussi de s'embrouiller l'esprit avec un code non approprié
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Tutoriel pour mesurer les performances d'un code Java avec JMH
    Par Mickael Baron dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 29/08/2015, 14h32
  2. Performance code vba
    Par novice06 dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/04/2009, 12h37
  3. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  4. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo