Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SELECT

28 réponses
Avatar
IMER09
Rebonjour

Un bouton sur la feuil1
le code suivant sur le bouton:
Private Sub CommandButton1_Click()
Sheets("Feuil2").Select
Range("A2", Range("A65536").End(xlUp)).Select
End Sub
Ca ne fonctionne pas, j'ai toujours des pb avec les select et les activate,
un mystere pour moi

Remi

Merci

10 réponses

1 2 3
Avatar
Hervé
Bonjour Misange,

parce que c'est comme pascal scal, ça fait double emploi :-)



Mais ne dit on pas Tarascon con ?
;o)))

Hervé.

"Misange" a écrit dans le message de
news:
parce que c'est comme pascal scal, ça fait double emploi :-)
Le problème c'est l'enregistreur de macros. C'est un outil génial pour
apprendre, indispensable pour retrouver la syntaxe de certaines
instructions et la traduction anglaise des fonctions. Mais il génère un
code qui est pour le moins bavard et pas optimal.
Ca parait effectivement "logique" de vouloir sélectionner un truc avant de
l'utiliser. Après tout je ne dis pas couteau coupe, je commence par
prendre mon couteau. Et bien pourtant avec les objets VBA on peut leur
dire directement de faire certains trucs sans avoir besoin de les prendre
en mains. Beaucoup de lignes de l'enregistreur de macros peuvent être
ramenées à une seule.
Cela dit ce n'est pas une "faute" (pis on s'en fout, on n'est plus à
l'école) de sélectionner avant de faire un truc avec un objet, l'important
c'est que ça marche. Ca n'empêche pas un code de fonctionner. Mais ça peut
significativement le ralentir dans certains cas, ça rend aussi le code
plus lourd et moins facile à suivre. Donc autant prendre les bonnes
habitudes.


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Pascal Scal a écrit :
Bonsoir
Pourquoi
- Dans une macro Select est presque toujours inutile
-faut-il encore le répèter!
Tain j'ai un paquet de code à nettoyer moi

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

Bonjour,

Dans une macro Select est presque toujours inutile
faut-il encore le répèter!

Mais on peut qd même le faire

Private Sub CommandButton1_Click()
With Sheets("Feuil2")
.Activate
.Range("A2:A" & .[A65536].End(xlUp).Row).Select
End With
End Sub

'lSteph

IMER09 a écrit :
Rebonjour

Un bouton sur la feuil1
le code suivant sur le bouton:
Private Sub CommandButton1_Click()
Sheets("Feuil2").Select
Range("A2", Range("A65536").End(xlUp)).Select
End Sub
Ca ne fonctionne pas, j'ai toujours des pb avec les select et les
activate, un mystere pour moi

Remi

Merci











Avatar
LSteph
Bonjour,

Excellente explication!

et ce n'est pas toi que j'essayerais de convaincre sur le fond
pourtant on pourrait peut-être laisser une nuance là:

> l'important c'est que ça marche. Ca n'empêche pas un code de
> fonctionner.
...parfois cela peut empêcher réellement le code de fonctionner
notamment avec l'objet Feuille pour lequel certes il serait amha
préférable d'utiliser activate plutôt que select mais c'est pour l'exemple
voir la différence on peut agir sur une feuille même masquée sans être
obligé de la sélectionner en revanche le select cause un plantage :

