XL 2010 Gestion mémoire

F22Raptor

XLDnaute Impliqué
Hello,
J'ai un petit souci de mémoire dans Excel, en raison de fichiers un peu volumineux :
Après démarrage d'Excel, et ouverture de mes deux fichiers tout le temps ouvert, je monte à 280 Mo d'utilisation mémoire pour le process EXCEL.

Lorsque j'ouvre un gros fichier (ma market map, façon Treemap, faite avec un rectangle de 100 colonnes sur 100 lignes, soit 10 000 cellules affichées à l'écran ...), je monte à 400 Mo.
Quand je referme ce fichier, ça redescend à ... 395 Mo !

Bref, il y a un effet de cliquet.
Et quand j'atteins plus de 600Mo, j'ai souvent un message "Mémoire insuffisante pour afficher en entier".

Une idée pour vider la mémoire d'Excel (mis à part fermer/ouvrir) ?
 

Jam

XLDnaute Accro
Salut

Il y a plein de raisons à cette question.
L'utilisation de nombreuses police de caractère, de couleur, d'objets, etc...peuvent augmenter de façon considérable l'utilisation de la mémoire.
Par exemple, beaucoup de gens pour ne pas s'embêter sélectionne une colonne pour lui mettre une couleur au lieu des quelques lignes concernées. Eh bien, Excel a besoin de savoir toutes les cellules qui ont cette couleur. Ces informations augmentent donc fortement la quantité de mémoire nécessaire.
Après le mauvais "déchargement" du fichier de la mémoire peut provenir de problèmes plus obscurs et plus difficile à résoudre (vider le répertoire temporaire de temps à autre peut permettre de solutionner quelques problèmes de cet ordre là).

Bon courage
 

F22Raptor

XLDnaute Impliqué
Merci Jam !
en effet, j'ai 10 000 cellules (fusionnées en environ 500 cellules de toutes tailles), et je leur donne une couleur pour faire mon treemap, du coup, mon petit fichier de 300Ko me prend 120Mo en mémoire !

Idéalement, il y aurait un code VBA dans Excel permettant, sur un Workbook_Close par exemple, de vider la mémoire.
Je me demande si cela marcherait mieux avec un PC updaté (notamment sur la RAM), ou si c'est une limite interne à Excel.
 

F22Raptor

XLDnaute Impliqué
Bonjour PJ,
Intéressant : je testerai le truc.
Sélectionner la zone, et mettre les couleurs sur AUCUN REMPLISSAGE ...

Cela dit, ça concerne ce fichier en particulier.
Un autre très différent (je pense que c'est à cause de formes rectangles transparentes, auxquelles j'affecte des macro, et que je place au-dessus de graphiques, pour lancer des actions suivant les clics) est aussi très gourmand, et finit par générer également ces pb de mémoire ...

J'ignore si MS a réglé le pb dans les versions postérieures à 2010, mais ce serait une bonne idée !
 

Jam

XLDnaute Accro
Plusieurs possibilités:
  • la version d'Excel est-elle à jour côtés mises à jour Micro$oft ?
  • La version utilisée d'Excel peut éventuellement avoir un bug sur le vidage de la mémoire à la fermeture du fichier. Si tu as accès à différentes version, tu peux effectuer des tests
  • Une macro ne pourra pas solutionner le problème
 

Jam

XLDnaute Accro
Cela dit, ça concerne ce fichier en particulier.
Un autre très différent (je pense que c'est à cause de formes rectangles transparentes, auxquelles j'affecte des macro, et que je place au-dessus de graphiques, pour lancer des actions suivant les clics) est aussi très gourmand, et finit par générer également ces pb de mémoire ...

Ah, fallait préciser qu'il y avait des macros.
Effectivement le problème peut venir de là vu que tu manipules des objets. Il faut impérativement dans ton code, si tu fais références à des objets à bien "tuer" tes variables en quittant la macro.
Comme ci-dessous par exemple, et pour tous les objets ! Sinon, ils peuvent effectivement restés en mémoire, et seule la fermeture d'Excel entraîne leur disparition et la récupération de la mémoire !
VB:
set monObjet = nothing
 

F22Raptor

XLDnaute Impliqué
Yes : j'essaie de ne pas oublier à tuer les variables objets dans les macros.
Cela dit, le simple fait qu'il y ait ces graphs avec toutes ces formes (que je ne manipule pas avec les macros : elles sont juste là pour être cliquées) suffit à faire s'envoler l'utilisation mémoire.

Pour le variables à tuer, je crois me rappeler avoir lu un sujet ici, qui expliquait qu'à la fin de chaque macro, Excel les tuait.
Cela dit, je préfère autant m'astreindre à cette discipline : ca ne coûte pas cher, même si ça ne sert à rien, et ça fait prendre de bonnes habitudes.
 

job75

XLDnaute Barbatruc
Bonsoir à tous,

Je ne peux pas laisser passer une telle bêtise :
Par exemple, beaucoup de gens pour ne pas s'embêter sélectionne une colonne pour lui mettre une couleur au lieu des quelques lignes concernées. Eh bien, Excel a besoin de savoir toutes les cellules qui ont cette couleur. Ces informations augmentent donc fortement la quantité de mémoire nécessaire.
Il suffit de tester 2 secondes pour voir que la coloration d'une colonne entière n'augmente pas du tout la taille du fichier.

Excel est plus intelligent que vous ne semblez le croire, il a de bonnes méthodes pour stocker les informations.

Bonne nuit.
 

Jam

XLDnaute Accro
Bonsoir à tous,

Je ne peux pas laisser passer une telle bêtise :

Il suffit de tester 2 secondes pour voir que la coloration d'une colonne entière n'augmente pas du tout la taille du fichier.

Excel est plus intelligent que vous ne semblez le croire, il a de bonnes méthodes pour stocker les informations.

Bonne nuit.

Salut job75,

Faux: un fichier vide fait 7,47ko, avec une simple colonne colorisée en jaune il passe à 7,60ko soit 13ko de plus. Le pas du tout est donc à modérer et il ne s'agit pas d'une bêtise.
Maintenant s'il s'agit d'une simple colonne cela n'a bien sûr aucun impact. Mais si on ajoute à cela des polices de caractères différentes, de taille différentes et tout un tas d'artefacts de présentation, la taille peut vite gonfler.
Les versions d'Excel s'améliorant avec le temps, il est probable que cette gestion se soit améliorée avec le temps. Dans les "anciennes" version, ces éléments là avaient un réel impact.

Bonne journée
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Jam,
Maintenant s'il s'agit d'une simple colonne cela n'a bien sûr aucun impact.
Pas d'impact non plus si l'on colore 1000, voire 16384 colonnes...
Code:
Columns(1).Resize(, 1000).Interior.ColorIndex = 6
Edit : chez vous 7,60ko - 7,47ko = 130 octets soit une variation de + 1,74% sur un fichier vide.

C'est epsilonesque.

Chez moi sur un fichier vide, le simple fait de mettre un 1 en A1 augmente son poids de 115 octets.

A+
 
Dernière édition:

Statistiques des forums

Discussions
312 896
Messages
2 093 387
Membres
105 716
dernier inscrit
jrmdprt