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 de code [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Optimisation de code
    Bonjour,

    j'ai un bout de code (qui marche bien) que j'ai optimisé le plus possible en fonction de mes connaissances, mais le temps d'exécution est encore assez long (dans une boucle 50 fois)

    pText = N° de la ligne concernée (integer)
    heighText = 300 (integer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    img.Shapes("Image 4").Copy
                pdfi.Range("C" & pText + 1).Select
                pdfi.Paste
                pdfi.Rows(pText).Select
                pdfi.Rows(pText).AutoFit
                pdfi.Rows(pText).RowHeight = pdfi.Rows(pText).RowHeight + 10
                pdfi.Rows(pText).VerticalAlignment = xlTop
                pdfi.Rows(pText + 1).RowHeight = heighText - pdfi.Rows(pText).RowHeight
    Peut-on faire mieux ?

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Sans voir le contexte global où vit ce bout de code, je dirais

    Encadrer la boucle avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = false.... true
    Sortir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.Shapes("Image 4").Copy
    de la boucle puisque c'est toujours la même image qui semble être utilisée


    Supprimer le Select ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pdfi.Rows(pText).Select
    et le remplacer par une structure With

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With pdfi.Rows(pText)
                .AutoFit
                .RowHeight = .RowHeight + 10
                .VerticalAlignment = xlTop
                pdfi.Rows(pText + 1).RowHeight = heighText - .RowHeight
    End With
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Bonjour et merci

    point 1 : Encadrer la boucle avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = false /  true
    C'est déjà fait

    point 2 : sortir de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.Shapes("Image 4").Copy
    Bonne idée

    point 3 : Supprimer le Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pdfi.Rows(pText).Select
    Oui effectivement il ne sert à rien

    point 4 :
    remplacer par une structure With

    Résultats après pas mal d'essais :
    avec les points 1 et 2 : gain de près de 30% !

    le point 3 n'a pas d'effet visible

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Non le point 3 était plus pour la lisibilité en cas de modifications futures sur le code.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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