Toujours dans mes procédures événementielles, j'ai un soucis pour adapter la
macro de Pierre (en fin de message) à mon cas.
Mon classeur comporte plusieurs onglets, et je souhaite masquer certains
éléments (barres d'outils dans cet exemple) sur des onglets précis (pas
tous, ce qui m'empêche de mettre cette procédure dans ThisWorkbook).
Je rencontre les problèmes suivants :
Macro dans une feuille :
1° - ça fonctionne tant que je reste dans le même classeur, les barres
d'outil disparaissent de cette feuille, et réapparaissent quand j'en
sélectionne une autre.
2° - ça ne fonctionne plus quand 2 classeurs sont ouverts et que je passe de
l'un à l'autre.
Macro dans plusieurs feuilles :
3° - ça ne fonctionne plus.
Les questions que je me pose peuvent vous apparaitre basiques, et je m'en
excuse, mais comment s'enchainent les activations-désactivations de feuilles
?
Passer d'une feuille à une autre feuille, ou à la feuille d'un autre
classeur, n'est-ce pas désactitvation de l'ancienne feuille, puis activation
d'une nouvelle?
Merci d'avance de tout éclaircissement que vous voudrez bien m'apporter.
--
Bien cordialement,
P. Bastard
Option Explicit
'masquer puis réafficher toutes les barres d'outils d'une feuille
'd'après Pierre Fauconnier, mpfe
Sub worksheet_activate()
Dim ColBarresOutils As Collection
Dim BarreOutils As CommandBar
Set ColBarresOutils = New Collection
For Each BarreOutils In Application.CommandBars
If BarreOutils.Type = 0 And BarreOutils.Visible = True Then
ColBarresOutils.Add BarreOutils.Name
BarreOutils.Visible = False
End If
Next BarreOutils
End Sub
Sub worksheet_deactivate()
'MontreBars()
'à appeler dans l'événement DeActivate d'un classeur
Dim Element
For Each Element In ColBarresOutils
Application.CommandBars(Element).Visible = True
Next Element
End Sub
Bonjour, *anonymousA* J'ai lu ton post 4216090f$0$831$ avec le plus grand intéret :
Cette fois-ci, ça fonctionne bien. J'arrive à détecter si je suis sur une feuille donnée, ou sur une autre, dans un classeur défini, ou si je suis sur un autre classeur.
Tout baigne. ;-) Encore merci pour ton aide, et pour le temps que tu m'as accordé.
-- Bien cordialement, P. Bastard
ben d'abord parce que le Private Sub Workbook_Open doit être mis dans thisworkbook si tu veux qu'il se déclenche à l'ouverture. Ce n'est pas une Auto_Open que personnellement je n'emploie qu rarement. A+
Bonjour, *anonymousA* J'ai lu ton post 421532f3$0$823$ avec le plus grand intéret :
Ben décidément, c'est pas ça qu'est ça. où cloche-je ?
http://cjoint.com/?csmNSvvdt3
re,
c'est moi qui m'excuse. c'est sur que si je ne donne pas le bon nom ( qui n'est pas BASTARD bien sur mais BASTARD.xls, ca va déjà beaucoup mieux.J'en ai profité pour te rajouter le même genre de proc pour l'evenement activate et pour simplifier le code en fonction des paramètres par défaut (Sh dans Appl_SheetActivate et Wb dans Appl_WorkbookActivate). Par ailleurs, le fait de rajouter la proc sur l'evenement workbookActivate permet aussi à l'ouverture du fichier BASTARD de tester le coté actif de la feuille Patrick ce que ne peut faire l'evenement SheetActivate si jamais le classeur s'ouvre sur la feuille Patrick qui était active lors de la dernière fermeture.
A mettre dans le module de classe :
Public WithEvents Appl As Application Private Sub Appl_SheetActivate(ByVal Sh As Object)
Set wbk = ActiveWorkbook If wbk.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then MsgBox "Bonjour" End If
End Sub
Private Sub Appl_WorkbookActivate(ByVal Wb As Workbook)
Set Sh = Wb.ActiveSheet If Wb.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then MsgBox "Bonjour" End If
End Sub
Peux te garantir que ca fonctionne. Mais en info ?
A+
Re-Bonjour, *anonymousA*
Si je puis me permettre d'abuser :
http://cjoint.com/?crwTspKvZQ
Je ne vois pas où j'ai pêché :-(
si tu avais une minute supplémentaire à m'accorder ?
Bonjour, *anonymousA*
J'ai lu ton post 4216090f$0$831$8fcfb975@news.wanadoo.fr
avec le plus grand intéret :
Cette fois-ci, ça fonctionne bien.
J'arrive à détecter si je suis sur une feuille donnée, ou sur une autre,
dans un classeur défini, ou si je suis sur un autre classeur.
Tout baigne.
;-)
Encore merci pour ton aide, et pour le temps que tu m'as accordé.
--
Bien cordialement,
P. Bastard
ben d'abord parce que le Private Sub Workbook_Open doit être mis dans
thisworkbook si tu veux qu'il se déclenche à l'ouverture.
Ce n'est pas une Auto_Open que personnellement je n'emploie qu
rarement.
A+
Bonjour, *anonymousA*
J'ai lu ton post 421532f3$0$823$8fcfb975@news.wanadoo.fr
avec le plus grand intéret :
Ben décidément, c'est pas ça qu'est ça.
où cloche-je ?
http://cjoint.com/?csmNSvvdt3
re,
c'est moi qui m'excuse. c'est sur que si je ne donne pas le bon nom
( qui n'est pas BASTARD bien sur mais BASTARD.xls, ca va déjà
beaucoup mieux.J'en ai profité pour te rajouter le même genre de
proc pour l'evenement activate et pour simplifier le code en
fonction des paramètres par défaut (Sh dans Appl_SheetActivate et
Wb dans Appl_WorkbookActivate).
Par ailleurs, le fait de rajouter la proc sur l'evenement
workbookActivate permet aussi à l'ouverture du fichier BASTARD de
tester le coté actif de la feuille Patrick ce que ne peut faire
l'evenement SheetActivate si jamais le classeur s'ouvre sur la
feuille Patrick qui était active lors de la dernière fermeture.
A mettre dans le module de classe :
Public WithEvents Appl As Application
Private Sub Appl_SheetActivate(ByVal Sh As Object)
Set wbk = ActiveWorkbook
If wbk.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then
MsgBox "Bonjour"
End If
End Sub
Private Sub Appl_WorkbookActivate(ByVal Wb As Workbook)
Set Sh = Wb.ActiveSheet
If Wb.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then
MsgBox "Bonjour"
End If
End Sub
Peux te garantir que ca fonctionne. Mais en info ?
A+
Re-Bonjour, *anonymousA*
Si je puis me permettre d'abuser :
http://cjoint.com/?crwTspKvZQ
Je ne vois pas où j'ai pêché :-(
si tu avais une minute supplémentaire à m'accorder ?
Bonjour, *anonymousA* J'ai lu ton post 4216090f$0$831$ avec le plus grand intéret :
Cette fois-ci, ça fonctionne bien. J'arrive à détecter si je suis sur une feuille donnée, ou sur une autre, dans un classeur défini, ou si je suis sur un autre classeur.
Tout baigne. ;-) Encore merci pour ton aide, et pour le temps que tu m'as accordé.
-- Bien cordialement, P. Bastard
ben d'abord parce que le Private Sub Workbook_Open doit être mis dans thisworkbook si tu veux qu'il se déclenche à l'ouverture. Ce n'est pas une Auto_Open que personnellement je n'emploie qu rarement. A+
Bonjour, *anonymousA* J'ai lu ton post 421532f3$0$823$ avec le plus grand intéret :
Ben décidément, c'est pas ça qu'est ça. où cloche-je ?
http://cjoint.com/?csmNSvvdt3
re,
c'est moi qui m'excuse. c'est sur que si je ne donne pas le bon nom ( qui n'est pas BASTARD bien sur mais BASTARD.xls, ca va déjà beaucoup mieux.J'en ai profité pour te rajouter le même genre de proc pour l'evenement activate et pour simplifier le code en fonction des paramètres par défaut (Sh dans Appl_SheetActivate et Wb dans Appl_WorkbookActivate). Par ailleurs, le fait de rajouter la proc sur l'evenement workbookActivate permet aussi à l'ouverture du fichier BASTARD de tester le coté actif de la feuille Patrick ce que ne peut faire l'evenement SheetActivate si jamais le classeur s'ouvre sur la feuille Patrick qui était active lors de la dernière fermeture.
A mettre dans le module de classe :
Public WithEvents Appl As Application Private Sub Appl_SheetActivate(ByVal Sh As Object)
Set wbk = ActiveWorkbook If wbk.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then MsgBox "Bonjour" End If
End Sub
Private Sub Appl_WorkbookActivate(ByVal Wb As Workbook)
Set Sh = Wb.ActiveSheet If Wb.Name = "BASTARD.xls" And Sh.Name = "Patrick" Then MsgBox "Bonjour" End If
End Sub
Peux te garantir que ca fonctionne. Mais en info ?
A+
Re-Bonjour, *anonymousA*
Si je puis me permettre d'abuser :
http://cjoint.com/?crwTspKvZQ
Je ne vois pas où j'ai pêché :-(
si tu avais une minute supplémentaire à m'accorder ?