[VBE] : fuite mémoire

kromei

XLDnaute Nouveau
Bonjour,
Je suis un apprenti dans une entreprise et j'ai à ma charge une lourde application excel automatisée qui tourne chaque matins.
Je ne peux pas diffuser cette application mais j'ai un soucis avec celle-ci depuis la migration de cette application de windows 2000 vers windows 2007.
Comme le dit le titre le soucis est une fuite mémoire
Excel me signale une mémoire insuffisante.
Ce message,lorsqu'il apparaît bloque toute la machine m'obligeant à redémarrer le poste.

J'ai plusieurs questions du coup.
J'aimerai connaitre toutes les astuces simples vbe pour limiter voir supprimer ces fuites de mémoires.
J'aimerai également dans ce sens savoir si il y a une commande qui supprime toute prise de mémoire avant fermeture d'excel ( je saurai le placer avant la fermeture ).

Merci d'avance de vos réponses
 

Misange

XLDnaute Barbatruc
Re : [VBE] : fuite mémoire

Bonjour
difficile d'aider vraiment sans voir le fichier et si il y avait une réponse générique à ta question ce serait "trop simple" !
Une appli qui tourne sans pb sur 2000 et coince sur 2007 ça m'évoque un pb de graphique souvent. En effet 2007 est une catastrophe pour la gestion des graphiques, ce qui a été corrigé dans la version 2010. Est-ce que tu as beaucoup de graphiques dans ton appli ?
L'autre très très grand classique c'est la taille des plages de travail. Le nombre de lignes a considérablement augmenté entre 2000 et 2007. Si tu as des formules (ou des macros) qui travaillent sur des colonnes entières, en particulier si ce sont des formules matricielles, c'est le plantage quasi assuré.
Regarde dans tous les noms définis, dans toutes les macros et limite les plages de travail à celles contenant réellement des données.

edit : hello Marc :)
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : [VBE] : fuite mémoire

Bonjour kromei,

Eh oui, Alzheimer, un vrai fléau...

Sans avoir idée du code utilisé et des opérations réalisées par la macro, pas facile de répondre, la mémoire insuffisante peut provenir d'un trop nombre de données copiées par ta macro, si plusieurs classeurs sont ouverts en même temps ça peut jouer aussi, essaye de nous expliquer ce que fait ta macro (grandes étapes) et si tu peux dis-nous à quelle étape ce message apparaît

Edit : Bonjour Misange :)
 

GeoTrouvePas

XLDnaute Impliqué
Re : [VBE] : fuite mémoire

Bonjour kromoei,

Voici typiquement le genre de problème insolutionnable sans un fichier exemple.

On ne connaît que le message d'erreur, on n'a aucune idée de ligne de code sur laquelle ça plante, du type de données traitées etc.... De plus quand tu parles de Windows 2007, je suppose que tu veux dire Excel ?

Ma boule de cristal étant toutefois de très bonne humeur ce matin, elle me suggère que le problème pourrait venir du nombre de colonnes à ta disposition depuis le changement de version d'Excel.

N'aurais tu pas une variable déclarée en "byte" et qui désignerait un nombre de colonnes ? Il se pourrait fortement que le passage à 16 384 colonnes ait fait "exploser" ta variable.......

Edit : Bonjour Misange et Toto !
Edit 2 : Bonjour Staple !
 

kromei

XLDnaute Nouveau
Re : [VBE] : fuite mémoire

ReBonjour ^^

Que de réponses ça fait plaisir.

J'ai bien pensé que l'absence de code vous gênerait donc oui je vais expliquer les grandes étapes

Alors pour répondre au premier post oui j'ai énormément de graphique et j'ai aussi beaucoup de calculs sur colonne entière surement ( à verifier)

Donc les étapes de cette appli :

Chaque matin à 7h un fichier se remplit d'ordres à exécuter à la suite.
Il y a deux types de fichiers.
les premiers vont chercher des logs sur le serveur source il les traite pour en faire des indicateurs ( des logs ordonnées)
Les seconds utilisent les indicateurs pour en fabriquer des graphiques à l'aide de tableau croisés dynamiques.

