Accès onglets masqués par liens hypertexte [Résolu/Fermé]

Signaler
Messages postés
72
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
31 octobre 2019
-
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020
-
Bonjour,
Je cherche à accéder à tous mes onglets masqués (55) à partir du seul onglet visible "o" qui contient les liens hypertexte vers tous les onglets masqués pour les ouvrir à la demande. Les onglets ainsi ouverts devraient le rester jusqu'à l'enregistrement et la fermeture du fichier. A la réouverture du fichier, seul l'onglet "o" est visible et ainsi de suite.
Merci pour votre précieuse collaboration
Fat


4 réponses

Messages postés
52511
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
14 367
Si les onglets sont masqués par un code VBA, il faut modifier le code.
Bonsoir,
Je compte masquer les onglets manuellement (clic droit / masquer)
S’il y a une solution pour l’ensemble du problème en VBA, je ne suis pas en mesure de la trouver. C’est pourquoi je sollicite votre aide.
Cordialement
Fat
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020
1 498
Bonjour,

Code à placer dans le module de la feuille "o", pour faire suivre le lien en démasquant la feuille :
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim f As String
Dim c As String
  f = Replace(Split(Target.SubAddress, "!")(0), "'", "")
  c = Split(Target.SubAddress, "!")(1)
  Sheets(f).Visible = 1
  Sheets(f).Activate
  Sheets(f).Range(c).Activate
End Sub

Code à placer dans le module du classeur (Workbook) pour enregistrer le fichier avec les feuilles masquées (et s'il ne s'agit pas d'une fermeture du fichier, ré-afficher les mêmes feuilles) :
Option Explicit
Private fermer As Boolean
Private liste As String
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  fermer = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim i As Integer
  Application.ScreenUpdating = False
  i = ActiveSheet.Index
  Call MasquerFeuilles
  Application.EnableEvents = False
  ThisWorkbook.Save
  Application.EnableEvents = True
  Cancel = True
  If Not fermer Then
    Call AfficherFeuilles
    Worksheets(i).Activate
  End If
  ThisWorkbook.Saved = True
  fermer = False
  Application.ScreenUpdating = True
End Sub
Private Sub AfficherFeuilles()
Dim w As Worksheet
Dim t As Variant
Dim i As Integer
  t = Split(liste & ":", ":")
  For i = LBound(t) To UBound(t)
    If t(i) > "" Then Worksheets(t(i)).Visible = xlSheetVisible
  Next i
End Sub
Private Sub MasquerFeuilles()
Dim w As Worksheet
  With Worksheets("o")
    .Visible = xlSheetVisible
    .Activate
    liste = .Name
    For Each w In Worksheets
      If w.Index <> .Index Then
        If w.Visible = xlSheetVisible Then
          liste = liste & ":" & w.Name
        End If
        w.Visible = xlSheetHidden
      End If
    Next w
  End With
End Sub
Messages postés
72
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
31 octobre 2019

Bonjour,
Merci Patrice pour la solution proposée qui fonctionne très bien.
Cordialement
Fat
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020
1 498
De rien, au plaisir de te relire sur le Forum