OVH Cloud OVH Cloud

Faire tourner des macros plusieurs heures par jour sans bloquage

3 réponses
Avatar
Virginie
Bonjour=20
j'ai plusieurs macro qui tournent les unes =E0 la suite des=20
autres plusieurs heures par jours j'ai constat=E9 au bout=20
d'un certain temp que ma machine se bloque quand je ferme=20
excel, impossible de faire quoi que ce soit a moins de=20
red=E9marer bien sur. je supose qu'il doit s'agir de la=20
m=E9moire?.j'aimerais savoir s'il y a un moyen=20
de palier =E0 cet inconv=E9nient.

Merci pour vos conseils avis=E9s

Virginie

3 réponses

Avatar
E KERGRESSE
Salut Virginie,

Une piste parmi d'autres. Si tu initialises des variables avec Set (par
exemple Set Toto = XXXXXX ), est-ce que tu libères espace mémoire chaque
fois que tu le peux avec Set Toto = Nothing ?

A essayer.

Cordialement.

"Virginie" a écrit dans le message de
news: 527401c42cb5$36e75710$
Bonjour
j'ai plusieurs macro qui tournent les unes à la suite des
autres plusieurs heures par jours j'ai constaté au bout
d'un certain temp que ma machine se bloque quand je ferme
excel, impossible de faire quoi que ce soit a moins de
redémarer bien sur. je supose qu'il doit s'agir de la
mémoire?.j'aimerais savoir s'il y a un moyen
de palier à cet inconvénient.

Merci pour vos conseils avisés

Virginie
Avatar
Bonjour Eric

j'ai cette ligne
Set Plage = .Range("I5").Cells(1, i).Resize(.Range
("I65536").Cells(1, i).End(xlUp).Row - 4)
mais il n'y a pas
Set = Nothing
je supose qu'il faut le l'inscrire

mais ou exactement ?

je n'ai pas trop l'habitude

Virginie

-----Message d'origine-----
Salut Virginie,

Une piste parmi d'autres. Si tu initialises des variables
avec Set (par

exemple Set Toto = XXXXXX ), est-ce que tu libères espace
mémoire chaque

fois que tu le peux avec Set Toto = Nothing ?

A essayer.

Cordialement.

"Virginie" a écrit
dans le message de

news: 527401c42cb5$36e75710$
Bonjour
j'ai plusieurs macro qui tournent les unes à la suite des
autres plusieurs heures par jours j'ai constaté au bout
d'un certain temp que ma machine se bloque quand je ferme
excel, impossible de faire quoi que ce soit a moins de
redémarer bien sur. je supose qu'il doit s'agir de la
mémoire?.j'aimerais savoir s'il y a un moyen
de palier à cet inconvénient.

Merci pour vos conseils avisés

Virginie



.



Avatar
E KERGRESSE
Salut Virginie,

Dans le genre truisme, on ne fait pas mieux : dès que tu n'en as plus
besoin. Set te réserve une place et la taille qu'il faut dans la mémoire.
Chaque fois que tu initialises tes variables avec Set, ton programme va
chercher l'emplacement sur la mémoire en fonction de la taille dont il a
besoin et de la mémoire disponible sur l'ordinateur à l'instant T. A force
d'itérations, la mémoire risque d'être complètement "mitée" et à l'extrême
d'être complètement saturée si les espaces ainsi réservés ne sont pas
libérés. C'est peut-être ce qui se passe dans ton programme.

Par ailleurs, si tu ne définis qu'une seule variable avec Set, le problème
ne devrait pas se poser car il n'y a aucune possibilité d'empilement
d'espaces réservés.

Pour régler ce problème, il te faut éliminer cet espace réservé avec la
commande Set XXX = Nothing. Donc pour répondre à ta question, il faut placer
cette ligne au moment où tu n'as plus besoin momentanément de ta variable
Plage.

Il faut donc regarder à quel moment dans ton programme, tu relances

Set Plage = .Range("I5").Cells(1, i).Resize(.Range
("I65536").Cells(1, i).End(xlUp).Row - 4)

et vérifier qu'il n'y a pas d'autres Set entre deux réinitialisations de la
variable Plage, car c'est là que tu peux commencer à avoir un empilement
dans ta mémoire.

Pour la lisibilité de ton programme, je pense qu'il faut mettre Set Plage Nothing à la fin de la procédure où tu l'as déclarée. Il faut alors
peut-être changer l'emplacement de ta déclaration de manière à avoir :

Sub Bidule()

Set Plage = xxxxx

Call Machin ' Avec Set Truc = zzzz et Set Truc = Nothing dans la
procédure Machin

Set Toto = yyyyyyy

Set Toto = Nothing

Set Plage = Nothing

End Sub

et non pas :

Sub Bidule()

Set Plage = xxxxxxx

Call Machin ' Avec Set Truc = zzzz et sans Set Truc = Nothing dans
la procédure Machin

Set Toto = yyyyyy

Set Plage = Nothing

Set Toto = Nothing

End Sub


J'espère avoir été suffisamment clair.

Cordialement.

a écrit dans le message de news:
5b3601c42d76$11081630$
Bonjour Eric

j'ai cette ligne
Set Plage = .Range("I5").Cells(1, i).Resize(.Range
("I65536").Cells(1, i).End(xlUp).Row - 4)
mais il n'y a pas
Set = Nothing
je supose qu'il faut le l'inscrire

mais ou exactement ?

je n'ai pas trop l'habitude

Virginie

-----Message d'origine-----
Salut Virginie,

Une piste parmi d'autres. Si tu initialises des variables
avec Set (par

exemple Set Toto = XXXXXX ), est-ce que tu libères espace
mémoire chaque

fois que tu le peux avec Set Toto = Nothing ?

A essayer.

Cordialement.

"Virginie" a écrit
dans le message de

news: 527401c42cb5$36e75710$
Bonjour
j'ai plusieurs macro qui tournent les unes à la suite des
autres plusieurs heures par jours j'ai constaté au bout
d'un certain temp que ma machine se bloque quand je ferme
excel, impossible de faire quoi que ce soit a moins de
redémarer bien sur. je supose qu'il doit s'agir de la
mémoire?.j'aimerais savoir s'il y a un moyen
de palier à cet inconvénient.

Merci pour vos conseils avisés

Virginie



.