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 d'une macro lente


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut Optimisation d'une macro lente
    Salut la compagnie,

    J'ai une toute petite macro qui devient de plus en plus lent au fil du temps.
    Je fais donc appel à vous pour voir s'il y a quelque chose à faire

    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
     
    Sub EcritureLOG(P_Classeur, P_Message1, P_Message2, P_Message3, P_TypeErreur)
    'Ecriture d'un message dans le feuille LOG
        WMemo_Classeur = ActiveWorkbook.Name
        WMemo_Feuille = ActiveWorkbook.ActiveSheet.Name
        Workbooks(P_Classeur).Activate
        Sheets("LOG").Select
        WDerniereLigne = ActiveCell.SpecialCells(xlLastCell).Row
        WDerniereLigne = WDerniereLigne + 1
        Cells(WDerniereLigne, 1).Value = Format(Time(), "hh:mm")
        Cells(WDerniereLigne, 2).Value = P_TypeErreur
        Cells(WDerniereLigne, 3).Value = P_Message1
        Cells(WDerniereLigne, 4).Value = P_Message2
        Cells(WDerniereLigne, 5).Value = P_Message3
        Workbooks(WMemo_Classeur).Activate
        Sheets(WMemo_Feuille).Select
    End Sub
    D'après ce que j'ai pu voir, c'est la partie qui remplie les cellules qui est de plus en plus lente et je ne comprends pas pourquoi ?
    Zeb'...

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonjour

    bien que je n'aurais pas fait comme ca pour moi il n'y a rien qui ralenti ton code au fur et a mesure
    a mon avis ca proviens plutôt des données message que tu inscrit dans tes cellules

    comment obtiens tu ces données regarde plutôt de ce coté la

    au plaisir
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut petite optimisation
    Bonjour,

    La seule optimisation que je vois est sur ces deux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WDerniereLigne = ActiveCell.SpecialCells(xlLastCell).Row
    WDerniereLigne = WDerniereLigne + 1
    Que tu pourrais fusionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WDerniereLigne = ActiveCell.SpecialCells(xlLastCell).Row + 1
    Cette "optimisation" sera à peine visible, mais si ta fonction est souvent appelée, ça peut jouer. Sinon, comme le suggère patricktoulon, ça doit plutôt venir de tes données.

    Bonne journée!

  4. #4
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Merci pour votre aide, mais les messages sont tout simplement passés en paramètres.
    Je ne m'explique pas pourquoi, au fure et à mesure des exécutions, la macro ralentie de plus en plus.
    Zeb'...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Et quels sont tes paramètres? Es-tu sûr qu'ils ne grossissent pas à chaque appel?

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    N'est ce pas ton fichier log qui devient de plus en plus gros ? Y a-t-il entre 2 un save ?

  7. #7
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Bon en fait j'ai trouvé : en cours de développement, il faut fermer Excel de temps en temps et tout revient à la normal.

    Encore le bug de libération de la mémoire, je pense.

    Bref, passons à autre chose...
    Zeb'...

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    c'est bien ce que je pensais il ne se rafraichit pas

    utilisation de variables non fermées (nothing ou "")ect...
    pour peu qu'il y ai eu un incident comme je te l'ai expliqué plus haut
    sache que ce fichier si c'est le cas aura toujours des problèmes

    au plaisir
    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

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ton fichier Excel dans lequel tu écris est-il vide?

    sinon, le calcul automatique pourrait ralentir l'insertion des données, ainsi que le screenupdating.

    De plus, tu n'es pas obligé de sélectionner la feuille de log pour écrire dedans. Sélectionner ta feuille LOG puis partir de la cellule active est à mon sens délicat, car il faudrait être certain que Activecell est la bonne à tous les coups, ce qui n'est pas gagné.

    Tu aurais donc intérêt à retravailler ton code en :
    • plaçant des lignes qui désactivent le calcul (si ton fichier contient des formules) ;
    • en désactivant le rafraîchissement d'écran ;
    • en ne sélectionnant pas la feuille LOG pour écrire dedans ;
    • en partant d'une cellule connue de cette feuille, en général A1 pour ce genre de cas ;
    • en gérant les erreurs pour replacer le calcul et le rafraîchissement d'écran avant la sortie de sub.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XL-2010] Optimisation d'une macro de recherche et copie
    Par alcalis16 dans le forum Excel
    Réponses: 5
    Dernier message: 09/07/2015, 10h00
  2. [XL-2007] Optimisation d'une macro + Application à tous les onglets
    Par Identifiant75 dans le forum Excel
    Réponses: 53
    Dernier message: 05/05/2015, 19h23
  3. Exécution d'une macro lente
    Par rickgoz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2010, 20h02
  4. optimisation d'une macro
    Par Alphonss dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/10/2009, 15h07
  5. probleme d'optimisation d'une macro
    Par ylabarre dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 28/09/2007, 16h40

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