"Out of Memory" avec Excel 2016 64-bit [Résolu]

A voir également:"out of memory" avec excel 2016 64-bitOut of memory error in 0 ✓ - Forum - Matériel informatique Out of memory ✓ - Forum - Matériel informatique Morefunc excel 2010 64 bit - Télécharger - Tableur Télécharger visio 2016 64 bits gratuit - Télécharger - Gestion de données Cmdl cache out of memory ✓ - Forum - Jeux en ligne

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://support.microsoft.com/en-gb/help/3066990/memory-usage-in-the-32-bit-edition-of-excel-2013-and-2016)
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

Forum

A voir également:"out of memory" avec excel 2016 64-bitOut of memory error in 0 ✓ - Forum - Matériel informatique Out of memory ✓ - Forum - Matériel informatique Morefunc excel 2010 64 bit - Télécharger - Tableur Télécharger visio 2016 64 bits gratuit - Télécharger - Gestion de données Cmdl cache out of memory ✓ - Forum - Jeux en ligne

Web: www.shapebootstrap.net

3 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.

J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"

Reply
réponses:
  • auteur

    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

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Si tu ne fait que du traitement de données, au lieu de toutes les stocker, utilises un Flux (ADODB )

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bon j'ai fait quelques tests avec différentes dimensions et type d'Array.

La conclusion à laquelle j'arrive est que je suis limité à 4GB par Array sur Excel 2016 en 64 bits (ce qui est confirmé par www.decisionmodels.com/memlimitsc.htm). Cela dit je peux créer autant d'Array que je veux tant que la somme totale de leur mémoire allouée n'excède pas la mémoire RAM disponible.

J'ai donc effectué des changements sur mes Array à problèmes:
1) Changer leur type en Single (4 Bytes) pour prendre 6 fois moins de mémoire que le Variant (24 Bytes).
2) Fragmenter ces Array en plusieurs Array en rassemblant les valeurs par en fonction de leur type pour gagner de la mémoire.

Je trouve tout de même dommage d'imposer ces limitations de nos jours.

Merci à vous pour vos réponses, je prends note de vos conseils et je vais me mettre à la base de données pour ne plus avoir ce problème sur le long terme.

Sam

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed