Améliorer mon code

Signaler
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Re Bonjour tous le monde.

Alors j'ai un gros pavé ou je suis sur il y a beaucoup de chose à améliorer, mais je comprend pas trop pourquoi des fois le code est rapide( 10 sec pour un gros traitement) et après il galère et met 2 min...

Je peux vous mettre mon code après si vous voulez mais vu la taille je préfère demander ce qui pourrai faire ça dans un premier temps?

Une idée?

:)

9 réponses


Bonjour,
J'ai été confronté au même problème il y a quelques temps, et j'ai procédé par élimination pour trouver ce qui ralentissait.
Dans mon cas c'était la gestion de la police et sa taille sur plusieurs cellules, si c'est ton cas essaye:
'On désactive le screenunpdating
Application.ScreenUpdating = False
'on gère la police et la taille
With Range("A1:G50").Font
    .Name = "Arial"
    .Size = 10
End With
'Et on réactive le ScreenUpdating
Application.ScreenUpdating = True



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Je mets ScreenUpdating = False sur tout mon code vu qu'il est relativement long pour l'accélérer. :)
En fait j'ai l'impression que c'est après avoir imprimé... Bizarre, bizarre..

Fait comme moi, tu marques comme commentaire morceau par morceau pour voir où ça se passe...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu as plusieurs procédures ou pas mal de choses qui se passent lorsque tu démarres ta macro, tu peux mettre à différents endroits du code quelque chose comme ceci
Application.Statusbar = "Traitement de la partie XYZ"

Ça va te permettre de voir dans la barre d'état en bas le défilement du programme et peut-être te permettre de voir où ça rame vraiment.

À la fin tu mets à False pour revenir à la barre par défaut
Application.Statusbar = False


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
des fois le code est rapide( 10 sec pour un gros traitement) et après il galère et met 2 min...

Ce n'est pas (je te l'ai dit dans une autre discussion) un problème VBA, mais bel et bien un problème Excel. Des modifications de la mise en Forme, des bordures, des polices, etc ... alourdissent Excel. Ce dernier, de surcroît, offre la possibilité de "revenir en arrière" (le Undo), ce qui l'oblige à conserver en mémoire les "états" précédents. Plus ces derniers sont "lourds" et "lourdement successifs" , plus Excel "rame comme un malade", forcément. Mais chaque fois que tu "enregistres", donc "valides" des modifications, tu "libères" Excel de cette charge en vue des "Undos" ===>> et du coup : il va plus vite ... et ralentit à nouveau au fur et à mesure de nouvelles modifs de l'espèce ... jusqu'au prochain enregistrement.
Les développeurs "avertis" se gardent de redéfinir la totalité de chaque mise en forme, police, couleur, etc ... Il n'apportent, à chaque étape, que la modification nécessaire. Cela demande alors une connaissance parfaite de son application et une excellente maîtrise de l'"historique" des modifs de style.
Je conclurais volontiers en disant ceci : évitons autant que faire se peut de détourner Excel de sa vocation principale, qui est celle d'un TABLEUR. Evitons surtout d'en faire un outil de "présentation" et encore plus d'en faire un outil de pseudo traitement de texte. Ou alors : apprêtons-nous à en payer le prix : lenteurs assurées et énervement du client utilisateur et donc victime de toutes ces bébelles dont il n'a, lui, que faire.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Je voudrais à ce propos rappeler un fait de la vue courante (celle de tous les jours) :
- les mises en exergue (par quelque moyen que ce soit) ne sont efficaces que si peu nombreuses. Si on les multiplie, elle sont noyées et perdent toute efficacité. Je me rappelle un copain qui, lui, passait au "stylo-boss" (surlignait, donc) tout ce qu'il trouvait intéressant en lisant un livre. Il y allait avec tant de "coeur", qu'à la fin :
- le nombre des passages surlignés était plus grand que celui de ceux laissés intacts
- qu'il était alors lui-même incapable d'y retrouver ce qu'il avait voulu "renforcer".
Trop est toujours l'ennemi du bien. La sobriété, par contre, paye presqu'à tous coups.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Re:
Les développeurs "avertis" se gardent de redéfinir la totalité de chaque mise en forme, police, couleur, etc ... Il n'apportent, à chaque étape, que la modification nécessaire.

Merci UcFoutu, pour cette parenthèse, c'est bon à savoir.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Oui merci ucfoutu de tes explication à chaque fois qui me font progresser et améliorer mon code.

ps : j'ai résolu mon problème, c'était bien après une impression il gardait en mémoire des informations..

J'ai rajouté ce petit code au début de mes macro et tout va beaucoup mieux !
(c'est une histoire de saut de page.)

ActiveSheet.DisplayPageBreaks = False

(peut être que ça servira à quelqu'un d'autre) :)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Belle prose bien intéressante, ucfoutu.
Merci