Sub aaaz()
Feuil2.Visible = xlSheetVeryHidden
Feuil2.Select 'ceci plante
[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
End Sub

Sub aaaznoselect()
'ici ca marche
Feuil2.Visible = xlSheetVeryHidden
Feuil2.[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
Feuil2.Activate
End Sub

...et

>(...pis on s'en fout, on n'est plus à
> l'école)
J'ai probablement oublié de mettre une souriette ici:

>>> faut-il encore le répèter!

...mais j'espère que personne ne prendrait cela au 1er degré...!

;-)

--
lSteph

Misange a écrit :
parce que c'est comme pascal scal, ça fait double emploi :-)
Le problème c'est l'enregistreur de macros. C'est un outil génial pour
apprendre, indispensable pour retrouver la syntaxe de certaines
instructions et la traduction anglaise des fonctions. Mais il génère un
code qui est pour le moins bavard et pas optimal.
Ca parait effectivement "logique" de vouloir sélectionner un truc avant
de l'utiliser. Après tout je ne dis pas couteau coupe, je commence par
prendre mon couteau. Et bien pourtant avec les objets VBA on peut leur
dire directement de faire certains trucs sans avoir besoin de les
prendre en mains. Beaucoup de lignes de l'enregistreur de macros peuvent
être ramenées à une seule.
Cela dit ce n'est pas une "faute" (pis on s'en fout, on n'est plus à
l'école) de sélectionner avant de faire un truc avec un objet,
l'important c'est que ça marche. Ca n'empêche pas un code de
fonctionner. Mais ça peut significativement le ralentir dans certains
cas, ça rend aussi le code plus lourd et moins facile à suivre. Donc
autant prendre les bonnes habitudes.


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Pascal Scal a écrit :
Bonsoir
Pourquoi
- Dans une macro Select est presque toujours inutile
-faut-il encore le répèter!
Tain j'ai un paquet de code à nettoyer moi

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

Bonjour,

Dans une macro Select est presque toujours inutile
faut-il encore le répèter!

Mais on peut qd même le faire

Private Sub CommandButton1_Click()
With Sheets("Feuil2")
.Activate
.Range("A2:A" & .[A65536].End(xlUp).Row).Select
End With
End Sub

'lSteph

IMER09 a écrit :
Rebonjour

Un bouton sur la feuil1
le code suivant sur le bouton:
Private Sub CommandButton1_Click()
Sheets("Feuil2").Select
Range("A2", Range("A65536").End(xlUp)).Select
End Sub
Ca ne fonctionne pas, j'ai toujours des pb avec les select et les
activate, un mystere pour moi

Remi

Merci












Avatar
michdenis
| il serait amha préférable d'utiliser activate plutôt que select

La SEULE différence entre "Select" ou "Activate" que ce soit pour
l'objet "Sheet" ou "Range", La méthode Sélect va placer le focus
sur une seule cellule d'une sélection de cellules, de même si on se
retrouve avec plusieurs feuilles de sélectionner, la méthode Select
place le focus sur une seule Feuille et désélectionne du même coup
les autres feuilles. La méthode active permet de modifier la cellule
active d'une sélection de cellule à l'intérieur de la sélection, c'est le
même phénomène dans le cas d'une sélection multiple de feuille
où on peut déplacer le focus de la feuille active à l'intérieur de
la sélection initiale. Au delà de cette nuance, l'usage des méthodes
Select ou Activate, c'est du pareil au même.


"LSteph" a écrit dans le message de groupe de discussion :

Bonjour,

Excellente explication!

et ce n'est pas toi que j'essayerais de convaincre sur le fond
pourtant on pourrait peut-être laisser une nuance là:

> l'important c'est que ça marche. Ca n'empêche pas un code de
> fonctionner.
...parfois cela peut empêcher réellement le code de fonctionner
notamment avec l'objet Feuille pour lequel certes il serait amha
préférable d'utiliser activate plutôt que select mais c'est pour l'exemple
voir la différence on peut agir sur une feuille même masquée sans être
obligé de la sélectionner en revanche le select cause un plantage :

Sub aaaz()
Feuil2.Visible = xlSheetVeryHidden
Feuil2.Select 'ceci plante
[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
End Sub

Sub aaaznoselect()
'ici ca marche
Feuil2.Visible = xlSheetVeryHidden
Feuil2.[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
Feuil2.Activate
End Sub

...et

>(...pis on s'en fout, on n'est plus à
> l'école)
J'ai probablement oublié de mettre une souriette ici:

>>> faut-il encore le répèter!

...mais j'espère que personne ne prendrait cela au 1er degré...!

;-)

--
lSteph

Misange a écrit :
parce que c'est comme pascal scal, ça fait double emploi :-)
Le problème c'est l'enregistreur de macros. C'est un outil génial pour
apprendre, indispensable pour retrouver la syntaxe de certaines
instructions et la traduction anglaise des fonctions. Mais il génère un
code qui est pour le moins bavard et pas optimal.
Ca parait effectivement "logique" de vouloir sélectionner un truc avant
de l'utiliser. Après tout je ne dis pas couteau coupe, je commence par
prendre mon couteau. Et bien pourtant avec les objets VBA on peut leur
dire directement de faire certains trucs sans avoir besoin de les
prendre en mains. Beaucoup de lignes de l'enregistreur de macros peuvent
être ramenées à une seule.
Cela dit ce n'est pas une "faute" (pis on s'en fout, on n'est plus à
l'école) de sélectionner avant de faire un truc avec un objet,
l'important c'est que ça marche. Ca n'empêche pas un code de
fonctionner. Mais ça peut significativement le ralentir dans certains
cas, ça rend aussi le code plus lourd et moins facile à suivre. Donc
autant prendre les bonnes habitudes.


Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Pascal Scal a écrit :
Bonsoir
Pourquoi
- Dans une macro Select est presque toujours inutile
-faut-il encore le répèter!
Tain j'ai un paquet de code à nettoyer moi

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

Bonjour,

Dans une macro Select est presque toujours inutile
faut-il encore le répèter!

Mais on peut qd même le faire

Private Sub CommandButton1_Click()
With Sheets("Feuil2")
.Activate
.Range("A2:A" & .[A65536].End(xlUp).Row).Select
End With
End Sub

'lSteph

IMER09 a écrit :
Rebonjour

Un bouton sur la feuil1
le code suivant sur le bouton:
Private Sub CommandButton1_Click()
Sheets("Feuil2").Select
Range("A2", Range("A65536").End(xlUp)).Select
End Sub
Ca ne fonctionne pas, j'ai toujours des pb avec les select et les
activate, un mystere pour moi

Remi

Merci












Avatar
gmlsteph
Désolé mais j'ai dû mal m'exprimer, en résulte que tu n'as rien
compris à mon propos!
L'essentiel portait sur tout le reste de mon post ( le fait que
activate passe et pas select dans l'exemple n'était qu'une
parenthèse).

Bien le bonjour tout de même.


On 22 fév, 14:08, "michdenis" wrote:
| il serait  amha préférable d'utiliser activate plutôt que selec t

La SEULE différence entre "Select" ou "Activate" que ce soit pour
l'objet "Sheet" ou "Range", La méthode Sélect va placer le focus
sur une seule cellule d'une sélection de cellules, de même si on se
retrouve avec plusieurs feuilles de sélectionner, la méthode Select
place le focus sur une seule Feuille et désélectionne du même coup
les autres feuilles. La méthode active permet de modifier la cellule
active d'une sélection de cellule à l'intérieur de la sélection, c'est le
même phénomène dans le cas d'une sélection multiple de feuille
où on peut déplacer le focus de la feuille active à l'intérieur d e
la sélection initiale.  Au delà de cette nuance, l'usage des méth odes
Select ou Activate, c'est du pareil au même.

"LSteph" a écrit dans le message de groupe de di scussion :

Bonjour,

Excellente explication!

et ce n'est pas toi que j'essayerais de convaincre sur le fond
  pourtant on pourrait  peut-être laisser une nuance là:

 > l'important c'est que ça marche. Ca n'empêche pas un code de
 > fonctionner.
...parfois cela peut empêcher réellement le code de fonctionner
notamment avec l'objet Feuille pour lequel certes  il serait  amha
préférable d'utiliser activate plutôt que select mais c'est pour l' exemple
voir la différence on peut agir sur une feuille même masquée sans être
obligé de la sélectionner en revanche le select cause un plantage :

Sub aaaz()
Feuil2.Visible = xlSheetVeryHidden
Feuil2.Select 'ceci plante
[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
End Sub

Sub aaaznoselect()
'ici ca marche
Feuil2.Visible = xlSheetVeryHidden
Feuil2.[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
Feuil2.Activate
End Sub

...et

 >(...pis on s'en fout, on n'est plus à
 > l'école)
J'ai probablement oublié de mettre une souriette ici:

 >>> faut-il encore le répèter!

...mais j'espère que personne ne prendrait  cela au 1er degré...!

;-)

--
lSteph

Misange a écrit :



> parce que c'est comme pascal scal, ça fait double emploi :-)
> Le problème c'est l'enregistreur de macros. C'est un outil génial p our
> apprendre, indispensable pour retrouver la syntaxe de certaines
> instructions et la traduction anglaise des fonctions. Mais il génèr e un
> code qui est pour le moins bavard et pas optimal.
> Ca parait effectivement "logique" de vouloir sélectionner un truc ava nt
> de l'utiliser. Après tout je ne dis pas couteau coupe, je commence pa r
> prendre mon couteau. Et bien pourtant avec les objets VBA on peut leur
> dire directement de faire certains trucs sans avoir besoin de les
> prendre en mains. Beaucoup de lignes de l'enregistreur de macros peuven t
> être ramenées à une seule.
> Cela dit ce n'est pas une "faute" (pis on s'en fout, on n'est plus à
> l'école) de sélectionner avant de faire un truc avec un objet,
> l'important c'est que ça marche. Ca n'empêche pas un code de
> fonctionner. Mais ça peut significativement le ralentir dans certains
> cas, ça rend aussi le code plus lourd et moins facile à suivre. Don c
> autant prendre les bonnes habitudes.

> Misange migrateuse
> XlWiki : Participez à un travail collaboratif sur excel !
>http://xlwiki.free.fr/wiki
>http://www.excelabo.net

> Pascal Scal a écrit :
>> Bonsoir
>> Pourquoi
>> - Dans une macro Select est presque toujours inutile
>>  -faut-il encore le répèter!
>> Tain j'ai un paquet de code à nettoyer moi

>> "LSteph" a écrit dans le message de news:
>>
>>> Bonjour,

>>> Dans une macro Select est presque toujours inutile
>>> faut-il encore le répèter!

>>> Mais on peut qd même le faire

>>> Private Sub CommandButton1_Click()
>>> With Sheets("Feuil2")
>>> .Activate
>>> .Range("A2:A" & .[A65536].End(xlUp).Row).Select
>>> End With
>>> End Sub

>>> 'lSteph

>>> IMER09 a écrit :
>>>> Rebonjour

>>>> Un bouton sur la feuil1
>>>> le code suivant sur le bouton:
>>>> Private Sub CommandButton1_Click()
>>>> Sheets("Feuil2").Select
>>>> Range("A2", Range("A65536").End(xlUp)).Select
>>>> End Sub
>>>> Ca ne fonctionne pas, j'ai toujours des pb avec les select et les
>>>> activate, un mystere pour moi

>>>> Remi

>>>> Merci- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
michdenis
| ( le fait que activate passe et pas select dans l'exemple
| n'était qu'une parenthèse).

*** Je n'en doute pas.

*** Selon moi, le propos de ton exemple illustrait davantage
le fait qu'une feuille doit être active pour pour
sélectionner une cellule, plage de cellules ou tout autre objet
appartenant à cette feuille.

*** Dans ton exemple, on changerait "Select" pour "Activate" que
le résultat serait le même.

*** J'ai voulu faire cette distinction entre Activate et Select parce que je
crois que beaucoup d'usagers se demandent justement la différence
entre les 2 méthodes. Le propos ne te visait pas personnellement.

Bonne journée quand même ! ;-)





a écrit dans le message de groupe de discussion :

Désolé mais j'ai dû mal m'exprimer, en résulte que tu n'as rien
compris à mon propos!
L'essentiel portait sur tout le reste de mon post ( le fait que
activate passe et pas select dans l'exemple n'était qu'une
parenthèse).

Bien le bonjour tout de même.


On 22 fév, 14:08, "michdenis" wrote:
| il serait amha préférable d'utiliser activate plutôt que select

La SEULE différence entre "Select" ou "Activate" que ce soit pour
l'objet "Sheet" ou "Range", La méthode Sélect va placer le focus
sur une seule cellule d'une sélection de cellules, de même si on se
retrouve avec plusieurs feuilles de sélectionner, la méthode Select
place le focus sur une seule Feuille et désélectionne du même coup
les autres feuilles. La méthode active permet de modifier la cellule
active d'une sélection de cellule à l'intérieur de la sélection, c'est le
même phénomène dans le cas d'une sélection multiple de feuille
où on peut déplacer le focus de la feuille active à l'intérieur de
la sélection initiale. Au delà de cette nuance, l'usage des méthodes
Select ou Activate, c'est du pareil au même.

"LSteph" a écrit dans le message de groupe de discussion :

Bonjour,

Excellente explication!

et ce n'est pas toi que j'essayerais de convaincre sur le fond
pourtant on pourrait peut-être laisser une nuance là:

> l'important c'est que ça marche. Ca n'empêche pas un code de
> fonctionner.
...parfois cela peut empêcher réellement le code de fonctionner
notamment avec l'objet Feuille pour lequel certes il serait amha
préférable d'utiliser activate plutôt que select mais c'est pour l'exemple
voir la différence on peut agir sur une feuille même masquée sans être
obligé de la sélectionner en revanche le select cause un plantage :

Sub aaaz()
Feuil2.Visible = xlSheetVeryHidden
Feuil2.Select 'ceci plante
[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
End Sub

Sub aaaznoselect()
'ici ca marche
Feuil2.Visible = xlSheetVeryHidden
Feuil2.[a2] = "zaza"
Feuil2.Visible = xlSheetVisible
Feuil2.Activate
End Sub

...et

>(...pis on s'en fout, on n'est plus à
> l'école)
J'ai probablement oublié de mettre une souriette ici:

>>> faut-il encore le répèter!

...mais j'espère que personne ne prendrait cela au 1er degré...!

;-)

--
lSteph

Misange a écrit :



> parce que c'est comme pascal scal, ça fait double emploi :-)
> Le problème c'est l'enregistreur de macros. C'est un outil génial pour
> apprendre, indispensable pour retrouver la syntaxe de certaines
> instructions et la traduction anglaise des fonctions. Mais il génère un
> code qui est pour le moins bavard et pas optimal.
> Ca parait effectivement "logique" de vouloir sélectionner un truc avant
> de l'utiliser. Après tout je ne dis pas couteau coupe, je commence par
> prendre mon couteau. Et bien pourtant avec les objets VBA on peut leur
> dire directement de faire certains trucs sans avoir besoin de les
> prendre en mains. Beaucoup de lignes de l'enregistreur de macros peuvent
> être ramenées à une seule.
> Cela dit ce n'est pas une "faute" (pis on s'en fout, on n'est plus à
> l'école) de sélectionner avant de faire un truc avec un objet,
> l'important c'est que ça marche. Ca n'empêche pas un code de
> fonctionner. Mais ça peut significativement le ralentir dans certains
> cas, ça rend aussi le code plus lourd et moins facile à suivre. Donc
> autant prendre les bonnes habitudes.

> Misange migrateuse
> XlWiki : Participez à un travail collaboratif sur excel !
>http://xlwiki.free.fr/wiki
>http://www.excelabo.net

> Pascal Scal a écrit :
>> Bonsoir
>> Pourquoi
>> - Dans une macro Select est presque toujours inutile
>> -faut-il encore le répèter!
>> Tain j'ai un paquet de code à nettoyer moi

>> "LSteph" a écrit dans le message de news:
>>
>>> Bonjour,

>>> Dans une macro Select est presque toujours inutile
>>> faut-il encore le répèter!

>>> Mais on peut qd même le faire

>>> Private Sub CommandButton1_Click()
>>> With Sheets("Feuil2")
>>> .Activate
>>> .Range("A2:A" & .[A65536].End(xlUp).Row).Select
>>> End With
>>> End Sub

>>> 'lSteph

>>> IMER09 a écrit :
>>>> Rebonjour

>>>> Un bouton sur la feuil1
>>>> le code suivant sur le bouton:
>>>> Private Sub CommandButton1_Click()
>>>> Sheets("Feuil2").Select
>>>> Range("A2", Range("A65536").End(xlUp)).Select
>>>> End Sub
>>>> Ca ne fonctionne pas, j'ai toujours des pb avec les select et les
>>>> activate, un mystere pour moi

>>>> Remi

>>>> Merci- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
;-) ok, me voilà rassuré pour l'essentiel, toutefois...

> le résultat serait le même.
Essaye 1 puis 2 tu verras que c'est pas tout à fait cela:



Sub Macro1()
Feuil2.Visible = xlSheetHidden
End Sub

Sub Macro2()
Feuil2.Activate
MsgBox ActiveSheet.Name
End Sub



En fait Select provoque une erreur mais pas activate
(la feuille est activée en arrière plan)
différence selon le contexte que j'envisageais
Action opérable directement VBA (activate)
ou exclusive au contexte de l'utilisateur (selection)

J'ignore la finesse qu'il y aurait derrière mais c'est ainsi que je me
l'explique

'@+

'lSteph

(Excel 2003)

michdenis a écrit :
...
>
> *** Dans ton exemple, on changerait "Select" pour "Activate" que
> le résultat serait le même.
Avatar
michdenis
Je suis d'accord... et permet moi de te poser une question à partir de l'exemple que tu as
fournis.
Ton code je l'ai mis dans un module standard :
Avant de lancer la macro, j'ai sélectionner la feuil1
c'était en conséquence la feuille active

Après avoir exécuté ton code, la feuille active
visible dans l'interface de la feuille de calcul
était la feuil3 et la cellule A1 de cette dernière
contenait la valeur 10.

Si tu prétends que la feuille masquée est ou était
la feuille active, comment expliquer que c'est le
contenu de la feuil3 que j'ai modifié et que la
cellule A1 de la feuil2 est vide lorsque je l'affiche.
Pis si le classeur ne contenait que 2 feuilles, c'est la feuille
visible qui serait active et c'est sa cellule A1 qui recevrait
la valeur 10
Malheureusement pour toi, un classeur doit avoir en tout
temps une feuille visible à moins de modifier la propriété
IsAddin à true

La relativité, ça te dit quelque chose ?
Einstein en a fait une théorie...
Moi, juste un petit exemple.

'-------------------------------
Sub Macro1()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
End Sub
'-------------------------------





"LSteph" a écrit dans le message de groupe de discussion :

;-) ok, me voilà rassuré pour l'essentiel, toutefois...

> le résultat serait le même.
Essaye 1 puis 2 tu verras que c'est pas tout à fait cela:



Sub Macro1()
Feuil2.Visible = xlSheetHidden
End Sub

Sub Macro2()
Feuil2.Activate
MsgBox ActiveSheet.Name
End Sub



En fait Select provoque une erreur mais pas activate
(la feuille est activée en arrière plan)
différence selon le contexte que j'envisageais
Action opérable directement VBA (activate)
ou exclusive au contexte de l'utilisateur (selection)

J'ignore la finesse qu'il y aurait derrière mais c'est ainsi que je me
l'explique

'@+

'lSteph

(Excel 2003)

michdenis a écrit :
...
>
> *** Dans ton exemple, on changerait "Select" pour "Activate" que
> le résultat serait le même.
Avatar
LSteph
> Je suis d'accord...


Oui tu as donc bien vu dans la msgbox Feuil2
:-)

Il me semble donc qu'entre Activate et Select persiste une différence

:-(non)
> Si tu prétends
je ne prétends rien , je vois et j'essaye de comprendre.

;-) C'est un fil de discussion et j'apprécie tes interventions que ce
soit quand on est d'accord ou pas!

