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 :

Optimisation temps macro (enable calculation)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2015
    Messages : 22
    Par défaut Optimisation temps macro (enable calculation)
    Bonjour à tous,

    Merci d'avance de prendre de votre temps pour vous occuper de mon problème.

    J'ai une macro VBA ( trop compliquée et confidentielle pour que je puisse la poster sur ce forum, désolé :/) sur laquelle je travaille depuis plusieurs semaines dans le cadre de mon travail.

    Pour faire simple, cette macro utilise le solver Excel pour résoudre un système de 28équations à 28inconnues... De nombreuses configurations sont à simuler, et tous les résultats que me donnent le solver sont regroupés dans une seule feuille Excel: «results». Ensuite d'autres feuilles Excel («sketch_select») vont piocher les valeurs qui vont bien dans cette feuille «results» pour tracer les bonnes courbes.

    Pour optimiser le temps de réalisation de ma macro, j'ai désactiver le calcul de ces feuilles «sketch_select».

    Ma macro tourne alors pendant 2 min... C'est pas trop mal, mais cela peut devenir handicapant lorsqu'elle doit tourner 50fois de suite... Mais jusque là, tout va plutôt bien!

    Mon problème arrive ici: quand je supprime les feuilles sketch_select (dont le calcul avait tout de même était désactivé pendant la macro), ma macro ne met plus que 1 minute pour tourner!

    Comment est ce possible, sachant que je désactive le calcul de ces feuilles pendant tout le temps de réalisation de la macro?
    Avez-vous des solutions?

    Je vois bien la solution avec la macro de déplacer les feuilles «Sketch_select» vers un autre classeur, remplacer les formules pour casser les liens, faire tourner la macro puis ré-déplacer les feuilles vers l'excel d'origine... Mais cette solution est lourde :/

    Toute idée et aide est la bienvenue

    Merci à vous et bon week-end

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour,

    J'aurais bien une réponse mais trop compliquée et confidentielle pour que je puisse la poster sur ce forum, désolé...

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    rares sont les codes VBA qui réinventent la poudre, et peuvent se considérer comme confidentiels

    et en général, les auteurs de ce type de macros ne butent pas sur un problème, ils vont le résoudre

    comme tu l'auras peut être compris, si c'est trop compliqué pour nous, pourquoi nous poser une question ?

    si le code est bien pensé et bien structuré, tu n'est pas censé nous le montrer intégralement, mais uniquement sélectionner les partie où tu penses que ça impacte ta problématique.

    tu n'as même pas pris la peine de montrer comment tu utilises ton enable calculation (à quel endroit, de quelle manière, quand il est remis à True) ou le code que pourrait contenir cette feuille

    en aveugle, on ne pourra pas te fournir quoi que ce soit qui puisse être une piste ... sur des procédures compliquées

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Moi, je me dis qu'en ce bas monde, il peut y avoir mieux qu'Excel.

    Pour juste l'effort de télécharger et d'attendre que l'installation se fasse; c'est l'affaire de quelques heures, dépendant de la vitesse de téléchargement, ont peut avoir Visual Studio Community.

    Visual Studio Community donne accès à la réalisation de programmes VB (F#, C#, C++, etc.) compilés au lieu de juste interprétés. Cela donne aussi accès à de nombreux utilitaires gratuits ou presque, grâce à NuGet et l'accès facile `GitHub. Même qu'il existe une DLL du Solver ($$$$) compatible VB.net

    Et puis, une adresse tellement confidentielle que personne ne pense de l'essayer:

    http://www.solver.com

    Et puis un autre truc tellement confidentiel que tout le monde connaît:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = false

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2015
    Messages : 22
    Par défaut
    Bonjour à tous,

    Merci à ceux qui se sont donnés la peine de me donner une réponse construite...

    Apparemment le mot "confidentiel" vous pose problème... Je me doute bien que je ne viens pas de ré-inventer l'eau chaude, mais ce fichier a simplement été rédigé lors de mes heures de travail (dans un centre R&D). Voila pourquoi je ne peux me permettre de vous le transmettre. Cependant, s'il vous est impossible de m'aider sans avoir ce fichier, je comprends parfaitement, et auquel cas je continuerai à chercher de mon côté.

    Concernant la complexité de la macro, je n'ai bien évidement pas utilisé de fonctions dont je suis le seul à connaitre (bien au contraire)... Et croyez-moi, je ne me considère pas (du tout!) comme meilleur que vous sur le sujet des macros Excel, sinon je ne serai pas ici en train de vous demander de l'aide... A la place du mot compliqué, j'aurais plutôt dû dire qu'elle est longue (ou tout du moins par rapport à celles que j'avais faite précédemment : 2 500 lignes)... Beaucoup de temps sera donc nécessaire pour comprendre cette macro, et je ne suis pas sur que comprendre le fonctionnement entier de la macro fasse avancer le schmilblick :/ ...

    Je vais tenter de travailler sur une version light de mon fichier excel+macro, histoire de ne garder que les bases et voir si le problème est toujours là. Auquel cas, je mettrai le fichier dans un prochain post pour que vous puissiez constater le problème par vous-même

    @Joe.levrai
    Merci pour ton aide.
    Le problème est que je ne vois pas quelle partie du code pourrait me générer ce ralentissement car je n'appelle JAMAIS la feuille "Sketch_select" (celle qui est incriminé dans le ralentissement de ma macro). Et cette feuille ne contient aucun code!

    1ère ligne de la macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sketch_select").EnableCalculation = False
    Voici la première ligne de mon code... Cette feuille "Sketch_Select" fait référence à une UNIQUE feuille: la feuille "results" dans laquelle tous les résultats issus de la macro et du solver sont mis à jour en temps réel pendant que la macro tourne. Dans la feuille Sketch_select, je n'utilise que des formules directes et des recherchesV... En mode debug, j'ai bien pu observer que la mise à jour de cette feuille "Sketch_Select" ne se fait pas pendant que la macro tourne... Elle ne se fait qu'à la fin de ma macro...

    Dernière ligne de la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sketch_select").EnableCalculation = True
    Seulement, je n'arrive pas à comprendre pourquoi en supprimant cette feuille "Sketch_select", la macro tourne deux fois plus vite. Sachant que pendant que la macro tourne, Excel ne doit pas (et il ne le fait pas!) mettre à jour les résultats de cette feuille... Quelque chose m'échappe à ce niveau... En fait, il faudrait plutôt une ligne de code me permettant de dire à Excel de faire comme si cette feuille n'existait pas du tout!

    @clementmarcotte
    Merci pour ta réponse. Ayant ce problème dans le cadre de mon travail, je ne peux pas me permettre (et je n'en ai pas les droits) d'installer les logiciels que je veux. Mais je prends note de ton message pour des projets personnels

    De plus, je ne pense pas que le problème vienne du solver en lui-même, car que la feuille "Sketch_select" soit là ou non, la macro tourne sans erreur tout en me fournissant les mêmes résultats.

    J'ai bien évidemment pensé à cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = false
    Cependant, le solver a cette particularité de le remettre automatiquement à "true" à chaque fois qu'il est lancé. Et ça, même en cherchant sur des forums, je n'ai trouvé personne capable de contourner ce problème. Mais si tu étais au courant de ce problème et que tu as la solution, je suis bien évidemment preneur, bien que cela ne soit pas le coeur de ma problématique .

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    de toute facon une macro qui plombe l'app pendant 2 minutes et plus c'est plus une macro c'est une soufrance

    non sans rire
    regarde dans ton code si tu peut pas supprimer quelque select

    voir plutot qu'ecrire dans le sheets de destination resultat par resultat regarde si tu peut pas utiliser de variable Tableaux
    en general sa peut reduire jusqu'a 90% la durré de la macro
    n'ayant pas ton fichier sous les yeux je ne peut t'en dire plus

    a bon entendeur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Citation Envoyé par petitchti Voir le message
    Merci à ceux qui se sont donnés la peine de me donner une réponse construite...
    L'Humour est comme le fil à plomb pour la construction : il fout droit ! D'où expression "Rigoler comme un bossu"... ThauTèmePédia...

Discussions similaires

  1. [XL-2007] Optimisation temps execution d'une macro
    Par Ltspitfire dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 22/01/2015, 15h18
  2. Optimisation Temps de calcul somme.si.ens
    Par damsaga dans le forum Excel
    Réponses: 10
    Dernier message: 26/08/2014, 16h39
  3. Optimisation temps d'exécution macro
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/07/2011, 13h14
  4. Réponses: 6
    Dernier message: 26/05/2010, 09h15
  5. optimisation temps de calcul: appel à DLL
    Par oliv23 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/03/2008, 13h18

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