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 VBA Excel 2010


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Lenteur VBA Excel 2010
    Bonjour,

    Je vous explique briévement mon problème.

    J'ai développé pour un client des macros sur Excel 2003, les temps de traitements sont optimisés (vérouillage de l'écran, peu de select,...). Jusque là pas de problème.

    Mon client a décidé d'installé Office 2010 sur tous c'est postes donc conversions de tous les fichiers et modifications des macros pour qu'elles continuent de fonctionner.
    Le problème est que les temps de traitement sont maintenant multipliés par 4 ou 5 alors les macros sont identiques ou presque.

    Quelqu'un aurait-il une explications à ceci (VBA 2010 plus lent, bugs connus,...)

    Merci d'avance pour votre aide.

    Cordialement,

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Excel 2003 a 65 k lignes excel 2010 1 million... Il nous faudrait voir tes macros pour pouvoir voir ce qui pourrait provoquer un tel comportement

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Mes macros sont composés de dizaines de milliers de lignes dans différents fichiers et sont en plus confidentielles. Donc cela va être compliqué de vous les communiquer.

    Mais le problème n'est pas dans le code lui même car avant la migration vers 2010 tous les traitements étaient rapide.

    Je suis d'accord que le nombre de lignes et colonnes et plus important mais la taille des fichiers est beaucoup importante quand on utilise le format .xlsb par rapport a .xls. De plus le nombre de cellules n'a pas vraiment d'importance car je désactive les calculs lors de mes tratiements.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Que font tes traitements...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Composition de l'applicatif (en bref) :

    - Un fichier avec montant de CA répartis par Compte Comptable, région,...
    - Un fichier contenant la hiérarchie des région Niveau 1, Niveau2,..., Niveau 6
    - Un fichier contient une maquette vierge avec un onglet composé du tableau modèle vierge et d'un onglet contenant la ligne de destination des Comptes Comptables dans ce tableau.

    En gros le programme principal créer autant de fichier que de Région (selon Niveau choisit) à partir de la maquette, récupérer les montants dans le fichier de CA et les écrit dans les fichiers de chaque Région. (Construction d'une seul Région à la fois pour ne pas avoir une multitude de fichier ouvert an même temps)

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    La création d'un xls et un xlsb ne devrait pas ralentir de 4x la macro... Il faudrait que tu places des timer dans tes macros pour voir où le décalage a lieu afin de cibler le problème.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Est-ce possible que tous simplement le nombre de lignes de code traité (par seconde par exemple) soit moins important sur Excel 2010 que sur Excel 2003 ?

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    non.
    Mets des timers tout au long de ton code.
    Execute le sur 2003 Puis sur 2010 et regarde où les temps d'execution varient.. Tu pourras cerner le problème. Et on pourra t'aider.

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour.
    Citation Envoyé par EngueEngue Voir le message
    Excel 2003 a 65 k lignes excel 2010 1 million... Il nous faudrait voir tes macros pour pouvoir voir ce qui pourrait provoquer un tel comportement


    Je penche aussi vers une mauvaise programmation !

    Par exemple du genre parcours d'une colonne entière au lieu de la plage utilisée de la colonne.

    Qui plus est cellule par cellule au lieu d'utiliser une variable tableau …

    Mais comme confidentiel le code est , tout seul tu es …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Si vous prenez l'exemple du fichier en pièce jointe, il contient une macro totalement inutile mais qui m'a servi de test entre 2003 et 2010

    Elle ne fait Copier/Coller un tableau 3 lignes en dessous 10000 fois.

    J'ai lancer l'exécution sur 2003 : Temps = 15sec
    J'ai lancer l'exécution sur 2010 : Temps = 1minute

    4,5 fois plus long alors que le traitement est en tous point identique...
    Fichiers attachés Fichiers attachés

  11. #11
    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 heu
    Bonjour

    pour copier une plage dans une autre plage tu n'est pas obligé de selectionner ta plage a copier

    car selectioner 10000 fois une plage de bourre la memoire grave si je peux m'exprimer ainsi

    moi je ferait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i= 1 to 10000
    with sheets("nom du sheets")
    .range("a26:a46")=.range("a1:a20")
    end with
    next i
    ce qui corespond exactement a l'exemple que tu a posté

    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

  12. #12
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    En cherchant un peu sur internet j'ai vu des forums parlant de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.DisplayPageBreaks = True
    Essaie de le glisser dans les classeurs que tu traites ... On ne sait jamais..

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Peut-être qu'il y a un souci sur l'ordinateur en question …

    Mais déjà le code est vraiment affreux, en fait généré par l'Enregistreur de macros, pas du tout optimisé côté rapidité !

    Ce code prend 7s sur un PC portable de test, ma procédure Demo n'en a besoin que de 3 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Demo()
                        [A1].Value = Time
        Application.ScreenUpdating = False
                                TS = [A7:K20].Value
        For N% = 1 To 10000
            [A26:K39].Value = TS
        Next
     
        Erase TS
                        [A2].Value = Time
        Application.ScreenUpdating = True
    End Sub
    Donc si l'application est comme le classeur en pièce jointe …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour.


    Je penche aussi vers une mauvaise programmation !

    Par exemple du genre parcours d'une colonne entière au lieu de la plage utilisée de la colonne.

    Qui plus est cellule par cellule au lieu d'utiliser une variable tableau …

    Mais comme confidentiel le code est , tout seul tu es …

    Le classeur que j'ai mis en pièce jointe ,je le répète ne sert que d'exemple pour comparer la vitesse de traitement entre 2003 et 2010.
    Il ne fait en aucun cas partie des applications que je développe qui elles sont optimisés (traitement des fichier en mémoire par variable tableau multidimensionnel et non pas une malheureuse lecture ligne à ligne des fichiers, limité au maximum les accés fichier->VBA VBA->fichier, mise à jour de l'ecran bloqué, déclarations de toutes les variables, libération de la mémoire en fin d'exécution, etc...).

    Ma question n'est pas comment puis-je optimiser mon code pour qu'il s'exécute plus rapidement mais si quelqu'un et au courant de problème ou de spécificité sur la version 2010 de Excel à propos des traitements VBA.

    Cordialement,

  15. #15
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Je préfère, t'aurais pu nous mettre un zoli code !

    Par souci de maintenance d'anciens applicatifs, j'ai toujours une version 2003 sur laquelle je continue de développer

    même pour des versions supérieures, et jusqu'à présent, je n'ai pas rencontré ce souci …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  16. #16
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Le fait d'insérer une ligne ou d'en supprimer et les copiers collers sont plus gourmands sur excel 2007+ du fait de classeurs avec 1 M de lignes plutôt que 65k... Pour remédier à ce problème de programmation de bas étage il est possible d'activer l'option:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.DisplayPageBreaks = True

  17. #17
    Invité
    Invité(e)
    Par défaut
    Salut,

    Quand j'ai commencé la programmation VBA il y a quelques mois déjà, je progressait quasiment uniquement grâce aux Macro (et au explication sur PDF bien présenté et super compréhensible) de George Lungu de ExcelUnusual. Il utilisait principalement Excel 2003 plutôt qu'une version récente dû aux performances justement dans les simus de vols.
    Sur Excel 2013, sur ça Macro de simu de vol je devait être à 3 ou 4 FPS si je me rappel contre pour lui une 20 aine sur des PC pas hyper différents).

    Mais ce genre de Macro n'ai pas du même genre que beaucoup utilisent en VBA, donc à voir si tu y trouve une correspondance ou non. Puisque les macros qui sont traités en désactivant l'affichage n'ont rien à voir avec des formules sur feuille Excel qui mettent à jour un graphique. La qualité graphique générale et les options incorcorporé à Excel ont augmenté entre 2003 et 2010.

    Quelques pistes ici :
    http://excelunusual.com/about-the-sp...preadsheets-1/
    http://excelunusual.com/wp-content/u...Tutorial_2.pdf
    Il utilise beaucoup le couple VBA / feuille de calcul (pour permettre un affichage au niveau graphique). Essaie de voir si ton cas correspond à ces courbes de performances entre 2003 et 2007 (utilisation de formules sur feuille).

  18. #18
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut lenteur VB Excel 2010
    Bonjour,

    Sur mon ordinateur (excel 2013 64 bits), avec l'exemple qu tu donnes, copie1 met 19 s contre 28 pour copie2

    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
     
    Sub copie1()
        Range("A1").Select
        ActiveCell.FormulaR1C1 = Time
        Application.ScreenUpdating = False
     
        With Sheets("feuil1")
           For i = 1 To 10000
               .Rows("7:20").Copy Rows("26")
           Next i
        End With
     
    Range("A2").Select
        ActiveCell.FormulaR1C1 = Time
        Range("A3").Select
    End Sub
    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
     
    Sub copie2()
    Range("A1").Select
        ActiveCell.FormulaR1C1 = Time
        Application.ScreenUpdating = False
     
        With Sheets("feuil1")
           For i = 1 To 10000
              .Rows("7:20").Copy
              .Rows("26:26").Select
              ActiveSheet.Paste
           Next i
        End With
     
        Range("A2").Select
        ActiveCell.FormulaR1C1 = Time
        Range("A3").Select
    End Sub
    Cordialement,

  19. #19
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Salut Paul,

    et c'est quoi comme processeur & fréquence ?

    Test sur un i5-3210M 2.5Ghz en Windows 7 64 bits sur Excel 2003 : 7 secondes pour Copie1 comme pour Copie2

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #20
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut lenteur VB Excel 2010
    Bonjour Marc,

    Je te livre ce qui est indiqué dans "panneau de configuration" menu "Systeme".

    Le processeur est Intel(R) Core(TM) 15-3750k CPU 3.40 GHz 3.80 GHz
    mémoire 16 Go.

    Je suis avec Windows 7 64 bits et office 2013 64 bits

    Indice générale de performance Windows 7.6.

    Il faut croire que notre ami a raison: Les versions postérieures à office 2003 souffrent d'un problème de lenteur manifeste.

    Cordialement.

Discussions similaires

  1. vba excel 2010 bug workbooks().close
    Par goofyy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/12/2012, 17h26
  2. Valeur et non l'id d'un item d'une dropdown list vba excel 2010
    Par thibauc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/07/2012, 09h50
  3. [XL-2010] Archivage VBA excel 2010
    Par Radaghast dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/05/2012, 01h09
  4. [XL-2010] Cours VBA excel 2010
    Par sthiteng dans le forum Excel
    Réponses: 2
    Dernier message: 07/03/2012, 13h44
  5. [XL-2010] VBA Excel 2010 pb informations licence introuvables
    Par degateau dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/02/2012, 16h07

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