Activation des onglets cachés

Résolu
Bonjour chère communauté,

J'ai construit un petit modèle excel qui reprend un ensemble d'outils, un par onglet. Tous les outils sont regroupés dans un onglet d'accueil, qui pointe alors vers le bon outil dans le même classeur via un hyperlien. Pour gagner en visibilité j'ai masqué ces onglets, mais alors ils ne s'ouvrent plus lorsque l'hyperlien est activé?

Avez-vous une solution pour moi, càd un moyen pour que un onglet caché s'affiche lorsque je clique sur un hyperlien qui pointe vers l'onglet?

Merci! Gilles

26 réponses

Résumé de la discussion

Masquer les feuilles dans Excel bloque l'ouverture des feuilles ciblées par des hyperliens et oblige à envisager une solution VBA pour afficher automatiquement une feuille cachée lorsque l'on clique sur l'hyperlien. La solution majoritaire évoquée consiste à utiliser un code VBA qui rendVisible la feuille ciblée et l'active lors du clic, ou à utiliser une liste de validation et des mécanismes de double-clic. D'autres échanges proposent des variantes, comme assigner une cellule de contrôle et des feuilles de calcul dépendantes, adopter le double clic pour déclencher l'affichage, ou employer des listes déroulantes pour orienter les hyperliens. En cas d'exigence particulière, certains proposent d'adapter le code à des plages dynamiques ou d'étendre la solution à plusieurs onglets, tout en conservant les onglets d'accueil toujours visibles.

