Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
Bonsoir Isabelle,
Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" <as.isabellevIE@videotron.ca> a écrit dans le message de news:
3FFCBAC2.2E81375C@videotron.ca...
bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
Je ne suis pas tout à fait d'accord :
Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Je ne suis pas tout à fait d'accord :
Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2
Bonsoir Isabelle,
Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" <as.isabellevIE@videotron.ca> a écrit dans le message de news:
3FFCBAC2.2E81375C@videotron.ca...
bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Je ne suis pas tout à fait d'accord :
Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Michel,Je ne suis pas tout à fait d'accord :
(snip)Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
Tout à fait d'accord. Il s'agit bien d'un problème de portée et la variable x de
Macro1 ne peut en aucun cas être connue de Macro2, même si Macro2 est appelée
par Macro1 !
Cela serait différent si Macro2 acceptait un paramètre et que cette procédure
soit appelée avec x passée en paramètre, mais, telle que, Macro2 n'a aucun moyen
de 'connaître' x ...C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Tout à fait d'accord de nouveau mais j'ai laissé cet aspect de côté car je
voulais plutôt intervenir sur cette question : l'affectation de Nothing à une
variable objet en fin de macro par une instruction
Set xxx=Nothing
est-elle obligatoire ou non pour libérer les ressources ?
Les arguments que j'ai développés tendent à démontrer que la réponse est non. Si
la libération des ressources n'est pas programmée explicitement, End Sub le fait
implicitement.
Ton message ne cherchant pas à démontrer le contraire, je ne vois pas bien où
nous serions en désaccord...
:)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Michel,
Je ne suis pas tout à fait d'accord :
(snip)
Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
Tout à fait d'accord. Il s'agit bien d'un problème de portée et la variable x de
Macro1 ne peut en aucun cas être connue de Macro2, même si Macro2 est appelée
par Macro1 !
Cela serait différent si Macro2 acceptait un paramètre et que cette procédure
soit appelée avec x passée en paramètre, mais, telle que, Macro2 n'a aucun moyen
de 'connaître' x ...
C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Tout à fait d'accord de nouveau mais j'ai laissé cet aspect de côté car je
voulais plutôt intervenir sur cette question : l'affectation de Nothing à une
variable objet en fin de macro par une instruction
Set xxx=Nothing
est-elle obligatoire ou non pour libérer les ressources ?
Les arguments que j'ai développés tendent à démontrer que la réponse est non. Si
la libération des ressources n'est pas programmée explicitement, End Sub le fait
implicitement.
Ton message ne cherchant pas à démontrer le contraire, je ne vois pas bien où
nous serions en désaccord...
:)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2
Bonsoir Isabelle,
Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" <as.isabellevIE@videotron.ca> a écrit dans le message de news:
3FFCBAC2.2E81375C@videotron.ca...
bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Michel,Je ne suis pas tout à fait d'accord :
(snip)Il s'agit tout bêtement d'un problème de portée : un premier x, créé automa-
tiquement a une portée limitée à la procédure "Macro1".
Le "x" de la seconde procédure est également une variable locale, créée à la
volée, mais dont la portée correspond à la seconde procédure ("Macro2").
Il s'agit donc de 2 variables distinctes, qui portent le même nom, mais cela
n'a jamais été un moyen de récupérer dans la variable x de la "Macro2" la
valeur de la variable homonyme définie dans la "Macro1".
Tout à fait d'accord. Il s'agit bien d'un problème de portée et la variable x de
Macro1 ne peut en aucun cas être connue de Macro2, même si Macro2 est appelée
par Macro1 !
Cela serait différent si Macro2 acceptait un paramètre et que cette procédure
soit appelée avec x passée en paramètre, mais, telle que, Macro2 n'a aucun moyen
de 'connaître' x ...C'est le fait qu'il s'agit de 2 variables distinctes qui provoque le message
"Objet requis", car la variable x de la seconde procédure n'a pas été initia-
lisée. Cela n'a rien à voir avec le statut et/ou la valeur de la variable x de la
première procédure.
Tout à fait d'accord de nouveau mais j'ai laissé cet aspect de côté car je
voulais plutôt intervenir sur cette question : l'affectation de Nothing à une
variable objet en fin de macro par une instruction
Set xxx=Nothing
est-elle obligatoire ou non pour libérer les ressources ?
Les arguments que j'ai développés tendent à démontrer que la réponse est non. Si
la libération des ressources n'est pas programmée explicitement, End Sub le fait
implicitement.
Ton message ne cherchant pas à démontrer le contraire, je ne vois pas bien où
nous serions en désaccord...
:)
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !Par ailleurs, le fait en fin de traitement de libérer de la mémoire avec
set c = Nothing ne me semble pas avoir beaucoup d'importance en pratique.
C'est plus orthodoxe d le faire, mais compte tenu de la mémoire des machines
actuelles, rarement moins de 128 Mo, en général beaucoup plus, je pense qu'il
faut qu'un programme utilise de nombreuses variables objets pour que l'inci-
dence soit perceptible, sauf dans des cas très particuliers : tableaux de grandes
dimension ou chaines de caractères particulièrement lourdes.
Bonne année à vous 2Bonsoir Isabelle,Sub Macro1()
Sheets("Feuil1").Select
Set x = ActiveSheet
Sheets("Feuil2").Select
End Sub
Sub Macro2()
x.Select
End Sub
sur la macro2 on obtient le message : objet requis
j'en conclus qu'excel remet automatiquement à nothing en fin de macro, à
moin d'avoir déclaré Public x dans le module
Et je pense que tu as, globalement, raison. Si j'en crois l'aide sur le mot clé
Nothing, il peut être, pour libérer 'les ressources mémoire et système' (pour
citer l'aide, justement), affecté explicitement à une variable objet (par
l'instruction Set xxx=Nothing) ou implicitement lorsque la variable objet xxx
devient 'hors de portée', cad lorsqu'elle sort des limites de la portée de sa
déclaration.
Dans ta Macro1, la variable x n'est pas déclarée, ce qui fait que VBA lui
attribue par défaut une portée locale, limitée à la procédure Macro1. Du coup,
l'instruction End Sub de Macro1 entraîne une affectation implicite de Nothing à
la variable x et les ressources sont automatiquement libérées à la fin de cette
procédure.
Pour toutes les variables objet dont la déclaration est limitée à une procédure,
ou celles qui sont uniques pour faire référence à un objet, l'affectation
explicite de Nothing pour libérer les ressources mémoire n'est donc, AMHA,
absolument pas obligatoire dans la mesure où l'instruction End Sub (ou End
Function) de la dernière procédure qui les utilise s'en charge de toute façon
automatiquement. Il n'y a que dans les cas, exceptionnels à mon sens, où
plusieurs variables différentes font référence au même objet que l'affectation
explicite de Nothing est obligatoire.
Libérer systématiquement les ressources affectées aux variables objet en leur
affectant explicitement Nothing n'est pas inutile non plus (ce qui est fait là
par le programmeur n'est plus à faire en automatique) mais, comme les ressources
seront de toute façon libérées, ne pas le faire n'a pas la moindre influence sur
un éventuel manque de mémoire ou de ressources pour Excel :)
Mes deux centimes d'euro..
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !isabelle
Et ne pas oublier, si aucune autre variable ne le désigne, de libèrer
l'ensemble des ressources système et mémoire associées à l'objet
anciennement référencé avec:
set début = Nothing
et vlan... 1 partout ! ;-))
ChrisV
"isabelle" a écrit dans le message de news:bonjour Horace,
en créant un objet :
set début = ActiveSheet
macro...
début.select
isabelle
Bonjour,
Comment puis-je dans une macro quelconque déterminer
1- Au début, la feuille dans laquelle je me trouve
au lancement de la macro
2- À la fin de l'exécution de la macro me retrouver
dans ladite feuille?
Autrement dit, que dois-je écrire, au début et à la fin
de la macro? Je ne connais pas la syntaxe mais ce serait
du style :
1- identifie la feuille dans laquelle tu te trouves
----- exécution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais
avant l'exécution de la macro
Merci,
Horace
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
merci ! à vous deux pour ces explications, et donc le passage à End Sub
remet bien la variable de la portée de la déclaration (ici dans macro1)
à nothing.
isabelle
ps ChrisV c'est toujours 1-0 ;-)
merci ! à vous deux pour ces explications, et donc le passage à End Sub
remet bien la variable de la portée de la déclaration (ici dans macro1)
à nothing.
isabelle
ps ChrisV c'est toujours 1-0 ;-)
merci ! à vous deux pour ces explications, et donc le passage à End Sub
remet bien la variable de la portée de la déclaration (ici dans macro1)
à nothing.
isabelle
ps ChrisV c'est toujours 1-0 ;-)