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

8 réponses

1 2 3
Avatar
LSteph
..t'aurais pas un name et code name différents?

Feuil2(Feuil3)

cela expliquerait ton souci!
Avatar
michdenis
J'ai fait quelques tests et il faut se rendre à l'évidence (? bien qu'encore sceptique)

Dans l'aide d'excel, Worksheet.Activate, méthode
'-------------------------------------------------
Cette méthode active la feuille sélectionnée.
Syntaxe
expression.Activate
expression Variable qui représente un objet Worksheet.
Remarques
Appeler cette méthode revient à cliquer sur l'onglet de la feuille.
'-------------------------------------------------

A ) Excel doit avoir en tout temps une feuille visible. Excluant les xla
B ) Dans une macro, la feuille active du classeur peut être autre que la
feuille visible du classeur.
En supposant que la Feuil2 soit déjà masquée, on pourrait quand
même écrire des données dans la feuil2 simplement en utilisant seulement
l'objet Range sans faire référence à Feuil2 pour inscrire des données
dans la feuille si on prend soin expressément de l'activer comme ceci :
Feuil2.Activate
range("A1") = 10

C ) Jusqu'à aujourd'hui, je pensais que la feuille active devait être visible comme
la "Définition" et la "Remarque" de l'aide d'excel laisse supposer.
Or dans une procédure, il est permis d'activer une feuille masquée et de
la traiter comme si c'était une feuille visible d'excel.

D ) Feuil2.Activate ne suppose pas obligatoirement que la Feuil2 est visible.

Et ben, c'est une nuance que je viens d'apprendre ! Merci LSteph.
Mais c'est loin d'être sûr que je vais adapter cette approche !
;-)






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

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
'------------------------------------





Avatar
LSteph
;-) moi non plus!


De toutes façons ce n'est pas parceque l'on a constaté cela que je vais
systematiser.
A partir du moment où cela à un max de chance de ne pas être capté par
l'utilisateur ou avoir un comportement divergeant selon les versions.
De même que ce n'est pas parcequ'on peut parfois avoir besoin de select
qu'on va y recourir pour agir.


mais ce fut intéressant!


Bonne soirée.


--
lSteph

michdenis a écrit :
J'ai fait quelques tests et il faut se rendre à l'évidence (? bien qu'encore sceptique)


....

D ) Feuil2.Activate ne suppose pas obligatoirement que la Feuil2 est visible.

Et ben, c'est une nuance que je viens d'apprendre ! Merci LSteph.
Mais c'est loin d'être sûr que je vais adapter cette approche !
;-)






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

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
'------------------------------------








Avatar
Modeste
Bonsour® LSteph


What you get is what you type !!!
What you get is not necessarily what you want translated VBA. !!!

;o)))
en général les propriétes des objets nécessitent un qualificateur !!!!
Range("blabla") Utilisée sans qualificateur d'objet, cette propriété est un raccourci de *ActiveSheet.Range*
(renvoie une plage de la feuille active ; si la feuille active n'est pas une feuille de calcul, la propriété échoue).

;o)))
c'est écrit dans l'aide !!!
Propriété Range telle qu'elle s'applique aux objets Application, Range et Worksheet.
expression.Range(Index)
expression *OBLIGATOIRE*. Expression qui renvoie un des objets ci-dessus.

(idem pour shape.range)
Avatar
LSteph
Bonjour Modeste,

Ce dont tu parle est écrit dans l'aide, certainement..
personne ne dis le contraire!
Quel rapport avec le sujet?
expression *OBLIGATOIRE*
Il n'y a pas de souci la-dessus!

Le propos annexe était que select est souvent inutile
puis de façon plus marginale on a dérivé sur le fait qu'il peut planter
et pour finir encore plus hors sujet suit à l'exemple (dont range était
absent) que Activate passe à travers le fait que la feuille soit hidden
le point de départ était que dans ce cas l'inutile select en revanche
plante!

Sub Macro1()
Feuil2.Visible = xlSheetHidden
End Sub

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

Relis le fil, si tu veux , il est déjà assez long , en discuter pas de
pb mais refais peut être un nouveau fil en disant de quoi tu veux qu'on
cause ou précise le lien avec cette discussion car là je ne vois pas...

@+

lSteph

.
Modeste a écrit :
Bonsour® LSteph


What you get is what you type !!!
What you get is not necessarily what you want translated VBA. !!!

;o)))
en général les propriétes des objets nécessitent un qualificateur !!!!
Range("blabla") Utilisée sans qualificateur d'objet, cette propriété est un raccourci de *ActiveSheet.Range*
(renvoie une plage de la feuille active ; si la feuille active n'est pas une feuille de calcul, la propriété échoue).

;o)))
c'est écrit dans l'aide !!!
Propriété Range telle qu'elle s'applique aux objets Application, Range et Worksheet.
expression.Range(Index)
expression *OBLIGATOIRE*. Expression qui renvoie un des objets ci-dessus.

(idem pour shape.range)


Avatar
Modeste
Bonsour® LSteph

Ce dont tu parle est écrit dans l'aide, certainement..
personne ne dis le contraire!
Quel rapport avec le sujet?
expression *OBLIGATOIRE*
Il n'y a pas de souci la-dessus!

Le propos annexe était que select est souvent inutile



je dis simplement que c'est le fait de qualifier les objets qui évite le recours aux "select"
et permet de préciser explicitement à quoi s'applique la propriété ...

et que le implicitement est souvent casse-g... en VBA
;o)))
Avatar
LSteph
La dessus on a toujours été d'accord!

;-)

Modeste a écrit :
Bonsour® LSteph

Ce dont tu parle est écrit dans l'aide, certainement..
personne ne dis le contraire!
Quel rapport avec le sujet?
expression *OBLIGATOIRE*
Il n'y a pas de souci la-dessus!

Le propos annexe était que select est souvent inutile



je dis simplement que c'est le fait de qualifier les objets qui évite le recours aux "select"
et permet de préciser explicitement à quoi s'applique la propriété ...

et que le implicitement est souvent casse-g... en VBA
;o)))




Avatar
IMER09
Merci Avec bcp de retard j'ai du m'eloigner de mon PC forcer contraint
Comme quoi Select fait couler bcp d'encre d'ou la dificultée pour les
mauvais comme moi de si retrouver

Remi
"Misange" a écrit dans le message de news:
%
en complément des réponses apportées :
http://www.excelabo.net/excel/adresses.php#activate

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

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





1 2 3