[VBA] Masquer un onglet au bout d'un certain temps

Bonjour à tous,

Une question toute simple, mais je ne sais pas si sa réalisation est faisable en VBA sur Excel :

Peut-on, au bout d'un certain temps d'inactivité sur un onglet, masquer ce dernier automatiquement ?

Par inactivité j'entends ne pas l'avoir sélectionné depuis plusieurs minutes / secondes (je verrai à l'usage)..

D'avance, merci !

Hello,

Tu peux mais il faut qu'après masquage de cet onglet il en reste au moins 1 de visible.

Si c'est le cas tu peux mettre dans la feuille en question (exemple pour une inactivité de 1 minute):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.OnTime Now + TimeValue("00:01:00"), "delai"
Temps = Now

End Sub

Et dans un module:

Public Temps

Sub delai()

If Now - TimeValue("00:01:00") = Temps Then Sheets("Feuille_a_masquer").Visible = False

End Sub

Merci funky je ne connaissais OnTime..

Mais cela ne fonctionne pas.

J'ai pourtant bien copié dans le module et dans la feuille à masquer, j'ai bien renommé la "Feuille_a_masquer" en la bonne feuille, la condition qu'il reste un onglet visible est remplie, mais cela ne marche pas...

Teste sur ce fichier. Pour lancer le "chrono" il faut au moins cliquer sur une cellule de la feuille à masquer ensuite le chrono se réinitialise à chaque nouvelle modification de sélection. Là j'ai réglé sur 15 secondes.

ça marche super, merci.

Dommage qu'un simple affichage de la feuille ne suffise pas à déclencher le "chrono" et qu'il faille forcément au moins activer une cellule...

merci encore !

Bonjour,

Dommage qu'un simple affichage de la feuille ne suffise pas à déclencher le "chrono"

Tu peux, en utilisant l'événement Workbook_SheetActivate.

Ne pas oublier non plus de désactiver le timer à l'activation de la feuille (sinon elle se masquera en cours de lecture), et la fermeture du classeur (sinon il se rouvrira pour exécuter la macro).

Dans ThisWorkbook :

Option Explicit

Dim m_nextTime As Date

Private Sub Workbook_Open()
    m_Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    supp_Timer
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Feuil1" Then
        supp_Timer
    End If
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Sh.Name = "Feuil1" Then
        m_Timer
    End If
End Sub

Private Sub m_Timer()
    supp_Timer
    m_nextTime = Now + TimeValue("00:00:10")
    Application.OnTime m_nextTime, "masquerFeuille"
End Sub

Private Sub supp_Timer()
    On Error Resume Next
    Application.OnTime m_nextTime, "masquerFeuille", , Schedule:=False
    On Error GoTo 0
End Sub

Dans un module Standard :

Private Sub masquerFeuille()
    Sheets("Feuil1").Visible = xlHidden
End Sub

eric

23classeur1.xlsm (16.58 Ko)

Hello eriiic, je n'avais pas vu ta réponse...

Avec une feuille ça marche parfaitement (et ça correspond tout à fait à ce que je cherche à faire... merci), mais comment fait-on quand on veut appliquer cela à plusieurs feuilles, sans avoir des erreurs "nom ambigü", etc ? (j'aurais en fait 6 ou 7 feuilles à masquer après affichage et inactivité...)

Faut-il nommer des Private Sub et des variables différentes à chaque fois ? Y'a t-il une méthode plus simple ?

Merci d'avance !

Bonjour,

tu pourrais faire avec un tableau et une procédure commune qui reçoit en paramètre la feuille mais le plus simple à faire est que chaque feuille ait sa procédure.

Là je suis plutôt dans les valises, ça sera tout pour l'instant

eric

Ok je vais partir sur la deuxième solution dans ce cas, car j'ai du mal à m'imaginer la première

merci !

Rechercher des sujets similaires à "vba masquer onglet bout certain temps"