Memoire insuffisante

Signaler
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour
j'ai un pc 6 gigaoctets de mémoire
je programme en vba excel
je crée des variables tableau avec redim preserve en augmentant la taille en fonction des besoins par 100 megaoctets
(grands tableaux)
lorsque la somme de mes variables atteint environ 900 megaoctets.... j'ai une erreur 7 (mémoire insuffisante)
exemple pour mieux expliquer:



sub un
Dim rien1() As Double

Dim rien2() As Double

Dim rien3() As Double

Dim rien4() As Double

Dim rien5() As Double

Dim rien6() As Double


On Error GoTo LErreur
l = 2000000
c = 10
ReDim rien1(l, c)
ReDim rien2(l, c)
ReDim rien3(l, c)
ReDim rien4(l, c)
ReDim rien5(l, c)
ReDim rien6(l, c)

rienl = rienl
For rienl = 1 To l
For rienc = 1 To c
rien1(rienl, rienc) = rienc + 1000 * rienl
rien2(rienl, rienc) = rienc + 1000 * rienl
rien3(rienl, rienc) = rienc + 1000 * rienl
rien4(rienl, rienc) = rienc + 1000 * rienl
rien5(rienl, rienc) = rienc + 1000 * rienl
rien6(rienl, rienc) = rienc + 1000 * rienl
Next rienc
Next rienl

Exit Sub
LErreur:
rienl = rienl
Resume Next
End Sub


si on donne à l la valeur 1900000 il y a erreur 7
si on donne à l la valeur 1800000 : pas d'erreur.
10*1900000*8*6= 912000000 = 912 millions

c * l * 8octets (pour 1 Double)* 6 tableaux= environ 912 méga octets libres.
donne mémoire insuffisante, alors qu'il reste encore plus de 3 giga octets libres.

dans une fenetre microsoft visual basic:
"erreur d'exécution 7 : mémoire insuffisante

et dans
Présentation de l'analyseur de performance :
mémoire :
défaut de cache 0.000
mégaoctets disponibles : 3328,000
pourcentages d'octets dédiés utilisés :24,867

je n'ai aucun tableau dépassant 2 giga octets
je ne comprends pas pourquoi cette erreur
et surtout comment y remedier.

j'ai lu : https://support.microsoft.com/en-us/kb/978610/fr

