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 :

Accélerer le calcul d'une macro [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Par défaut Accélerer le calcul d'une macro
    Bonjour,

    J'ai créé une macro qui envoie les résultats de calculs dans les cellules d'un tableau. Malheureusement, les calculs s'effectue très lentement et les cellules se remplissent, en gros, au rythme d' 1 cellule toutes les 2 secondes. J'ai remarqué cependant un phénomène curieux: lorsque je clique sur le bouton gauche de la souris, les calculs s'effectuent plus rapidement (1 à chaque clic de souris).

    Quelqu'un aurait-il un moyen d'accélerer les calculs puisque apparemment, ce n'est pas la puissance de mon processeur qui est en jeu?

    NB: J'ai déjà testé la solution d'empêcher l'affichage en cours de calcul mais rien n'y fait.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Par défaut
    Pour empécher le rafraichissement de l'affichage et accélérer le tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenupdating = False
    Sinon, il y a peut-être des milliers de formules dans ton tableau ?
    Vérifie que tu n'es pas en mode rafraichissement automatique des formules (dans les options Excel)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Yvanou et le forum
    Ce serait bien de donner le code : on ne sait rien de ce que fait la macro, et à par utiliser ScreenUpDating ou de passer en calcul sur demande, aucune solution ne pourra savoir ce qui pourrait accélérer l'exécution.
    A+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Par défaut
    Bonjour et merci pour vos réponses

    Application.screenupdating = False
    J'ai de nombreuses boucles dans mon calcul, je pense que c'est ça qui ralenti le calcul. A quel endroit du code dois-je mettre le code ci-dessus? En début de boucle, en début de code? Faut-il inscrire par la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenupdating = True
    ?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Par défaut
    Cette option de screenupdating tu la mets en première ligne de code, enfin, au niveau des initialisations diverses...
    Après dans tes boucles, peut-être que tes tests de sortie boucles ne sont pas satisfaisants ???
    Et puis sinon, ça arrive hein, des pgms longs en VBA. Après tout c'est de l'interprété et ça ne va pas très vite c'est sur. Mais d'un autre côté, Excel bossant en mémoire vive (ce que je me tue à expliquer à des collègues fous de bases de données) et pas sur disque, les accès sont la plupart du temps immédiats.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Par défaut
    Et j'oubliais, ce n'est pas nécessaire de repositionner le screenupdating à True en fin de pgm...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Par défaut
    Merci Merci pour vos réponses!!

    J'ai testé le Screenupdating = False mais ça ne changeait rien parce que mon programme intégrait les écritures de valeur à l'intérieur des boucles. Donc finalement je n'avais plus rien.

    En revanche, j'ai changé de tactique: j'ai créé un tableau de Double dans lequel j'envoyais toutes mes valeurs puis je recopiais ce tableau à l'endroit où j'en avait besoin en fin de programme. Du coup, j'ai divisé le temps de calcul par 8 ou 10.

    Merci pour votre aide en tout cas!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/07/2014, 14h17
  2. [XL-2010] Problème événement Calculate dans une macro
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/04/2014, 09h27
  3. Calcul dans une macro évènementielle
    Par erm60 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2013, 10h59
  4. Réponses: 1
    Dernier message: 07/02/2008, 00h10
  5. macro pour calculer la vitesse d'execution d'une macro
    Par victorzecat dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/12/2007, 14h34

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