"Out of Memory" avec Excel 2016 64-bit

Résolu/Fermé
SamSpartan93 Messages postés 4 Date d'inscription samedi 22 mars 2014 Statut Membre Dernière intervention 15 juillet 2019 - Modifié le 14 juil. 2019 à 13:28
SamSpartan93 Messages postés 4 Date d'inscription samedi 22 mars 2014 Statut Membre Dernière intervention 15 juillet 2019 - 15 juil. 2019 à 22:56
Bonjour tout le monde,

Je développe un code vba sur Excel qui 1) stocke virtuellement des données de fichiers texte et 2) effectue des opérations pour de l'analyse de données.
J'obtiens une "Run-Time Error 7: Out of Memory" au moment de redimensionner une Variant Array à
(1 To 1, 1 To 87, 1 To 4000, 1 To 37, 1 to 14)
.

Je pensais pourtant qu'en utilisant la version 64 bit d'Excel 2016 je ne serais limité que par la RAM (jusqu'à 8TB selon: https://docs.microsoft.com/en-gb/office/troubleshoot/excel/memory-usage-32-bit-edition-of-excel)
Or mon utilisation de RAM n'atteint que 11GB/128GB à son pique.

Je précise que j'utilise l’environnement Windows Server 2012 R2 64 bits

J'ai cherché une explication sur des forums sans succès. Y a t'il des limitations sur Excel 2016 64 bit que j'ignore? Existe t'il une solution à ce problème de mémoire?

Merci d'avance!
Sam

3 réponses

NHenry Messages postés 15173 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 21 décembre 2024 350
Modifié le 14 juil. 2019 à 14:10
En calculant rapidement, cela fait
180'264'000 éléments
Un variant c'est 16 octets (sans compter la taille de la donnée (si String par exemple, ajoutes la taille de la chaine + 22 octets pour les chaines) ) donc cela fait :
2'884'224'000 octets
A mon avis tu emplafonnes largement la limite de 2Go des limites du VBA (32 bits).
Si déjà tu typais correctement tes données, tu pourrait limiter la taille en mémoire.
Ensuite, regardes les structures (Type en VBx) pour avoir des données structurées. (De plus les tableaux multi dimensionnels sont vivement déconseillés dès que tu dépasse 2 dimensions)

Et comme on ne le rappel jamais assez, VBA ne sert pas à faire des traitements complexes, c'est un détournement de fonctionnalité.
Dans ton cas, si tu dois manipuler autant de données, il faut peut être revoir la technologie utilisée, une BDD ou/et un langage plus moderne est peut être à préférer.

0
SamSpartan93 Messages postés 4 Date d'inscription samedi 22 mars 2014 Statut Membre Dernière intervention 15 juillet 2019
Modifié le 14 juil. 2019 à 14:33
Merci pour ta réponse NHenry.

1) Je suis d'accord pour le typage des données. Il se trouve que les données que j'exploite sont de types différents et que les gérer avec des Variant Array est beaucoup plus pratique.

2) Je précise de nouveau que j'utilise la version 64 bit d'Excel, et donc je ne m'attends pas à avoir les limitations des versions 32 bit.

3) Effectivement je vais voir à adapter mon code pour qu'il stocke les données sur une BDD plutôt que virtuellement. Cela dit mon code est plutôt long et j'ai besoin à court terme de l'analyse qu'il est sensé effectuer. Solutionner l'erreur de limitation en mémoire est vraiment la priorité pour moi en ce moment.

Sam
0