probleme de mémoire

E

Elicend

Guest
Salut a tous et bonne annee car il est encore temps

je viens vous presenter un probleme qui se pose sur excel
en fait j'ai dans une application le besoin suivant :

je copie une page du classeur je la colle dans le classeur j'effectue des op sur la copie de la feuille puis je supprime la copie, cette methode me permet donc de faire des operations a partir d'une feuille vierge en gros et de detruire pour ne pas surcharger un fichier deja plein une page temporaire...

le soucis vient du fait que j'ai beaucoup de fois consécutive cette opération a faire, et il y a une memoire du type presse papier qui se remplie et que je n'arrive pas a vider... du coup suivant les capacite du pc... au bout de 200 a 500 fois cette operation effectuee, la macro bloque sur l'opération de copie de la page :(

quelqu'un aurait il une idee pour vider ce type de truc et faire cette opération a l'infini?
j'ai fait un petit fichier qui simule les op et se bloque bien... une version attachée a ce post (avec des progress bar qui ne passe pas chez tout le monde... n'est ce pas thierry lol) et une que je colle au post en réponse a celui ci sans les progressbar!

Merci d'avance
Elicend
 

Pièces jointes

  • pourforum.zip
    38.4 KB · Affichages: 27
  • pourforum.zip
    38.4 KB · Affichages: 29
  • pourforum.zip
    38.4 KB · Affichages: 27
T

Ti

Guest
euh, j'avais regardé vite fait au boulot, et chez moi il n'y avait rien qui se passait, ça marchait bien. Je m'étais promis de regarder ça à la maison, mais je t'ai oublié. J'y vais de ce pas... désolé.
 
T

Ti

Guest
bon, effectivement ça plante aussi chez moi, mais de toute façon ce n'est pas une bonne idée de créer une copie que tu détruis immédiatement. J'ai donc contourné le problème, en créant une nouvelle feuille une seule fois, puis dans la boucle, j'y copie le contenu de la feuille2 et je l'efface immédiatement (pour émuler le fonctionnement de ton ancienne macro). Tu verras que ça va déjà beaucoup plus vite (même si ça n'est pas immédiat), et que tu n'es plus limité dans ta boucle. Voici juste la macro que j'ai modifiée (commandbutton1) :

Private Sub CommandButton1_Click()
Dim NbCopies As Long, Cel As Range
Dim Feuille2 As Worksheet, NFeuille As Worksheet

Set Cel = Worksheets("Feuil1").Range("A1")
Set Feuille2 = Worksheets("Feuil2")
Feuille2.Copy after:=Sheets(3)
Set NFeuille = ActiveSheet

Application.ScreenUpdating = False
For NbCopies = 1 To Cel.Value
Feuille2.Cells.Copy NFeuille.Range("A1")
'je ne supprime pas le contenu de la feuille si la boucle est finie,
'pour que tu voies que tout est bien copié
If NbCopies < Cel.Value Then NFeuille.Cells.Delete
'normalement, tu mets juste ça
'NFeuille.Cells.Delete
Next NbCopies

Application.DisplayAlerts = False
'pour détruire la nouvelle feuille à la fin du traitement
'NFeuille.Delete
Application.DisplayAlerts = True

Application.ScreenUpdating = True
End Sub
 
E

Elicend

Guest
Salut!
arf... bon je sais pas comment dire... effectivement ca a l'air plus rapide comme méthode, mais le vrai pb c'est que je ne peux pas trop contourner cette méthode... et qu'en plus j'ai certain cas de figure ou j'ai besoin de 4 voir 5 pages temp copiee puis supprimée en meme temps... donc ma limite est atteinte assez vite... en fait pour le moment, je ne peux faire qu'un calcul, il faut que je ferme puis réouvre le fichier pour en faire un deuxieme... certe c'est un gros calcul, mais...

en fait changer de methode represente 8 modules contenant chacun pas long d'une 20ene de macros toutes plus ou moins liée entre elle et modifier tout ca me parait assez ardu voir... tres osé, alors que lancer une tt petite ligne vidant la pile qui se remplie (oui mais voila !! laquelle lol!) au debut de chaque calcul reglerai le pb...

qu'en pense tu?
 
T

Ti

Guest
ben, en général, il faut partir du principe qu'un programme qui plante est un programme mal écrit (je ne dis pas ça pour toi bien sûr, moi ça m'arrive tout le temps) et alors il faut prendre son courage à 2 mains et se dire que si on n'y arrive pas ainsi, alors il est peut-être bon d'essayer d'une autre manière, quitte à recommencer depuis le début. personnellement, mes programmes connaissent ainsi très souvent 4 ou 5 versions très différentes les unes des autres avant que l'une d'elles me satisfasse.

Ceci dit, je regarderai à nouveau s'il y a moyen de contourner ce problème de pile...
 
T

Ti

Guest
bon, j'ai encore contourné le problème : je crée bien une nouvelle feuille à chaque fois, mais c'est une feuille ajoutée dans laquelle je copie les données de l'autre feuille : fonctionnement équivalent à ta méthode, mais on n'est plus limité par le nombre et ça va incomparablement plus vite.
Regarde si ça répond à ton problème.
 

Pièces jointes

  • pourforumTi.zip
    26.7 KB · Affichages: 22
E

Elicend

Guest
Salut Ti
bon alors, j'ai essaye la methode du copier coller... c'est pas mal...
effectivement ca ne bloque pas :) par contre ma macro passe de 3 lignes a 6 donc fo que j'etudie ca pour comprimer la methode... je vais essayer demain la version en ajoutant une page... je te tiens au courant


Merci beauoup pour ton travail
bonne soiree
Elicend
 

Discussions similaires

Réponses
13
Affichages
400

Statistiques des forums

Discussions
314 019
Messages
2 104 649
Membres
109 092
dernier inscrit
ahm74