Donc si on veut analyser
ceci tendrait à montrer que Activate passe et le msgbox renvoie l'info
propre au contexte immédiat...
Sauf que dès la fin de cette execution ou sorti de ce contexte
par exemple si l'on tente d'écrire on revient à la réalité de
l'interface utilisateur
(cf.ton exemple)pour explication
J'aurais pu dire l faudrait sinon dire Feuil2.Range..

mais désolé mais si je fais ceci:

Sub Macro3()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
Feuil2.Visible = xlSheetVisible
End Sub

C'est bien en Feuil2 que la valeur 10 est entrée en A1

donc simplement Range ainsi tout seul réfère à la Feuille visible en
surbrillance et in fine redevenue réellement active et dans l'application.


Tout cela en tout cas est fort intéressant.

Ceci en revanche n'est pas utile:
>" Malheureusement pour toi,"
Cela n'a rien de plus malheureux pour moi que pour un autre, et c'est
tout à fait normal un classeur doit avoir en tout temps une feuille
visible!
Sauf addin bien entendu!

Amicordialement.

@+

--
lSteph





michdenis a écrit :
Je suis d'accord... et permet moi de te poser une question à partir de l'exemple que tu as
fournis.
Ton code je l'ai mis dans un module standard :
Avant de lancer la macro, j'ai sélectionner la feuil1
c'était en conséquence la feuille active

