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 :

Lenteur mise en forme par VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Par défaut Lenteur mise en forme par VBA
    Bonjour à tous,

    Je ne suis pas sûr de m'adresser dans la bonne section du forum car ma question est à cheval sur du VBA access et excel, mais elle n'est pas dénuée de lien avec cette rubrique.

    En fait, je m'exaspère de l'effroyable lenteur liée à la mise en forme de bordures de tableau sous excel. Au sein d'une fonction sous access, j'exporte des données formalisées dans un tableur excel, et ce fichier ainsi que sa mise en forme sont générées automatiquement.

    Je ne suis pas certain d'utiliser la méthode la plus efficace, car pour la création un fichier de 200 lignes et 200 colonnes il me faut environ 20 secondes d'exécution.

    Voici une partie de mon code, je suis sûr que ce n'est pas très efficace, donc si vous voyez des améliorations n'hésitez pas :


    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
    Do While Not rstTemp.EOF
    'Ecriture de l'origine
    'rstTemp.MoveNext
     
    j = ligne_debut
     
    'Boucle qui regarde si c'est la première fourniture de ce type pour ce pays ou non
    Do While rstTemp.Fields(2).Value <> xlSheet.Cells(j, 4) And j < i
    j = j + 1
    Loop
     
     
    'Si c'est la première alors j = i, et on insère les informations de ligne
        If j = i Then
      If a_pays <> rstTemp.Fields(16).Value Then
        xlSheet.Cells(i, 1) = rstTemp.Fields(16).Value
        a_pays = rstTemp.Fields(16).Value
        End If
     
        xlSheet.Cells(i, 2) = rstTemp.Fields(17).Value
        xlSheet.Cells(i, 3) = rstTemp.Fields(1).Value
     
        xlSheet.Cells(j, 4) = rstTemp.Fields(2).Value 'Fourniture
        xlSheet.Cells(j, 5) = rstTemp.Fields(3).Value ' Nature
        xlSheet.Cells(j, 6) = rstTemp.Fields(7).Value ' Scénario
     
         i = i + 1
     
    For k = 1 To 79
         xlSheet.Cells(i - 1, k).Borders(xlEdgeRight).LineStyle = xlContinuous
        xlSheet.Cells(i - 1, k).Borders(xlEdgeRight).Weight = xlThin
    Next
     
         End If
     
    rstTemp.MoveNext
    Loop
    Merci!

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Pour que le code excel s'execute plus rapidement, tu peux desactiver les formules auto ainsi que la mise a jour de l'affichage le temps que ton code tourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    'Ton code
     
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    j'utilise personnellement intensément le transfert de données depuis access vers excel avec un reformatage optionnel des données (cadres, totaux, Pivot table), mais ma technique est différente de celle-ci.

    1) Export d'une table (ou SQL) vers excel
    2) Contrôle dans une table d'access s'il y a lieu d'appliquer un script VBA de reformatage au fichier excel résultat de l'export.
    3) Si reformatage à faire, appel via access d'un fichier excel cotenant tous les scripts qui va :
    a) Ouvrir le fichier excel résultat
    b) exécuter le script sur celui-ci
    c) sauver le résultat reformaté.
    d) fermer excel

    Cela marche plutôt bien, et je passe même un table de paramêtres variables.

    Si tu veux, je peux essayer de te passer le code, mais pas avant cet aprèm.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Par défaut
    Merci de vos réponses.

    Ne t'inquiètes pas pour ce fichier, je n'ai pas le temps de repenser toute ma struture d'exportation, je vais laisser toutes mon code de calcul sous access d'autant plus que j'utilise beaucoup d'objets DAO sur plusieurs tables access, il faudrait donc que je transfère toutes ces tables sur des feuilles excel ce qui risque d'être délicat.

    Je trouve quand même ce problème singulier, car sans mise en forme et malgré de nombreuses routines de calcul la création du fichier se fait très rapidement, mais par contre à partir du moment ou j'insère des éléments de mise en forme le processus devient bien plus long, multiplié environ d'un facteur 10.

Discussions similaires

  1. Récuperer la description d'un form par VBA ?
    Par marot_r dans le forum Contribuez
    Réponses: 3
    Dernier message: 03/02/2009, 15h39
  2. Spécifier evenement OnTimer d'un form par VBA
    Par grommerch dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/10/2007, 15h53
  3. Réponses: 8
    Dernier message: 05/03/2007, 15h56
  4. mise en forme conditionnelle VBA
    Par maverick91 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/11/2006, 13h16
  5. [CR9] lenteur mise en forme des couleurs dans expert diagram
    Par cdu dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 20/04/2005, 08h48

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