Lien hypertexte vers onglets masqués : erreur d'exécution 9

Résolu/Fermé
Marine - 18 mars 2015 à 11:47
 Marine - 18 mars 2015 à 14:35
Bonjour à tous !

J'ai un petit souci avec une macro que j'ai créée...

Je vous explique le contexte : j'ai un onglet Sommaire avec une liste de liens hypertextes qui renvoient à d'autres onglets, qui sont masqués.
Vu que ces onglets sont masqués, j'ai d'abord eu un problème pour faire fonctionner les liens hypertextes présent dans le Sommaire. J'ai donc créé cette macro (que j'ai trouvée sur un forum) :

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim s As String
With Sheets(Split(Target.SubAddress, "!")(0))
If .Visible = False Then
.Visible = True
Application.Goto .Range(Split(Target.SubAddress, "!")(1))
End If
End With
End Sub


Apparemment cette macro a résolu les problèmes de pas mal de gens dans le même cas que moi, mais pour ma part ça m'affiche une erreur d'exécution 9 "L'indice n'appartient pas à la sélection". Apparemment c'est la ligne
With Sheets(Split(Target.SubAddress, "!")(0))
qui pose problème.

Des idées ? Merci ;)

A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 mars 2015 à 12:44
Bonjour,

Pouvons nous faire un test, pour voir ce qui ne va pas?

Remplace le code donné dans ton message par :
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
MsgBox Target.SubAddress
MsgBox Split(Target.SubAddress, "!")(0)
End Sub 


Et reviens nous donner le contenu exact des deux messages qui apparaissent lors d'1 clic sur un de tes liens
0
J'ai testé ton code Pijaku.
Les boîtes de dialogue me renvoient :
'TER-Isolat° combles toiture'!A1
'TER-Isolat° combles toiture'

Autrement dit, le nom de la feuille à laquelle je veux accéder. Ca t"indique quelque chose ? Je débute en VBA ;)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 mars 2015 à 12:46
Bonjour,

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim s As String
    Dim cellules As String
    Dim Feuille As String
    Dim lienSplit() As String
    
    lienSplit = Split(Target.SubAddress, "!")
    If UBound(lienSplit) >= 1 Then
        Feuille = lienSplit(0)
        cellules = lienSplit(1)
        With Sheets(Feuille)
        If .Visible = False Then
        .Visible = True
        Application.Goto .Range(cellules)
        End If
        End With
    Else
     MsgBox ("Lien non valide... " & Target.SubAddress)
    End If
End Sub



0
J'ai testé ton code jordane45. Malheureusement ça ne fonctionne pas :'(
Toujours la même erreur 9, pour la ligne
With Sheets(Feuille)
visiblement
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743 > Marine
18 mars 2015 à 13:55
Peut être :
- erreur d'orthographe entre le nom réel de la feuille et celui stocké dans l'hyperlien,
- les simple quote dans le nom de la feuille : '
si c'est la seconde solution (je n'y crois pas plus que cela...), essaye ceci :
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim s As String
    Dim cellules As String
    Dim Feuille As String
    Dim lienSplit() As String
    
    lienSplit = Split(Target.SubAddress, "!")
    If UBound(lienSplit) >= 1 Then
        Feuille = Replace(lienSplit(0), "'", "")
        cellules = lienSplit(1)
        With Sheets(Feuille)
        If .Visible = False Then
        .Visible = True
        Application.Goto .Range(cellules)
        End If
        End With
    Else
     MsgBox ("Lien non valide... " & Target.SubAddress)
    End If
End Sub
0
Marine > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
18 mars 2015 à 14:05
J'ai copié ton code et... Houra, ça marche !!! :D
Merci infiniment, je suis bloquée là-dessus depuis ce matin !
Tu me sauves ma journée pijaku :)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 mars 2015 à 13:59
Code avec vérification de l'existence de la feuille ...
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim s As String
    Dim cellules As String
    Dim Feuille As String
    Dim lienSplit() As String
    
    lienSplit = Split(Target.SubAddress, "!")
    If UBound(lienSplit) >= 1 Then
        Feuille = lienSplit(0)
        cellules = lienSplit(1)
        If FExist(Feuille) Then
            With Sheets(Feuille)
                If .Visible = False Then
                    .Visible = True
                    Application.Goto .Range(cellules)
                End If
            End With
        Else
            x = MsgBox("La feuille " & Feuille & " n'existe pas !", vbCritical, "Error")
        End If
    Else
     MsgBox ("Lien non valide... " & Target.SubAddress)
    End If
End Sub

Function FExist(NomF As String) As Boolean ' test si la feuille existe
Application.ScreenUpdating = False
On Error Resume Next
FExist = Not Sheets(NomF) Is Nothing
Application.ScreenUpdating = True
End Function



0
Bizarre bizarre, en écrivant ton code jordane45 j'ai un message d'erreur me disant que ma feuille n'existe pas, quelque soit le lien sur lequel je clique...

Pourtant le code de pijaku marche parfaitement, c'est donc que ma feuille existe !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743 > Marine
18 mars 2015 à 14:26
Oui, ta feuille existe, mais elle est référencée, dans l'hyperlink, entourée par des simple quoite.
En clair, dans ton lien, Feuil2 est notée 'Feuil2'.
Or, bien évidemment 'Feuil2' n'existe pas...
Il suffit donc (et c'est ce que fait mon code) d'enlever les ' :
Feuille = Replace(lienSplit(0), "'", "")
0
Ah d'accord ! Oui effectivement c'est bien une simple histoire de guillemets, dû au fait que j'ai des espaces dans le nom de mes onglets.
Ca marche super maintenant, merci beaucoup :)
0