Après avoir exécuté ton code, la feuille active
visible dans l'interface de la feuille de calcul
était la feuil3 et la cellule A1 de cette dernière
contenait la valeur 10.

Si tu prétends que la feuille masquée est ou était
la feuille active, comment expliquer que c'est le
contenu de la feuil3 que j'ai modifié et que la
cellule A1 de la feuil2 est vide lorsque je l'affiche.
Pis si le classeur ne contenait que 2 feuilles, c'est la feuille
visible qui serait active et c'est sa cellule A1 qui recevrait
la valeur 10
Malheureusement pour toi, un classeur doit avoir en tout
temps une feuille visible à moins de modifier la propriété
IsAddin à true

La relativité, ça te dit quelque chose ?
Einstein en a fait une théorie...
Moi, juste un petit exemple.

'-------------------------------
Sub Macro1()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
End Sub
'-------------------------------





"LSteph" a écrit dans le message de groupe de discussion :

;-) ok, me voilà rassuré pour l'essentiel, toutefois...

> le résultat serait le même.
Essaye 1 puis 2 tu verras que c'est pas tout à fait cela:



Sub Macro1()
Feuil2.Visible = xlSheetHidden
End Sub

Sub Macro2()
Feuil2.Activate
MsgBox ActiveSheet.Name
End Sub



