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 :

Libération de mémoire virtuelle à la fin de l'exécution d'un programme VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut Libération de mémoire virtuelle à la fin de l'exécution d'un programme VBA
    Bonjour,

    J'ai développé un code en VBA d'une certaine taille (environ 10000 lignes) qui utilise des données contenues dans des feuilles excel et des userforms.
    Le programme tourne très bien mais remplit progressivement la mémoire virtuelle. J'ai déjà essayé différentes solutions (trouvées notamment sur ce forum) dont : déclarer toutes les variables ("option explicit" partout), utiliser "Application.ScreenUpdating = False" et "Application.Calculation = xlCalculationManual", et durant le calcul, les feuilles excel ne sont pas utilisées (toutes les données sont enregistrées dans des tableaux VBA). A la fin des calculs, les tableaux VBA les plus gros (environ 10000 valeurs de type double) sont vidés avec "Erase" et les classeurs excel qui sont modifiés sont enregistrés. Pour donner un ordre d'idée, si le calcul prend 20 minutes, la consommation de mémoire virtuelle augmente de 500 Mo.

    Quant je suis l'évolution de la mémoire virtuelle, elle évolue de manière linéaire en fonction du temps de calcul, et ne se vide pas lorsque le calcul se termine, ni même, et c'est là le plus étonnant, lorsque tous les classeurs excel sont fermés. Il faut que je quitte excel pour que finalement la mémoire virtuelle soit libérée.

    Mon but étant d'enchaîner les calculs les uns à la suite des autres de manière automatique, ce problème de non libération de la mémoire virtuelle me bloque.

    J'aimerais donc savoir si quelqu'un a une idée de l'origine de ce problème, et surtout, d'une solution !

    Merci d'avance pour vos idées !
    Laurent

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Par défaut
    Question : alloues-tu de la mémoire dynamiquement dans des boucles et/ou des fonctions récursives? Par exemple en faisait des Redim dans des boucles, ou des set...new.

    Si c'est le cas, il y a déjà moyen de gagner en évitant le morcellement de la mémoire, en optimisant les allocations.

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    Il n'y a pas de fonction récursive dans mon programme. Ni de "set" ou de "new".

    Pour ce qui est des allocations dynamiques, il y a un certain nombre de tableaux dynamiques, une partie d'entre eux sont déclarés "Public" et sont effacés à la fin du calcul (avec "erase"), et d'autres sont "private" donc doivent être, il me semble, automatiquement effacés (mais peut-être que je me trompe ?)

Discussions similaires

  1. Problème de libération de la mémoire virtuelle
    Par Martial72 dans le forum C++
    Réponses: 15
    Dernier message: 11/02/2013, 12h34
  2. Libération de mémoire en fin de fonction
    Par UrSuS AmErIcAnUs dans le forum Débuter
    Réponses: 1
    Dernier message: 21/03/2008, 21h18
  3. Réponses: 25
    Dernier message: 16/07/2003, 20h41
  4. [Turbo Pascal] Limite de la mémoire virtuelle
    Par moon tiger dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 08/02/2003, 22h30
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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