[VBA] Vidange de l'espace mémoire??

Verba_Tim

XLDnaute Occasionnel
Salutation

Un petit problème de nouveau...
J'ai une macro assez lourde, 16-17 modules, qui traite un fichier assez lourd, 110 000lignes environs, et exécute beaucoup de calcul et traitement, réalise une douzaine de graph'... bref un monstre ^^
Lorsque je l'exécute après que mon pc ai fait une bonne nuit de sommeil, elle dure environ 3minute... Après l'avoir fait tourné trois-quatre fois, on passe aisément a 4-5 voir 6 minute.
Et il arrive un moment ou ma macro plante sur un bref copier/coller en me disant que excel sature.

Clairement, la mémoire virtuel d'excel sature...
Je pense que c'est en partie parce qu'il m'arrive souvent de sortir en cours de boucle avec des 'exit XXX', et aussi a cause du nombre de donnée que je sélectionne avec les procédure du type '.select'.

Mais le problème c'est que je ne peut pas me permettre de faire autrement comme par exemple de coder mes données en dur, parce que je dois avoir un temps d'exécution optimal.

Existe-t-il une commande pour vider l'espace mémoire utiliser comme dans nombre de langage de programmation comme le C/C++ par exemple??
Ou va-t-il falloir que je redémarre ma station ou excel toute les X exécutions?

Au plaisir de vous lire ^^

VB_Tim
 
Dernière édition:
G

Guest

Guest
Re : [VBA] Vidange de l'espace mémoire??

Bonjour,

A ma connaissance, non. Soit tu fermes excel, soit tu utilise une usine à gaz basée sur les API windows.

La seule possibilité (à ma connaissance) dans vba, c'est de réécrire les macros de façon à libérer la mémoire des objets que les macros créent.

sinon excel à 3 propriétés en lecture seule

Application.MemoryFree ' qui n'est que la mémoire dont peut disposer excel
Application.MemoryUsed 'mémoire actuellement utilisée
Application.MemoryTotal ' =MemoryFree-MemoryUsed

A+
 
G

Guest

Guest
Re : [VBA] Vidange de l'espace mémoire??

Re,

Déjà en premier, déclarer toutes les variables et les typer, afin qu'excel organise la mémoire en conséquence à la compilation.
toutes les variables objets nettoyées en fin d'utilisation par Set LaVariableObjet = Nothing
Tous les tableaux dynamiques nettoyés par Erase Tableau.
Eviter les select et activate.

Mettre les plages de travail en variables par

Dim MaPlage As Range
Set MaPlage = Range("A1:B15")
MaPlage.copy Destination:= Range("X316")
Set MaPlage=nothing 'Dès que possible


Mettre les resultats d'opération et d'évaluation en Variables.

Eviter les Evaluate et la notation entre crochets '[A1]' (qui sont plus gourmands)

Utiliser les plages nommées plutôt que la reconstruction de plages par macros

Utilser toutes les possibilités d'excel au lieu de réinventer la roue:
Faire les tris sur une feuille (cachée) plutôt que d'écrire une macro de tri, idem pour les filtres.


Prévoir dans les gestion d'erreur le nettoyage des variables.

et autres choses suivant les cas.

A+
 

Verba_Tim

XLDnaute Occasionnel
Re : [VBA] Vidange de l'espace mémoire??

Alors dans mon cas, pas de tableau dynamique, pas d'evaluate.
Par contre, les select et activate me sont indispensable étant donnée que je navigue entre plusieurs classeurs/feuilles et même dans des documents words...
J'utilise cependant avec mesure & raison ;)
Par contre j'ai au final des feuilles inutiles... en les supprimant pense tu que j'affecte la mémoire?? ou je travaillerai juste sur la taille de mon fichier final sans aucune influence sur la memoire virtuel?
Je vais faire un effort aussi pour déclarer mes variables et les nettoyer une fois leur utilisation terminé.

Merci
 
G

Guest

Guest
Re : [VBA] Vidange de l'espace mémoire??

Re,

Oui, déjà tu peux supprimer tout ce qui n'est pas strictement necessaire, y compris les feuilles inutiles.

Sur chaque feuille restante, supprimer toutes les colonnes inutiles à droite et les lignes en dessous des données. Il y a des macros pour nettoyer les classeurs et feuilles des éléments inutiles. Tu en trouveras certainement sur le forum et ou par google.

Utilise les variables application.Memory pour tester la mémoire avant le lancement d'une macro et après. Simplement pour voir où tu peux améliorer tes macros et/ou s'il y a problème.

A+
 
Dernière modification par un modérateur:

Etienne2323

XLDnaute Impliqué
Re : [VBA] Vidange de l'espace mémoire??

Bonjour le fil,
pour ajouter à ce que présente Hasco (mes salutations ;)), un bon vieux
Code:
End
en fin de procédure t'assure que toutes les sluts de mémoires sont libérées.

Sinon, est-ce que la possibilité d'enlever le calcul automatique en début de macro et en le remettant à la fin pourrait te permettre te contourner une partie du problème ?

Cordialement,

Étienne
 
Dernière édition:

Verba_Tim

XLDnaute Occasionnel
Re : [VBA] Vidange de l'espace mémoire??

C'est quoi la syntaxe à utiliser avec
Application.MemoryFree
Application.MemoryUsed
Application.MemoryTotal
?
J'arrive pas à faire tourner ça comme ça, ni même dans une variable ou MsgBox...

Cordialement,

VB_Tim
 
G

Guest

Guest
Re : [VBA] Vidange de l'espace mémoire??

Re,

Hello Etienne:):):) (un bon jeune) ;l'avais oublié celle-là (end):)

1000 Excuses, Verba_Tim, je ne savais pas que ces propriétés semble âvoir disparues dans excel 2007.

Je viens de faire une recherche dans l'aide excel sur Application et elle n'apparaissent plus dans les propriétés.

J'aurais appris quelque chose aujourd'hui:):D

A+
 
Dernière modification par un modérateur:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou