Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Ne pas sortir d'un onglet sauf en exécutant une macro

Usine à gaz

XLDnaute Barbatruc
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,
 

Pièces jointes

  • Revient à onglet actif.xlsm
    32.9 KB · Affichages: 8

Dudu2

XLDnaute Barbatruc
Bonjour,

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
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
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.

Merci à toi
 

Dudu2

XLDnaute Barbatruc
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
 

Dudu2

XLDnaute Barbatruc
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.
 

fanch55

XLDnaute Barbatruc
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 ....
 

Usine à gaz

XLDnaute Barbatruc
Bonjour fanch55,
Merci d'être là
Je vais tester aussi,
 

fanch55

XLDnaute Barbatruc
Sinon une autre version courte :

Module:
VB:
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 ....
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…