En fait Select provoque une erreur mais pas activate
(la feuille est activée en arrière plan)
différence selon le contexte que j'envisageais
Action opérable directement VBA (activate)
ou exclusive au contexte de l'utilisateur (selection)

J'ignore la finesse qu'il y aurait derrière mais c'est ainsi que je me
l'explique

'@+

'lSteph

(Excel 2003)

michdenis a écrit :
...
>
> *** Dans ton exemple, on changerait "Select" pour "Activate" que
> le résultat serait le même.



Avatar
michdenis
| ceci tendrait à montrer que Activate passe
***même pas... je suis d'accord que le code ne plante
pas, mais après l'exécution de la ligne, ce n'est plus
la feuil1 qui est active mais la feuil3. À sa face même
pour que la feuille active soit passée de Feuil1 à Feuil3
il y dû se produire quelque chose car dans ton code
à nul part, tu mentionnes le fait que Feuil3 doit être
activée ou sélectionnée. Au sens propre de ce que
l'expression signifie, la feuil2 n'a jamais été activée

*** L'exercice démontre qu'il y a une toute légère différence
de plus en "Activate" et "Select". La commande "Activate"
peut être relative tandis que Select n'admet pas cela. Mais
cela se confond très bien avec la notion que Activate peut
modifier (relativité) la feuille active lorsqu'il s'agit d'un groupe
de travail i.e plusieurs feuilles de sélectionner.

