Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

memoire insuffisante pendant l'execution d'une macro RESOLU

miremy

XLDnaute Nouveau
Bonjour à tous
voilà, j'ai un souci
j'ai une macro qui boucle sur plusieurs onglets .
tous les 8 à 10 onglets environ , j'ai un message "mémoire insuffisante". Là je fait debogage j'enregitre, puis executer et çà repart pour 10 onglet avant de recommencer.
Voici ma question: y a t'il moyen de faire un enregistrement toutes les 10 feuilles pendant la boucle ? Car si j'enregistre à chaque passage cela rallonge le temps d'execution.Certains classeurs pesent 30 Mo.et contiennent plus de 200 onglets
Si quelqu'un a une solution je suis preneur.
Merci
Miremy
 
Dernière édition:

néné06

XLDnaute Accro
Re : memoire insuffisante pendant l'execution d'une macro

Bonjour miremy,

Te serait il possible de nous faire parvenir ta macro pour voir si des modifications sont possibles ?

A+

René
 
Dernière édition:

miremy

XLDnaute Nouveau
Re : memoire insuffisante pendant l'execution d'une macro

Bonjour
Je suis sur Excel 2000
Je t'envoie un fichier ou j'ai recopie les macros
La macro est en colonne A
Je L'ai decomposee sur les autres colonnes

En fait c'est la macro "Sub SupMaj()" au niveau " P = tablo " qui pose problème.
 

Pièces jointes

  • tricv.xls
    200 KB · Affichages: 59
Dernière édition:

néné06

XLDnaute Accro
Re : memoire insuffisante pendant l'execution d'une macro

Bonsoir miremy,


Set P = Range("C1" & Cells(Rows.Count, "C").Row) '* As tu vérifié le nombre de données, chargées en mémoire. (Rows.Count)=65536

tablo = P 'matrice, plus rapide

P = tablo '*****ICI LE PLANTAGE********La mémoire peut être pleine si 65536
For I = 1 To UBound(tablo)' Pendant l'exécution, placer un point arrêt et vérifier, en pas à pas, la valeur de UBound.


A+

René
 

néné06

XLDnaute Accro
Re : memoire insuffisante pendant l'execution d'une macro

Bonjour,

Essayes cette instruction:

Set P = Range("C1 : D " & Cells.Find("*", , , , , xlPrevious).Row)
au lieu de
Set P = Range("C1 : D " & Cells(Rows.Count, "C").Row)

Avec ce changement, le tableau "P" ne prendra que les écritures et non les cases vides dans les cellules de C1 à D65536.

Testes et dis moi!

A+

René
 
Dernière édition:

miremy

XLDnaute Nouveau
Re : memoire insuffisante pendant l'execution d'une macro

bonjour
Il vaut mieux que je te joigne un fichier que j'ai reduit.
Quand le message "mémoire insuffisante " apparait fais:
_ debogage
_enregistre le fichier
_execution continuer

comme çà la macro se termine ;Mais quand on a des classeurs de 2 ou 300 feuilles c'est fastidieux.

Il me faudrait trouver un moyen d'enregistrer le classeur périodiquement avant l'apparition du message

ci-joint:
 

Pièces jointes

  • test.xls
    201.5 KB · Affichages: 60
  • test.xls
    201.5 KB · Affichages: 60

néné06

XLDnaute Accro
Re : memoire insuffisante pendant l'execution d'une macro

Re,

J'ai essayé avec le changement proposé en #6 et sans le changement, chez moi, les programme ne plantent pas !
Peut être dû au fait que j'ai 8GO de mémoire ?

A+

René
 

st007

XLDnaute Barbatruc
Re : memoire insuffisante pendant l'execution d'une macro

Bonjour,
excusez mon intrusion et ma curiosité,
pourquoi ne pas considérer :
Code:
 Set P = Range("C1:D" & Cells(Rows.Count, "C").End(xlUp).Row)
pour éviter les 65 M lignes
 

néné06

XLDnaute Accro
Re : memoire insuffisante pendant l'execution d'une macro

Bonjours, Salut st007


@st007
Tu as raison, c'est pour cela que j'ai proposé:

Set P = Range("C1 : D " & Cells.Find("*", , , , , xlPrevious).Row), qui prend le numéro de la la dernière ligne ecrite dans une feuille.

Avec ta formule, cela est caïman la même chose !
Sur le nouveau programme posté, j'ai rajouté au début et à la fin:
Application.ScreenUpdating=..... afin d'accélérer la vitesse.

A+

René
 

Pièces jointes

  • test.xls
    201.5 KB · Affichages: 51
  • test.xls
    201.5 KB · Affichages: 55

st007

XLDnaute Barbatruc
Re : memoire insuffisante pendant l'execution d'une macro

re,

Ce programme ne plantant pas chez moi, ... non plus
je pensais contraindre un copy d'une cellule vide pour purger le presse papier entre chaque traitement d'onglets.

@ voir ...
 

st007

XLDnaute Barbatruc
Re : memoire insuffisante pendant l'execution d'une macro

re,
Avec mes 1.7 Go de RAM sous XP et excel 2007, 0.97 sec toujours sans soucis de mémoire...

@ lire le demandeur
 

Pièces jointes

  • test.xls
    212.5 KB · Affichages: 56
  • test.xls
    212.5 KB · Affichages: 53

miremy

XLDnaute Nouveau
Re : memoire insuffisante pendant l'execution d'une macro

En mettant :
Set P = Range("C1" & Cells(Rows.Count, "C").End(xlUp).Row)
Au lieu de :
Set P = Range("C1" & Cells(Rows.Count, "C").Row)
Cela fonctionne impeccable
Merci à vous pour vous etre penches sur mon probleme.
Miremy
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…