Voulez vous que je détaille une des parties?

Edit : je ne peux malheureusement pas diffuser le vba :( et le simplifier sera compliqué et pour ce qui est de cibler le problème je n'arrivais pas à le faire puisque la fuite de mémoire fait planter tout le pc et ça ne plante jamais au même endroit :(
 
Dernière édition:

kromei

XLDnaute Nouveau
Re : [VBE] : fuite mémoire

Alors l'appli fait 444ko
je vais tenter de suivre les differents conseils données en espérant résoudre ou cibler le soucis pour enfin donner un bout de code.
Petite question auriez vous des conseils pour suivre la "mémoire" d'excel car je ne trouve rien pour faire un suivi de celle-ci je suis obligé d'attendre l'erreur qui se produit un jour sur 2...
 

kromei

XLDnaute Nouveau
Re : [VBE] : fuite mémoire

ça risque d'être compliqué de les commenter toutes une par une au vue du nombre de procédures j'ai commencé à chercher les "Bytes" dans le projet et j'en ai trouvé une seule qui n'a pas été limitée en taille les autres le sont , sont elles dangereuses aussi ? style
VB:
szDescription(0 To 256) As Byte
 

Misange

XLDnaute Barbatruc
Re : [VBE] : fuite mémoire

Commence par chercher systématiquement toutes les lignes de code (et aussi les formules !!!!) qui font référence à des colonnes entières, de toutes façons tu ne t'en sortiras pas sans corriger cela.
Désactive la création ou la mise à jour des graphiques si tu le fais par macro en commentant les lignes de code correspondantes.
Ma suggestion : reprends un nouveau classeur (enregistré dès le départ en version 2007). Colle les données que tu importes (sans forcément faire la procédure d'importation par macro pour commencer). Remets petit à petit dans ton nouveau classeur tout propre tes macros UNE a UNE en les relisant ligne à ligne et en les testant pour chercher
1) toutes les variables non déclarées (option explicit en tête de module...). Fais attention : si tu as beaucoup de ligne, déclarer les variables correspondantes en long et pas en integer.
2) les traitements sur colonne entière.
3) profites en pour mettre le mode de calcul sur manuel en début de macro et le remettre en auto à la fin, tu économises +++ et du temps et de la mémoire si tu as des formules dans tes feuilles qui se recalculent quand tu réinjectes des données ou quand tu fais tes macros
4) mets les graphiques de côté pour le moment, tu les feras à la fin quand tout le reste ira bien.

Tu peux trouver que c'est long de faire comme ça mais c'est en général bien plus payant que de tripatouiller le code dans tous les sens.
Non il n'y a rien pour suivre la mémoire d'excel...
 

Misange

XLDnaute Barbatruc
Re : [VBE] : fuite mémoire

ça risque d'être compliqué de les commenter toutes une par une au vue du nombre de procédures j'ai commencé à chercher les "Bytes" dans le projet et j'en ai trouvé une seule qui n'a pas été limitée en taille les autres le sont , sont elles dangereuses aussi ? style
VB:
szDescription(0 To 256) As Byte

Ce qui est important ce n'est pas tant cela que de vérifier que tu n'as pas des formules (ou des macros c'est pareil) qui font des trucs du genre
for each c in columns(1) ...
Sur excel 2000 ca va de 1 à 65656
sur excel 2007 tu boucles sur 1 048 576 cellules !!! si tes plages font des tas de colonnes de large, si tu fais des calculs matriciels sur ces plages, encore une fois c'est le plantage assuré....
 

kromei

XLDnaute Nouveau
Re : [VBE] : fuite mémoire

Merci de cette réponse par cette étape je penses que je vais transformer ce problème en projet pour pas qu'on me rejette une perte de temps non utile.
je vais surement poser d'autres questions au fur et à mesure de mon avancée
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972