Bobot (l’IA à votre service)
  1. Met là au frais et tu la bois la en pensant à moi
    0
    1. En Belgique ce serait au moins une bonne bière spéciale!
      0
      1. Tu l'as fait, de rien.
        Je passe le statut en résolu
        0
        1. Fantastique, mon outil est maintenant ultra pro! Comment te remercier Mike?
          0
          1. Re,

            rajoute la partie en gras deans ton code avec le nom exact de ta feuille à laisser visible dans le code j'ai mis Feuil5

            Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
            Dim Ongl As Byte
            If Not Intersect(Selection, Range("B6:B8")) Is Nothing Then
            For Ongl = 1 To ThisWorkbook.Sheets.Count
            If Sheets(Ongl).Name <> "Outils P9" And Sheets(Ongl).Name <> "Feuil5" Then
            Sheets(Ongl).Visible = 0
            End If
            Next
            If Target > 0 Then Worksheets(Target.Value).Visible = True
            Worksheets(Target.Value).Activate
            End If
            End Sub
            0
            1. Super ça marche. Bon ... j'ai un tout tout dernier problème ... Il faut que mes 2 1ers onglets soient eux tjs affichés. Possible?
              0
              1. Re,

                tu as une erreur sur cette ligne
                If Not Intersect(Selection, Range ("'Outils P9'!B6:B86") Is Nothing Then
                remplace par
                If Not Intersect(Selection, Range ("Outils P9") Is Nothing Then
                0
                1. Tt gd merci, Voilà tout marche nickel à part ce petit détail: j'ai une autre page que Accueil ou Outil P9 où la même fonctionnalité doit fonctionner.

                  J'ai donc repris ton code et j'ai changé le range (je fais référence à celui déjà défini) et le nom de la feuille ... Mais ca bug!

                  Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
                  Dim Ongl As Byte
                  If Not Intersect(Selection, Range ("'Outils P9'!B6:B86") Is Nothing Then
                  For Ongl = 1 To ThisWorkbook.Sheets.Count
                  If Sheets(Ongl).Name <> "Définition Offre" Then
                  Sheets(Ongl).Visible = 0
                  End If
                  Next
                  If Target > 0 Then Worksheets(Target.Value).Visible = True
                  Worksheets(Target.Value).Activate
                  End If
                  End Sub
                  0
                  1. Re,

                    teste ce fichier, j'ai supprimé les liens hypertextes
                    par contre pour que les feuilles s'ouvrent il faut que le nom de l'onglet et le contenu de la cellule soit rigoureusement identique

                    https://www.cjoint.com/?CDjotWYfSwE
                    0
                    1. J'ai adapté ton code pour mon fichier sample ci-dessous (mot de passe: CAP). Cela ne marche pas car plutôt qu'une seule target cell (H5) j'ai une colonne entière (B). Possible?

                      http://cjoint.com/13av/CDjn0IE0z75.htm
                      0
                      1. Re,

                        Un exemple avec le lien ci dessous lien

                        Feuille Accueil colonne A en jaune j'ai créé une liste avec les noms de tes feuilles que j'ai nommé simplement list
                        cette plage jaune peut être sur une feuille différente éventuellement masquée tout comme la colonne A actuelle d'ailleurs
                        en H5 j'ai créé la liste de validation avec la formule =list

                        et j'ai copié le code que je t'ai donné hier soir en modifiant simplement l'adresse de la cellule cible C3 par la nouvelle H5

                        Option Explicit

                        Private Sub Worksheet_Change(ByVal Target As Range)
                        Dim Ongl As Byte
                        If Not Intersect(Target, Range("H5")) Is Nothing Then
                        For Ongl = 1 To ThisWorkbook.Sheets.Count
                        If Sheets(Ongl).Name <> "Accueil" Then
                        Sheets(Ongl).Visible = 0
                        End If
                        Next
                        End If
                        If [H5] > 0 Then Worksheets([H5].Value).Visible = True
                        Worksheets([H5].Value).Activate
                        End Sub

                        Si tu utilises le double clic pour sélectionner ton onglet il faut remplacer
                        Private Sub Worksheet_Change(ByVal Target As Range)
                        par
                        Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

                        sinon le double clic aura pour effet de sélectionner l'onglet affiché en H5 ou il faut ajouter un bout de code pour gérer le double clic et rester sur la feuille Accueil par exemple
                        0
                        1. Merci Mike.

                          Encore 3 (petites j'espère) choses:

                          1) Pour la liste de validation, je créé 'list' (ok) et puis je l'intègre dans ton code mais comment?
                          2) Ma cellule cible peut être n'importe où sur la colonne B, donc j'imagine qu'il suffit de remplacer C3 par B dans ton code.
                          3) En utilisant ton code tel qu'il est actuellement, si je double click sur une cellule (ex N27) dans l'onglet accueil, je tombe direct sur outil1, étrange non?

                          Bàt, Gilles

                          Option Explicit

                          Private Sub Worksheet_Change(ByVal Target As Range)
                          Dim Ongl As Byte
                          If Not Intersect(Target, Range("C3")) Is Nothing Then
                          For Ongl = 1 To ThisWorkbook.Sheets.Count
                          If Sheets(Ongl).Name <> "Accueil" Then
                          Sheets(Ongl).Visible = 0
                          End If
                          Next
                          End If
                          If [C3] > 0 Then Worksheets([C3].Value).Visible = True
                          Worksheets([C3].Value).Activate
                          End Sub
                          0
                          1. Salut,

                            Je rentre à l'instant, peu importe la liste, il suffit de créer une liste de validation avec tous les noms des onglets. Pour cela il suffit de saisir le nom exact de chaque onglet dans une colonne, la plage contenant cette liste peut être nommée exemple list
                            la formule pour afficher ta liste de validation est =list

                            ensuite le code reste inchangé si ta cellule cible reste la C3
                            0
                            1. Re-bonjour Mike,

                              En fait dans mon 'vrai' fichier, j'ai 85 lignes remplies d'hyperliens en colonne B; cela fait bcp pour passer via des listes de valeur. Qui plus est, les cellules portent des noms très différents les unes des autres (pas outil1, outil2, etc).

                              Est-ce que le code peut être adapté en fonction? J'imagine que je dois changer le range - target ou qque chose du genre et que le reste peut fonctionner?

                              Belle journée, Gilles
                              0
                              1. Je ne sais pas si tu as vu j'ai rajouté une ligne en fin de code pour activer la feuille en question
                                0
                                1. Merci bcp Mike cela fonctionne; je dois faire qques adaptations pour le vrai fichier mais je crois pouvoir m'en sortir, et au pire, Une période d'échec est un moment rêvé pour semer les graines du savoir. Un tt grand merci encore!
                                  0
                                  1. Re,

                                    ah dans la précipitation j'ai oublié de mettre une ligne pour activer la feuille

                                    Option Explicit

                                    Private Sub Worksheet_Change(ByVal Target As Range)
                                    Dim Ongl As Byte
                                    If Not Intersect(Target, Range("C3")) Is Nothing Then
                                    For Ongl = 1 To ThisWorkbook.Sheets.Count
                                    If Sheets(Ongl).Name <> "Accueil" Then
                                    Sheets(Ongl).Visible = 0
                                    End If
                                    Next
                                    End If
                                    If [C3] > 0 Then Worksheets([C3].Value).Visible = True
                                    Worksheets([C3].Value).Activate
                                    End Sub
                                    0
                                    1. Re,

                                      Alors en C3 tu crée une liste de validation avec les noms de tes feuilles Onglet1;Onglet2 etc ...

                                      fait un clic droit sur l'onglet de ta feuille Accueil et colle ce code. reviens sur ta feuille Accueil t fait joujou avec ta liste de validation en C3

                                      Option Explicit

                                      Private Sub Worksheet_Change(ByVal Target As Range)
                                      Dim Ongl As Byte
                                      If Not Intersect(Target, Range("C3")) Is Nothing Then
                                      For Ongl = 1 To ThisWorkbook.Sheets.Count
                                      If Sheets(Ongl).Name <> "Accueil" Then
                                      Sheets(Ongl).Visible = 0
                                      End If
                                      Next
                                      End If
                                      If [C3] > 0 Then Worksheets([C3].Value).Visible = True
                                      End Sub

                                      J'attends un dizaine de minutes avant de fermer mon ordi
                                      A+
                                      Mike-31

                                      Une période d'échec est un moment rêvé pour semer les graines du savoir.
                                      0
                                      • 1
                                      • 2