j'ai :Windows 7 édition familiale premium
service pack 1
dans système:
indice de performance Windows :5.8
processeur i7
Mémoire installée 'RAM) : 6.00 Go
(l'utilisable n'est pas indiquée, c'est pour cela que j'ai utilisé l'Analyseur de performance :)
type de Système: Système d'exploitation 64 bits
(et donc la limite est de 16 Go pour Windows 7 édition familiale premium, d'après l'article)

Présentation de l'analyseur de performance :

mémoire :
mégaoctets disponibles : 3328,000 (3,3 Go) au moment du plantage, mais 4.3 Go environ au début du programme
(ce qui correspond bien AU 0.9 Go )

mon vrai programme fonctionne parfaitement, mon seul probleme est ce probleme de mémoire!!!

mon vrai programme utilise des dictionnaires donc obligatoirement en memoire virtuel
utilisés pour éviter les doublons et recherche ultra rapide.
des tableaux sur disque sont bien trop lents (meme en RAM qui de toute façon pose le meme probleme)
un fichier random est bien trop lent (j'ai essayé) , même une recherche dans un tableau en ram (qui de toute façon pose le même problème de ram) est trop lent..., seul les dictionnaires sont assez rapide.
je pourrais couper les dictionnaires en bouts que je mettrai sur disque (par sauvegarde de 2 fichiers, 1 pour les Keys,1 pour les Items) mais cela pose un problème de rapidité pour éliminer les doublons présents dans les différents bouts de dictionnaires, et de rapidité de recherche, alors que avec 1 seul dictionnaire en mémoire c'est par construction du dictionnaire si facilement résolu et d'une vitesse incroyable ....
d'où ma recherche ... désespérée !!

Comme me l'a gentiment conseillé Pijaku, j'ai regardé ce post: http://codes-sources.commentcamarche.net/forum/oldest/10019292-vba-excel-recursivite-jeu-du-boggle?page=2#114
Mais ne suis ps sur que cela réponde à mon besoin
Et je vois mal comment l'adapter.

Ps : cette question fait suite à celle-ci : http://www.commentcamarche.net/forum/affich-32126823-memoire-insuffisante#p32132986

Merci d'avance pour m'éclairer.
Cordialement

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Je m'étais déjà "creusé le cerveau" sur ce sujet alors que tu avais ouvert une discussion sous le pseudo ClaudeDordogne.
En vain avec Excel et son VBA seuls. Excel a ses propres limites de stockage.
Tu peux tenter l'utilisation d'une véritable base de données, mais, même ainsi, il te faudra faire harakiri de l'importation de la totalité des enregistrements dans un recordset. Elle ne sera exploitable qu'à l'aide de requêtes filtrant (et donc en réduisant le nombre) les articles à "importer" dans un jeu d'enregistrement (recordset).
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
13
Bonjour,
Je passe juste pour rebondir sur : Excel a ses propres limites de stockage.
Il s'avère que ce n'est pas adaptable ici car Leraleur dispose de 2007, mais, c'est toujours bon à savoir...
http://blogs.technet.com/b/backstage_2010/archive/2009/07/14/en-direct-de-la-wpc-jour-2-excel-2010-fait-son-show.aspx
Après il est vrai que cela reste Excel et qu'on en connait les limites...
Bon week end à tous.
Messages postés
30140
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2020
338
Bonjour,
des discussions sur ce type de problème existent déjà sur le forum.
Je t'invite à lire celle-ci par exemple : http://codes-sources.commentcamarche.net/forum/affich-10045084-erreur-memoire-insuffisante-non-comprehensible

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Quelle version d'Excel utilises-tu ?
32 ou 64 bits ?
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015

bonjour,
où rechercher l'information 32 ou 64 bits pour excel? windows 7 que j'utilise est 64 bits.
Merci de ta réponse.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Pour la version, sur 2013, je dois aller dans le menu Excel (Fichier), puis Compte.
À droite tu vas dans À propos de Excel et tu vas voir en haut si c'est 32 ou 64 bits

Comme je n'ai pas 2010, je ne sais pas si c'est pareil...(?)
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015

Bonjour Jordane,
http://codes-sources.commentcamarche.net/forum/affich-10045084-erreur-memoire-insuffisante-non-comprehensible
... je la connais, puisque cest moi qui l'ai initiée comme l'a précisé plus haut ucfoutu...
(j'ai changé de pseudo suite à la perte du mot de passe)
j'ai vu : http://blogs.technet.com/b/backstage_2010/archive/2009/07/14/en-direct-de-la-wpc-jour-2-excel-2010-fait-son-show.aspx
proposé par pikaju
cela semble une piste à suivre...
cependant cette limite repoussée de l'utilisation de la mémoire est elle également utilisable en vba? où est ce simplement pour les feuilles de calcul?
si quelqu'un a excel 2010, peut il tester mon petit programme "Sub Un" en augmentant l , pour en connaitre les limites en excel 2010.
bien sur si cela fonctionne ... j'envisage de passer à excel 2010.
cordialement
Claude
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015

bonsoir cs_MPi

pour la version 2007 pas de précision....
Pour la version, sur 2013....donc tu as la version 2013 :)
pourrais tu essayer de faire tourner ma,petite routine (celle d'en haut) en modifiant l pour connaitre les limites dans le cadre de excel 2013
et me préciser ta quantité de mémoire.
merci beaucoup d'avance
Claude "le raleur sympa"
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu es sous 2007, c'est 32 bits.
64 bits commence à la version 2010, il me semble.
Je vais toutefois faire un test demain
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
J'ai finalement testé chez moi sous Windows 7 64 bits, Office 2013 32 bits
Processeur AMD 64 X2 Dual Core 5200+ 2.7 GHz, 4 gig de RAM

La gestion d'erreur empêche de voir lorsque ça plante.
J'ai monté la variable l à 2,000,000 et ça passe sans problème. À 2,100,000 ça ne passe pas ...

MPi²
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015

bonjour cs_MPi
merci de ton essai
10*2000000*8*6=960 Moctets environ
10*2100000*8*6=1 Goctets environ .... donc excel 2013 coince aussi à 1 Go .....
comme tu as 4 go je ne pense pas que se soit insuffisant...
à moins que ce soit les 32 bits qui coince???

quelqu'un a t il le 2010 32 bits ? (on ne sait jamais...., mais cela m'étonnerait) ou un 2010 ou 2013 en 64 bits ....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Je pense effectivement que ça doit coincer au niveau du 32 bits.
Et je ne pense pas me tromper en disant que la RAM, dépassé 2 gigs, selon les versions Office, ne change rien. C'est Excel qui décide le maximum de mémoire avec lequel il travaille.

Sous 2013, il me semble que c'est 2 gigs de RAM et il n'y a plus de swap sur disque dur. Donc, que le PC ait 4, 8 ou 16 gigs de RAM, aucun n'aura pas d'impact.

Il resterait à faire un test sur 64 bits pour voir...
Messages postés
25
Date d'inscription
samedi 4 avril 2015
Statut
Membre
Dernière intervention
24 juin 2015

bonjour,
si quelqu'un a le 64 bits..... merci de son aide :)

ce qui me parait étonnant,c'est la démo excel 2010 avec 100 millions de lignes sur la feuille.... c'est en ram ou sur disque???
amicalement
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
En 64 bits, tu devrais pouvoir utiliser le double de mémoire RAM, soit 4 gigs

Tu peux voir une explication au niveau du PowerPivot ici
https://msdn.microsoft.com/fr-fr/library/gg413462%28v=sql.110%29.aspx
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Attention, toutefois : un programme sous 64 bits consomme plus de ram que sous 32 bits.
Une partie de ce que l'on gagne d'un côté est perdue de l'autre (on ne peut avoir le beurre et l'argent du beurre).
Les entiers et les adresses occupent, en 64 bits, 8 octets au lieu des 4 en 32 bits.