*** Ta macro, celle ci-dessous, n'inscrit jamais le chiffre 10 dans
la cellule A1 de la feuil2. Si tu as réussi ce tour de force c'est
que tu as mis la procédure dans le module Feuil2 et que sans
référence à un objet feuil autre, un objet Range utilisé dans un
module feuille est et appartient à cette feuille. Le fait que tu l'as
masque, ne change en rien la capacité de la procédure d'y inscrire
une valeur.

*** Je crois qu'on a fait le tour de la question et il faut se souvenir même
dans Excel que What you see is not necessarily what you get... ;-)))

'------------------------------------
Sub Macro3()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
Feuil2.Visible = xlSheetVisible
End Sub
'------------------------------------
Avatar
LSteph
Là tu es à coté...:
tu peux voir cela ici
http://cjoint.com/?cytq7dq4Ts

Aucun tour de force et ma macro est dans Module1
Feuil2 s'affiche dans msgbox
la valeur 10 s'inscrit bien en A1 de Feuil2

'''dans Module1
Sub Macro1()
Feuil2.Visible = xlSheetHidden
End Sub
Sub Macro2()
Feuil2.Activate
MsgBox ActiveSheet.Name
End Sub
Sub Macro3()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
Feuil2.Visible = xlSheetVisible
End Sub


Là en revanche tu as raison:
>What you see is not necessarily what you get... ;-)))

But now is what I get and what i see!

--
lSteph
(Excel 2003 sous Vista)


michdenis a écrit :
| ceci tendrait à montrer que Activate passe
***même pas... je suis d'accord que le code ne plante
pas, mais après l'exécution de la ligne, ce n'est plus
la feuil1 qui est active mais la feuil3. À sa face même
pour que la feuille active soit passée de Feuil1 à Feuil3
il y dû se produire quelque chose car dans ton code
à nul part, tu mentionnes le fait que Feuil3 doit être
activée ou sélectionnée. Au sens propre de ce que
l'expression signifie, la feuil2 n'a jamais été activée

*** L'exercice démontre qu'il y a une toute légère différence
de plus en "Activate" et "Select". La commande "Activate"
peut être relative tandis que Select n'admet pas cela. Mais
cela se confond très bien avec la notion que Activate peut
modifier (relativité) la feuille active lorsqu'il s'agit d'un groupe
de travail i.e plusieurs feuilles de sélectionner.

*** Ta macro, celle ci-dessous, n'inscrit jamais le chiffre 10 dans
la cellule A1 de la feuil2. Si tu as réussi ce tour de force c'est
que tu as mis la procédure dans le module Feuil2 et que sans
référence à un objet feuil autre, un objet Range utilisé dans un
module feuille est et appartient à cette feuille. Le fait que tu l'as
masque, ne change en rien la capacité de la procédure d'y inscrire
une valeur.

*** Je crois qu'on a fait le tour de la question et il faut se souvenir même
dans Excel que What you see is not necessarily what you get... ;-)))

'------------------------------------
Sub Macro3()
Feuil2.Visible = xlSheetHidden
Feuil2.Activate
Range("A1") = 10
Feuil2.Visible = xlSheetVisible
End Sub
'------------------------------------





1 2 3