Faire tourner des macros plusieurs heures par jour sans bloquage
3 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news: 527401c42cb5$36e75710$a301280a@phx.gbl...
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.
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
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
.
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" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news: 527401c42cb5$36e75710$a301280a@phx.gbl...
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.
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
.
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
.
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.
<anonymous@discussions.microsoft.com> a écrit dans le message de news:
5b3601c42d76$11081630$a501280a@phx.gbl...
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" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news: 527401c42cb5$36e75710$a301280a@phx.gbl...
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.
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.