OVH Cloud OVH Cloud

Activate- deactivate

11 réponses
Avatar
Patrick BASTARD
Bonjour à tous.

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

1 réponse

1 2
Avatar
Patrick BASTARD
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 ?








1 2