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 :

Un moyen de rendre mon code plus rapide?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 30
    Points
    30
    Par défaut Un moyen de rendre mon code plus rapide?
    Salut tout le monde,

    Voila je souhaiterai savoir s'il y a un moyen de rendre mon code plus rapide.

    Je m'explique, j'ai fait un petit programme qui récupère des données suivant qqs critères d'un fichier source et les copies suivants ces memes criteres vers différentes feuilles dans un fichier destination.

    Mon code fonctionne bien, simplement il y a des jours ou mon pc est vraiment lent ou j'arrive meme a voir l'execution des différentes etapes de mon code:
    - Activaion du fichier source.
    - Selection et copie de la plage
    - Activation du fichier destination
    - collage de la plage etc...

    Je me disais donc, y'aurait-il un moyen de réduire ces étapes en mettan par exemple toutes les informations à copier en mémoire (ex: presse papier) et les coller en une seule fois dans le fichier destination et ainsi de suite.

    OU bien s'il y a d'autres methode, merci de m'en faire part.

    A++

  2. #2
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    bonjour

    voici une procédure accélératrice mais à n'utiliser que lorsque le code ne présente plus de bug de fonctionnement :
    (petit truc : j'ai créé une petite sub Deblocage() contenant simplement "FastRun True" qui permet de reprendre la main en cas de plantage dans la macro à accélérer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    'accélerer le code en désactivant en début de procédure puis
    'réactivant en fin de procédure les options d'Excel qui
    'ralentissent l'exécution.
    'Ex
    '  Sub MaProc()
    '    FastRun False
    '
    '    'code à accélérer
    '
    '    FastRun True
    '  End Sub
    
    Function FastRun(Setting)
    'Peter Fossey, mpep
    
      Application.StatusBar = "Updating Excel settings, please wait..."
      Application.EnableCancelKey = xlDisabled
      Application.ScreenUpdating = Setting
      Application.DisplayAlerts = Setting
      Application.Interactive = Setting
      If Setting = False Then Application.Calculation = xlCalculationManual
      If Setting = False Then Application.Cursor = xlWait
      If Setting = True Then Application.Calculation = xlCalculationAutomatic
      If Setting = True Then Application.Cursor = xlDefault
      Application.StatusBar = False
      
    End Function
    à plus

  3. #3
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous
    Pour accélérer un code, passe en seconde
    Comment veux-tu qu'on puisse réellemnt t'aider ? on a aucune idée du code!
    C'est comme de demander d'accélérer ta voiture. Si on ne la voit pas, difficile de faire une proposition qui soit adaptable sur une 2CV et une ferrari (rouge).

    Pour optimiser un code, il faut le code à optimiser, sinon, effectivement tu as les "trucs" qui découlent de la logique :
    Bloquer le ScreenUpDating
    Bloquer les calculs
    Supprimer les SELECT / ACTIVATE
    Limiter les boucles au strict nécessaire, etc...

    A+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Salut,

    Comment veux-tu qu'on puisse réellemnt t'aider ? on a aucune idée du code!
    promis je mettrai mon code des que la machine sur lequelle il se trouve sortira du coma... j' y travaille

    Mais ma question meme si elle fait reference a code que j'ai ecrit est plus generale... et je recherche une solution que je devrait appliquer qq soit le code que je realise... Vous m' avez tous les deux donner des pistes que je vais essayer d' appliquer a cahque fois que je realiserai une macro qui necessite beaucoup de traitement.

    Tjrs ds le meme sens pensez vous que c possible ds une macro ou je copierai une plage1, puis une plage2 etc plageN et au moment de les coller au lieu de le faire une a une je collerai une plage qui serait l' union de toutes les plages 1,2,...,n

    Merci

  5. #5
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Beluga_71
    Mais ma question meme si elle fait reference a code que j'ai ecrit est plus generale... et je recherche une solution que je devrait appliquer qq soit le code que je realise...
    si tu donnes un code et qu'on te te retourne optimisé, tu seras à même de voir les modification et de les appliquer de façon plus générale. C'est ce qu'on fait tous ici : quand une réponse semble meilleure on l'analyse, et si on ne comprend pas, on demande des explications. Il y a tellement de manière de faire un code que faire des généralités ne sert à rien. Il y a des codes qui sont plus rapide dans certains cas et pas dans d'autres...

    Tjrs ds le meme sens pensez vous que c possible ds une macro ou je copierai une plage1, puis une plage2 etc plageN et au moment de les coller au lieu de le faire une a une je collerai une plage qui serait l' union de toutes les plages 1,2,...,n
    Non, c'est comme dans Excel, les multi-sélection ne sont pas copiables.
    A+

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    dans un premier temps essaie le code proposé par le Pierre, c'est une compilation de bonnes idées.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



Discussions similaires

  1. [PowerShell] Comment rendre vos codes plus rapides en execution
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 05/12/2013, 13h31
  2. [JpGraph] rendre mon camembert plus petit afin de voir mes légendes
    Par vandeyy dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/02/2008, 11h27
  3. rendre mon code plus propre
    Par superspike23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/01/2008, 10h10
  4. Rendre les requetes plus rapide
    Par radhwene dans le forum Débuter
    Réponses: 6
    Dernier message: 06/06/2007, 17h10
  5. Rendre mon code valide
    Par Bilou44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 06/01/2007, 12h43

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