memoire insuffisante pendant l'execution d'une macro RESOLU

miremy

XLDnaute Nouveau
Bonjour à tous :eek:
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:

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:D" & 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

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,
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:D" & Cells(Rows.Count, "C").End(xlUp).Row)
Au lieu de :
Set P = Range("C1:D" & Cells(Rows.Count, "C").Row)
Cela fonctionne impeccable
Merci à vous pour vous etre penches sur mon probleme.
Miremy
 

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 145
dernier inscrit
lea.