Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Application Excel / VBA : sauvegarde TRES lente

3 réponses
Avatar
alf
Bonjour,

j'ai fait une belle ;) application VBA sous excel 2003 SP3 permettant
de faire de la gestion de t=E2ches avanc=E9es.
Cependant, a la sauvegarde de mon classeur, cela met un temps pas
possible a sauver (Entre 5 et 10 secondes), le classeur faisant
800Ko). Mon code fait plusieurs milliers de lignes r=E9partis en
plusieurs modules (9 pour =EAtre pr=E9cis). Je pr=E9cise que mon applicatio=
n
n'a aucune formule excel. J'ai regarder toutes les options qui
pourrait faire perdre du temps, sans succ=E8s. J'ai aussi analyser mon
code, mais le temps pass=E9 est bien celui pass=E9 lors de la sauvegarde,
pas dans les sub workbook_deactivate ou workbook_BeforeClose ou
Workbook_BeforeSave
Il semble que cela soit bien la taille du code qui fasse que la
sauvegarde est lente... En quoi la taille du code pourrait poser
probl=E8me ?

J ai aussi remarqu=E9 un probl=E8me quant =E0 la taille du fichier excel.
Sans faire de modification significative, le fichier peut prendre 100
Ko. Et si j'exporte mes modules VBA et les reimporte puis que je sauve
le classeur, je peux facilement gagner 30% sur la taille du fichier!
Excel a du mal avec la gestion m=E9moire semble t il (et pourtant j
essaye au maximum de lib=E9rer mes variables objets : Set mavar =3D
Nothing)

Si quelqu'un a des id=E9es ou des tips VBA pour am=E9liorer cela, je suis
preneur...

Merci de votre aide.

3 réponses

Avatar
michdenis
Si tu enregistres ton fichier en utilisant ce type de procédure, Est-ce
aussi long ?

'-------------------------------------
Sub Saved_File()

Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True

End Sub
'-------------------------------------




"alf" a écrit dans le message de news:

Bonjour,

j'ai fait une belle ;) application VBA sous excel 2003 SP3 permettant
de faire de la gestion de tâches avancées.
Cependant, a la sauvegarde de mon classeur, cela met un temps pas
possible a sauver (Entre 5 et 10 secondes), le classeur faisant
800Ko). Mon code fait plusieurs milliers de lignes répartis en
plusieurs modules (9 pour être précis). Je précise que mon application
n'a aucune formule excel. J'ai regarder toutes les options qui
pourrait faire perdre du temps, sans succès. J'ai aussi analyser mon
code, mais le temps passé est bien celui passé lors de la sauvegarde,
pas dans les sub workbook_deactivate ou workbook_BeforeClose ou
Workbook_BeforeSave
Il semble que cela soit bien la taille du code qui fasse que la
sauvegarde est lente... En quoi la taille du code pourrait poser
problème ?

J ai aussi remarqué un problème quant à la taille du fichier excel.
Sans faire de modification significative, le fichier peut prendre 100
Ko. Et si j'exporte mes modules VBA et les reimporte puis que je sauve
le classeur, je peux facilement gagner 30% sur la taille du fichier!
Excel a du mal avec la gestion mémoire semble t il (et pourtant j
essaye au maximum de libérer mes variables objets : Set mavar Nothing)

Si quelqu'un a des idées ou des tips VBA pour améliorer cela, je suis
preneur...

Merci de votre aide.
Avatar
alf
Je n'ai effectivement pas essayé cela (juste pour voir le temps de
sauvegarde, car il n est pas question que je me substitue à la
sauvegarde d'excel)

Je viens aussi de penser à quelque chose de tout simple, c est que
c'est peut être l antivirus qui fait que c'est lent !
Je ne pourrais tester tout cela que la semaine prochaine, je vous
tiens au courant.

Pour le second point sur la taille du fichier excel qui est variable,
j'ai trouvé une partie des réponses ici (ca peut peut etre aider
quelqu'un)
http://archive.baarns.com/excel/develop/vbaperfm.asp

Et il y a aussi ceci qui est interessant:

* The Visual Basic Editor (VBE) can consume lots of memory if you
have several modules open. Also close each module before exiting the
VBE; otherwise, all modules that were open will still be open when you
reinvoke the VBE. Keep macros and formulas that are likely to be used
in same session together so you don't bring in a lot of unneeded
coding. Don't put all your code into one module (a module is limited
to about 64KB). You can look at the Window menu item in the VBE to
see if you have more than one module currently open for editing.
* Don't put all code into one module, spread them out keep code
used all the time and together in a module, put the most used at the
the top of the module. There appears to be a limit of 4000 lines of
code in a module. VBE HELP does not have it's own Specification
Limits. Also there appears to be a 64KB limit to a code module though
usually the line limit appears before additional problems.

