Bonjour à toutes et à tous,
Je vous souhaite un beau dimanche
Je n'arrive pas à coder : Je voudrais qu'il ne soit pas possible de changer d'onglet sauf UNIQUEMENT en exécutant la macro "action" Et qu'il ne puisse pas être possible de changer d'onglet en cliquant sur un autre onglet
Pourriez-vous m'aider,
Je joins un p'tit fichier test.
Grands Mercis
Amicalement,
lionel,
Et une fois que tu es sur Feuil7, tu fais comment puisqu'il n'y a pas de bouton Action ?
A adapter selon besoin...
Dans la classe ThisWorkbook:
VB:
Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.EnableEvents = False
'If Not ActionDéclenché Then ThisWorkbook.Worksheets("Action").Activate
If Not ActionDéclenché Then Sh.Activate
ActionDéclenché = False
Application.EnableEvents = True
End Sub
Dans le Module1:
Code:
Option Explicit
Public ActionDéclenché As Boolean
Sub Action()
ActionDéclenché = True
Sheets("Feuil7").Range("G6") = "action exécutée"
Sheets("Feuil7").Select
[g6].Select
End Sub
Bonjour Dudu2,
Merci pour les codes. je vais tester.
"Et une fois que tu es sur Feuil7, tu fais comment puisqu'il n'y a pas de bouton Action ?"
Pour les autres feuilles, je dois pouvoir changer de feuille sans avoir besoin d'exécuter un code.
Re,
Merci, ça fonctionne très bien
Trop même car il faudrait que pour les autres feuilles, je puisse pouvoir changer de feuille sans avoir besoin d'exécuter un code.
et là, ça bloque tout
Ah ben oui, ça je te l'avais dit.
Dans la classe ThisWorkbook:
VB:
Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = NomFeuilleAction Then
If Not ActionDéclenché Then
Application.EnableEvents = False
Sh.Activate
Application.EnableEvents = True
End If
ActionDéclenché = False
End If
End Sub
Dans le Module1:
Code:
Option Explicit
Public ActionDéclenché As Boolean
Public Const NomFeuilleAction = "action"
Sub Action()
ActionDéclenché = True
Sheets("Feuil7").Range("G6") = "action exécutée"
Sheets("Feuil7").Select
[g6].Select
End Sub
Ben ça devrait pas si tu recopies le code du Module1.
Ou alors tu déplaces le code dans la feuille "action" comme le suggère @mapomme.
Code:
Option Explicit
Private Sub Worksheet_Deactivate()
If Not ActionDéclenché Then
Application.EnableEvents = False
Me.Activate
Application.EnableEvents = True
End If
ActionDéclenché = False
End Sub
Perso je préfère avoir le code dans le Workbook pour 2 raisons:
- Si on supprime la feuille dans des manips le code est préservé
- On a les différents codes éventuels regroupés.
En contrepartie ça oblige d'utiliser le nom ou l'index des feuilles si les traitements sont spécifiques.
Bonjour à tous,
une méthode parmi d'autres:
Dans le module:
VB:
Public Sh_Prev As Worksheet
Sub action()
Application.EnableEvents = False
Sheets("Feuil7").Range("G6") = "action exécutée"
Sheets("Feuil7").Select
[g6].Select
Set Sh_Prev = ActiveSheet
Application.EnableEvents = True
End Sub
Dans Thisworkbook:
Code:
Private Sub Workbook_Open()
Set Sh_Prev = ActiveSheet
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh_Prev Is Nothing Then Set Sh_Prev = Sh
If Sh_Prev.Name = Sh.Name Then Sh_Prev.Activate
End Sub
Et le seul moyen de t'en sortir : te mettre en mode création ....
Bonjour à tous,
une méthode parmi d'autres:
Dans le module:
VB:
Public Sh_Prev As Worksheet
Sub action()
Application.EnableEvents = False
Sheets("Feuil7").Range("G6") = "action exécutée"
Sheets("Feuil7").Select
[g6].Select
Set Sh_Prev = ActiveSheet
Application.EnableEvents = True
End Sub
Dans Thisworkbook:
Code:
Private Sub Workbook_Open()
Set Sh_Prev = ActiveSheet
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh_Prev Is Nothing Then Set Sh_Prev = Sh
If Sh_Prev.Name = Sh.Name Then Sh_Prev.Activate
End Sub
Et le seul moyen de t'en sortir : te mettre en mode création ....
Sub action()
Sheets("Feuil7").Range("G6") = "action exécutée"
Sheets("Feuil7").Select
[g6].Select
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Sub SetTabs()
ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs
End Sub
Thisworkbook:
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWindow.DisplayWorkbookTabs = True
Application.OnKey "^f"
End Sub
Private Sub Workbook_Open()
Application.OnKey "^f", "SetTabs" ' ctrl+f
SetTabs
End Sub
Plus d'onglet à cliquer
Garde-fou : faire Ctrl+f pour afficher ou non les onglets ....