OVH Cloud OVH Cloud

Identification d'une feuille d'un classeur

14 réponses
Avatar
Horace Rochat
Bonjour,
Comment puis-je dans une macro quelconque d=E9terminer=20
1- Au d=E9but, la feuille dans laquelle je me trouve=20
au lancement de la macro
2- =C0 la fin de l'ex=E9cution de la macro me retrouver=20
dans ladite feuille? =20

Autrement dit, que dois-je =E9crire, au d=E9but et =E0 la fin=20
de la macro? Je ne connais pas la syntaxe mais ce serait=20
du style :
1- identifie la feuille dans laquelle tu te trouves
----- ex=E9cution de la macro--------------
2- va dans la feuille dans laquelle tu te trouvais=20
avant l'ex=E9cution de la macro

Merci,
Horace

10 réponses

1 2
Avatar
isabelle
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


Avatar
ChrisV
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




Avatar
isabelle
ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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






Avatar
Horace Rochat
Bonjour,
Alors, conclusion, je fais quoi?
Je vous joins les deux macros dans lesquelles je souhaite
inclure cet ajout, qui permettent l'une de masquer les
colonnes et rangées inutilisées, l'autre de les afficher.
Où faut-il insérer ces ajouts?
Merci,
Horace
-------------------------------------------
Sub HideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
'MsgBox x
ws.Rows(x & ":65536").Hidden = True
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'MsgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden =
True
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
--------------------------------
Sub UnhideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
Rows.Hidden = False
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden =
False
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub

Merci,
Horace


-----Message d'origine-----
ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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
.









Avatar
Jean-François Aubert
Salut Horace,

tu colles:
set début = ActiveSheet
juste dessous les lignes Sub HideUnused() et UnhideUnused()

et

début.select
set début = Nothing
juste dessus les End Sub

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Horace Rochat" a écrit dans le message de
news:03ae01c3d5d3$236d5790$
Bonjour,
Alors, conclusion, je fais quoi?
Je vous joins les deux macros dans lesquelles je souhaite
inclure cet ajout, qui permettent l'une de masquer les
colonnes et rangées inutilisées, l'autre de les afficher.
Où faut-il insérer ces ajouts?
Merci,
Horace
-------------------------------------------
Sub HideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
'MsgBox x
ws.Rows(x & ":65536").Hidden = True
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'MsgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden True
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
--------------------------------
Sub UnhideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
Rows.Hidden = False
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden False
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub

Merci,
Horace


-----Message d'origine-----
ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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
.









Avatar
michel
Bonjour Isabelle
C'est tout à fait normal. La mauvaise habitude de ne jamais declarer les
variables fait oublie leur duree de vie. Dans Macro2 x est effacer mais
c'est une variable objet et la resource memoire n'est pas liberée d'ou
l'obligation du set x =nothing
HTH
Michel
"isabelle" a écrit dans le message de news:

ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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








Avatar
isabelle
bien chef, si j'ai bien compris l'adresse mémoire alloué à cette
variable perdure tant que set x =nothing n'a pas été exécuter, ou bien
qu'excel n'a pas été fermé.

isabelle


Bonjour Isabelle
C'est tout à fait normal. La mauvaise habitude de ne jamais declarer les
variables fait oublie leur duree de vie. Dans Macro2 x est effacer mais
c'est une variable objet et la resource memoire n'est pas liberée d'ou
l'obligation du set x =nothing
HTH
Michel
"isabelle" a écrit dans le message de news:

ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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










Avatar
ChrisV
;-P


ChrisV ;-*


"isabelle" a écrit dans le message de news:

bien chef, si j'ai bien compris l'adresse mémoire alloué à cette
variable perdure tant que set x =nothing n'a pas été exécuter, ou bien
qu'excel n'a pas été fermé.

isabelle


Bonjour Isabelle
C'est tout à fait normal. La mauvaise habitude de ne jamais declarer les
variables fait oublie leur duree de vie. Dans Macro2 x est effacer mais
c'est une variable objet et la resource memoire n'est pas liberée d'ou
l'obligation du set x =nothing
HTH
Michel




Avatar
Frédéric Sigonneau
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








Avatar
Cl
Merci à vous,
Horace Rochat

"Jean-François Aubert" <à a écrit dans le message de
news:
Salut Horace,

tu colles:
set début = ActiveSheet
juste dessous les lignes Sub HideUnused() et UnhideUnused()

et

début.select
set début = Nothing
juste dessus les End Sub

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Horace Rochat" a écrit dans le
message de

news:03ae01c3d5d3$236d5790$
Bonjour,
Alors, conclusion, je fais quoi?
Je vous joins les deux macros dans lesquelles je souhaite
inclure cet ajout, qui permettent l'une de masquer les
colonnes et rangées inutilisées, l'autre de les afficher.
Où faut-il insérer ces ajouts?
Merci,
Horace
-------------------------------------------
Sub HideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
'MsgBox x
ws.Rows(x & ":65536").Hidden = True
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'MsgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden > True
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
--------------------------------
Sub UnhideUnused()
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
Rows.Hidden = False
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden > False
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub

Merci,
Horace


-----Message d'origine-----
ha mais voila ti pas un slimblick,
si on fait le test suivant :

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

ou en est le pointage ;-)
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
.













1 2