Cdlt


On 17 août, 12:40, "michdenis" wrote:
Si tu enregistres ton fichier en utilisant ce type de procédure, Est-ce
aussi long ?

'-------------------------------------
Sub Saved_File()

Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True

End Sub
'-------------------------------------

"alf" a écrit dans le message de news:

Bonjour,

j'ai fait une belle ;) application VBA sous excel 2003 SP3  permettant
de faire de la gestion de tâches avancées.
Cependant, a la sauvegarde de mon classeur, cela met un temps pas
possible a sauver (Entre 5 et 10 secondes), le classeur faisant
800Ko). Mon code fait plusieurs milliers de lignes répartis en
plusieurs modules (9 pour être précis). Je précise que mon applicat ion
n'a aucune formule excel. J'ai regarder toutes les options qui
pourrait faire perdre du temps, sans succès. J'ai aussi analyser mon
code, mais le temps passé est bien celui passé lors de la sauvegarde,
pas dans les sub workbook_deactivate ou workbook_BeforeClose ou
Workbook_BeforeSave
Il semble que cela soit bien la taille du code qui fasse que la
sauvegarde est lente... En quoi la taille du code pourrait poser
problème ?

J ai aussi remarqué un problème quant à la taille du fichier excel.
Sans faire de modification significative, le fichier peut prendre 100
Ko. Et si j'exporte mes modules VBA et les reimporte puis que je sauve
le classeur, je peux facilement gagner 30% sur la taille du fichier!
Excel a du mal avec la gestion mémoire semble t il (et pourtant j
essaye au maximum de libérer mes variables objets : Set mavar =
Nothing)

Si quelqu'un a des idées ou des tips VBA pour améliorer cela, je suis
preneur...

Merci de votre aide.


Avatar
Frédéric Sigonneau
Une option possible pourrait être de séparer le code (dans une macro
complémentaire) et les données (dans un classeur). Seules les données seraient
ainsi enregistrées en utilisation courante.
Concernant la taille du fichier lié aux modifs du code (cela sera la même chose
dans une xla), ce n'est pas une question de gestion de la mémoire AMA. Excel
conserve, au moindre changement, beaucoup d'informations de débogage qu'il ne
"purge" que selon des critères sur lesquels l'utilisateur n'a aucune réelle
maîtrise.
Deux remarques basées sur mon expérience :
- faire tourner et enregistrer du code écrit dans une version d'Excel (par ex
2003) avec une version antérieure (par ex 2000 voire 97 si le code le permet)
entraîne une sérieuse diminution de poids.
- le code est plus léger lorsqu'il est optimisé : variables déclarées dans le
"bon" type, chasse aux instructions redondantes ou inutiles (dans un projet
conséquent, il y a souvent des "scories", enfin, c'est peut-être moi qui manque
de rigueur !).

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

alf a écrit :
Bonjour,

j'ai fait une belle ;) application VBA sous excel 2003 SP3 permettant
de faire de la gestion de tâches avancées.
Cependant, a la sauvegarde de mon classeur, cela met un temps pas
possible a sauver (Entre 5 et 10 secondes), le classeur faisant
800Ko). Mon code fait plusieurs milliers de lignes répartis en
plusieurs modules (9 pour être précis). Je précise que mon application
n'a aucune formule excel. J'ai regarder toutes les options qui
pourrait faire perdre du temps, sans succès. J'ai aussi analyser mon
code, mais le temps passé est bien celui passé lors de la sauvegarde,
pas dans les sub workbook_deactivate ou workbook_BeforeClose ou
Workbook_BeforeSave
Il semble que cela soit bien la taille du code qui fasse que la
sauvegarde est lente... En quoi la taille du code pourrait poser
problème ?

J ai aussi remarqué un problème quant à la taille du fichier excel.
Sans faire de modification significative, le fichier peut prendre 100
Ko. Et si j'exporte mes modules VBA et les reimporte puis que je sauve
le classeur, je peux facilement gagner 30% sur la taille du fichier!
Excel a du mal avec la gestion mémoire semble t il (et pourtant j
essaye au maximum de libérer mes variables objets : Set mavar > Nothing)

Si quelqu'un a des idées ou des tips VBA pour améliorer cela, je suis
preneur...

Merci de votre aide.