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 :

rapidité d'exécution entre lancement depuis éditeur de macro et un bouton sur une feuille [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut rapidité d'exécution entre lancement depuis éditeur de macro et un bouton sur une feuille
    Bonjour

    Après de nombreuses années d'utilisation d'excel et du vba je viens de m'apercevoir d'un problème de performance.
    Voici mon problème : la macro suivante parcours une "bdd", met tout en mémoire dans un tableau, et ensuite affiche dans un tableau les éléments en fonction d'un critère demandé par l'utilisateur.
    J'ai donc remarqué qu'en exécutant ce code directement depuis l'éditeur (F5), l'exécution dure environ 3s; en mettant un bouton sur la feuille qui appelle cette macro, l'exécution passe à 30s, autant que c'est inenvisageable au quotidien

    Y a t il des explications d'une telle différence ?

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub affiche_planning()
     
     
    'on stocke le contenu de l'onglet db dans un tableau, c'est plus rapide !!!
    Dim aff_planning As Variant
     
    nb = Sheets("db").Range("A65000").End(xlUp).Row
    'Debug.Print nb
    ReDim aff_planning(nb - 2, 1)
     
    For i = 2 To nb
    aff_planning(i - 2, 0) = Sheets("db").Cells(i, 1).Value
    aff_planning(i - 2, 1) = Sheets("db").Cells(i, 5).Value
    Next i
     
    ' on affiche le planning
    Dim qte As Variant
     
    sh = "General_2"
     
    Range("F5:AJ54").Select
        Selection.ClearContents
    Range("F5").Select
     
    For col = 6 To 36
        For lig = 5 To 54
     
    'creation de la clef de recherce
    clef = (col - 5) & Sheets(sh).Cells(lig, 1).Value & Sheets(sh).Cells(1, 22).Value
     
     qte = Application.VLookup(clef, aff_planning, 2, False)
     
     If IsError(qte) Then
     qte = ""
     End If
     
     
    Sheets(sh).Cells(lig, col).Value = qte
     
        Next lig
    Next col
     
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 599
    Points : 34 273
    Points
    34 273
    Par défaut
    Bonjour,

    quelques pistes :
    - vire moi ces .Select qui ne font que te faire perdre du temps
    - tu peux freezer l'ecran le temps du traitement avec Application.ScreenUpdating = False
    - le fait de lancer avec F5 dans l'interface VBE, avec le classeur cache, fait que tu n'a pas de ralentissements avec tout ce qu;'il se passe a l'ecran lorsque tu clique sur le bouton dans Excel =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut
    merci pour ces infos.
    je suis passé directement par le ruban, avec un bouton qui appelle cette macro, et là l'exécution se passe très rapidement (3s)
    je fais faire du ménage dans les .select !!
    merci

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

Discussions similaires

  1. [XL-2010] Extraire icone depuis fichier insérer en tant qu'objet sur une feuille
    Par jdizier dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/01/2016, 17h54
  2. [XL-2003] Ouvrir un dossier depuis une liste de numéro sur une feuille ".xls"
    Par supercopain dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2011, 12h23
  3. Rapidité d'exécution entre BDD et programme
    Par sebnantes dans le forum VB.NET
    Réponses: 14
    Dernier message: 26/08/2010, 14h02
  4. remplir la base de données sur une feuille exel depuis un userform
    Par racems dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/06/2007, 23h00
  5. [Vba-Excel] Exécuter une requete SQL sur une feuille de donnée
    Par Spacy_green dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/11/2006, 09h27

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