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. Salut,

    Tu as masqué tes feuilles, le lien hypertexte ne peut les ouvrir, il faut passer par du VBA
    1
    1. Merci Mike,

      Oui je m'en doutais et je le redoutais car je suis au niveau 0,5 en VBA ...

      Qqu'un peut m'aider avec les étapes à suivre en VBA?

      Gilles
      0
      1. Re,

        il faudrait voir un exemple de ton fichier pour écrire un bout de code adapté.
        pour joindre ton fichier, clic sur ce lien/parcourir pour sélectionner le fichier/créer le lien et coller dans un post le lien généré

        https://www.cjoint.com/

        pour ce soir je ne vais pas tarder décrocher
        0
        1. Re,

          allez je vais te faire un code vite fait, sais tu faire des listes déroulantes (liste de validation)
          0
          1. Fantastique Mike, merci. Oui les listes de validation je connais!
            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. 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. 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. 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. 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. 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. 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. 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. 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,

                                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. 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,

                                    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
                                    • 2