Macro & problème d'utilisation de mémoire croissante sous Excel 2016

Bonsoir à tous,

Tout d'abord je vous souhaite une excellente nouvelle année 2018

Malheureusement elle commence par un souci de macro

J'ai développé une macro, il y a 2 ans, qui a toujours tourné à la perfection sur différentes version d'Excel.

Or depuis que ma boîte a migré sous office365, ma macro devient capricieuse.

Le souci est qu’elle bouffe de la mémoire de façon croissante avec Excel 2016, alors qu’elle utilise une quantité de mémoire constante sur les versions antérieures d’Excel.

Résultat : au bout d’un certain temps, la macro s’arrête toute seule, sans explications.

Le principe général de cette macro est de :

  • ouvrir x fois un fichier xls/slxs
  • d'en extraire des données différentes lors de chaque ouverture.
  • d'enregistrer le fichier sous un nom différent à chaque fois.

J'ai ciblé le souci : il semblerait que ce soit la boucle d'ouverture/fermeture du fichier.

Je pense donc qu'il s'agit d'un problème de mauvaise gestion de la mémoire dans ma macro (mais qui bizarrement pose problème maintenant avec excel 2016.)

J’ai simplifié à l’extrême la macro (avec une boucle qui ouvre/ferme 200 fois le fichier) et le problème d’utilisation croissante de la mémoire est bien là.

Voici le code simplifié à l'extrême :

Sub UDTQ_Tronçonner()
Dim Wb As Workbook
Dim i As Integer

    For i = 1 To 200
        Workbooks.Open Filename:="D:\Classeur1.xlsx"
        Set Wb = ActiveWorkbook
        Wb.Close False
        Set Wb = Nothing
    Next i

End Sub

Ci-joint la macro, directement dans un fichier xlam

Le fichier Classeur1.xlsx quant à lui, vous pouvez le créer vous-même, il peut être vide

Quelqu'un aurait-il une idée de ce qui cloche ?

ps : je précise que je suis un autodidacte non confirmé en vba, donc par pitié soyez indulgents avec moi

Merci d'avance

10macro.zip (9.23 Ko)

Bonsoir,

Je suis pour le moment avec 2010 sous Win 7, donc pas un test qui t'intéresse...

mais je n'ai effectivement pas de problème avec ta macro.

J'ai regardé la mémoire occupée par Excel pendant l'exécution: aucune variation, elle reste au même niveau.

Cordialement.

Bonjour,

idem, sur 2010 je ne pourrais pas tester grand chose.

Par contre je te suggère de rechercher sur google 'garbage excel 2016', si on exclue la possibilité que tu aies bu d'autres ont dû rencontrer déjà ce pb.

Tu vas avoir des pages en anglais mais désolé, je ne sais pas comment traduire en français cette opération (garbage collection = ramasser les poubelles...)

Autre idée, enregistrer le fichier après chaque fermeture, des fois qu'il se dise qu'il a le temps de sortir les poubelles.

Et une 3ème qui me plait bien : ouvrir tes fichiers dans une 2nde instance d'excel.

eric

edit : et une 4e qui me vient : recherche comment lire des données dans un classeur fermé, en plus tu gagneras sans doute du temps.

Eric se déchaîne !

Ce qui me chagrine quand même un peu, c'est qu'Excel ne gère pas la mémoire système !

Je dois toujours mettre en service un ordi sous Win 10 et y installer Excel 16, les problèmes soulevés à son propos m'inquiètent un peu !

Bah c'est bien 2016, ça fait travailler l'imagination pour pallier aux bugs.

Ca change du train-train habituel

Ta future romance avec 2016 : ils vécurent heureux et eurent plein de petits bugs .

eric

Comme disait l'autre, je préèrerais laisser les bugs derrière, j'ai passé l'âge...

Bonjour,

J'ai fait le curieux et regardé de mon côté.

Windows 10 + Excel 2016 32 bits.

L'utilisation de la mémoire est constante à 2.7 durant toute la procédure, mais le processeur est bien sollicité (60, 70!...)

Ceci à 5 reprises.

Cdlt.

snip 20180105080102

Bonjour à tous,

Merci pour vos réponses.

Je vais explorer la piste lecture/écriture dans un fichier fermé (en requêtes SQL avec ADO).

J'ai fait un 1er POC et ca me semble bon mais je vais devoir réécrire une bonne partie de ma macro

@Jean-Eric : je ne pense pas que la variation de mémoire soit bien visible en regardant le taux d'utilisation globale de la mémoire.

Là ou j'observais l'utilisation croissante, c'est en observant l'utilisation de la mémoire du processus Excel en lui-même.

Ça démarre à quelques 10aines de Mo et ça monte à quelques centaines, ca n'a donc pas beaucoup d'impact quand c'est mesuré en Go (graphe de l'utilisation globale).

J'ai fait une corrélation (à tort ?) entre l'utilisation croissante de mémoire et le plantage car c'est l'explication naturelle qui m'est venue à l'esprit. Je vois bien que ma macro ralentit au fur et à mesure que l'utilisation de mémoire grandit.

Hello,

Un petit retour.

J'ai donc réécrit ma macro en utilisant la lecture et l'écriture dans des fichiers fermés.

Et c'est magique ! Plus de soucis de plantage et en prime un temps de traitement passant d'1H à 5min !!!!!

Magique !

Merci Eriiic

Bonjour,

j'ai édité mon post et barré : tu gagneras sans doute du temps

x20 c'est pas mal...

eric

Rechercher des sujets similaires à "macro probleme utilisation memoire croissante 2016"