IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer un hyperlien vers une feuille [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut Créer un hyperlien vers une feuille
    Je veux créer un hyperlien pour naviguer vers un endroit spécifique dans le même fichier.

    Super simple... sauf la partie où je dois définir le lien en tant que tel.

    Si je le fais manuellement (pas de VBA), avec la formule HYPERLINK, ça ne fonctionne jamais, j'ai toujours un message d'erreur "Cannot open the specified file".
    La formule est la suivante: =HYPERLINK(INDIRECT(A6&"!$A$1"))
    en fait, A6 équivaut à la celulle sur la même ligne, une colonne à gauche.
    (offset(0,-1))
    Si je fais le lien avec clic-droit, hyperlink, ça fonctionne à merveille.

    Ce que je veux, c'est que ma dernière cellule contenant quelque chose, dans la colonne B, contienne l'hyperlien défini par ma formule.

    Mais voilà... je ne sais pas comment ajouter la formule, encore moins comment la rendre "variable" en fonction d'où je suis.

    J'avais commencé avec ça sans trop savoir comment terminer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub hyperlien()
     
    With Sheets("Index")
     
    .Range("B5").End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        Hyperlink.Add.ActiveCell, formula=
    Puis j'ai essayé ça:
    ActiveCell.Value = "=HYPERLINK(INDIRECT(A6&"!$A$1""))"
    au lieu de la dernière ligne, mais j'ai un message d'erreur "Expected: end of statement"
    Et ça avec le même résultat:
    ActiveCell.formula="HYPERLINK(INDIRECT(A6&"!$A$1"))"

    La feuille de calcul contient la liste de mes projets, les titre sur la ligne 5. La colonne A contient le #du projet, et les autres feuilles de calcul dans le fichier, les endroits où je veux aller, portent ce nom.

    J'ai simplement besoin de me positionner sur, exemple, "'F12705'!A1", en cliquant sur le lien.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour

    une chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sh As Worksheet
     
    Set sh = ThisWorkbook.Sheets("Index") ' définir ici la feuille lien.
     
     
     
     sh.Hyperlinks.Add sh.Range("B5").End(xlDown).Offset(1, 0), "", "'F12705'!A1", , "MonLien"

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    merci, mais ce que je veux, c'est que le lien change selon ce qui est dans le cellule de la colonne A.
    "'F12705'!A1" et "MonLien" varie à chaque ligne.

    Je me positionne sur la cellule Bx et je veux qu'y apparaisse le lien fonction de Ax!A1, et que la description soit telle que ce qui apparait dans "Ax!A1!", où Ax est le nom de l'onglet (référencé dans les cellules de la colonne A dans 'Index').

    Ce pourquoi j'essayais une formule =hyperlink avec indirect()

    C'est ça qui me cause de la difficulté, comment faire varier l'hyperlien en fonction d'une autre cellule.

    Désolé de ne pas avoir été plus clair.

    J'ai essayé de définir une variable "lastindex" qui serait le contenu de la dernière ligne de la colonne A, espérant modifier votre ligne de code ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sh.Hyperlinks.Add sh.Range("B5").End(xlDown).Offset(1, 0), "", Lastindex&!A1, , Lastindex&!A1
    mais je n'ai pas dû déclaré ma variable correctement.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    si la variable LastIndex contient le nom de ta feuille , pour concaténer le contenu d'une variable avec du texte le texte doit être entre guillemets :


  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    Merci, j'y suis presque.
    Grâce à votre aide, je l'ai maintenant qui varie de ligne en ligne, comme il se doit. Le lien est parfait, c'est la description qui ne se fait pas comme je veux.

    Voici le code à date pour cette section.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub hyperlien()
    'Création d'un hyperlin
     
    Dim sh As Worksheet
    Dim Lastindex As String
     
        Set sh = ThisWorkbook.Sheets("Index") ' définir ici la feuille lien.
        sh.Range("A5").End(xlDown).Select
        Lastindex = ActiveCell.Value
     
        'Lastindex = sh.Cells(sh.Rows.Count, "B").End(xlUp).Row
     
        sh.Hyperlinks.Add sh.Range("B5").End(xlDown).Offset(1, 0), "", Lastindex & "!A1", , Lastindex & "!A1"
     
    End Sub
    Si le contenu de la cellule A9 est "R65424", présentement l'hyperlien me dirige sur la bonne page, mais afficher "R65424!A1" comme texte alors que je voudrais voir "Nom du projet", qui est situé sur la feuille R65424, cellule A1.

    Je vois une alternative, celle de copier le contenu de la cellule A1 de la feuille désirée (avant de renommer la feuille au numéro du projet, elle se nomme toujours "Nouveau projet") et de le coller dans la bonne cellule de ma feuille "Index", mais je me dis qu'il doit y avoir une manière plus simple?

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    Bon, je l'ai. Ça n'est peut-être pas joli, mais ça fonctionne.
    Voici la partie importante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Set sh = ThisWorkbook.Sheets("Index") ' définir ici la feuille lien.
        Sheets("Nouveau Projet").Range("A1").Copy
        sh.Range("A5").End(xlDown).Select
        Lastindex = ActiveCell.Value
        sh.Hyperlinks.Add sh.Range("B5").End(xlDown), "", Lastindex & "!A1", , Lastindex & "!A1"
        ActiveCell.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
        Sheets("Nouveau Projet").Name = Sheets("Nouveau Projet").Range("B5").Value
     
                   Application.ScreenUpdating = True
     
    End Sub


    Et la macro au complet, si nécessaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    Sub index()
    ' Indexation d'un nouveau projet
    '
    '
    Dim sh As Worksheet
    Dim Lastindex As String
     
         Sheets("Nouveau Projet").Range("B5").Copy
    With Sheets("Index")
        .Activate
        .Range("A5").End(xlDown).Select
        ActiveCell.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
        .Range("B6.J6").Copy
        .Range("A5").End(xlDown).Select
        ActiveCell.Offset(0, 1).PasteSpecial Paste:=xlPasteAll
     
     
    End With
    ' création d'un lien vers la feuille indexée
     
        Set sh = ThisWorkbook.Sheets("Index") ' définir ici la feuille lien.
        Sheets("Nouveau Projet").Range("A1").Copy
        sh.Range("A5").End(xlDown).Select
        Lastindex = ActiveCell.Value
        sh.Hyperlinks.Add sh.Range("B5").End(xlDown), "", Lastindex & "!A1", , Lastindex & "!A1"
        ActiveCell.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
        Sheets("Nouveau Projet").Name = Sheets("Nouveau Projet").Range("B5").Value
     
                   Application.ScreenUpdating = True
     
    End Sub
    Il y a un moyen pour faire plus simple?

    Merci encore de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un lien hypertexte vers une feuille nouvellement créée
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/09/2023, 12h54
  2. [XL-2007] Créer un lien hypertexte après voir enregistrer vers une feuille dans un classeur
    Par maxval18 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/02/2012, 13h30
  3. comment créer des boutons sur une feuille en utilisant eclipse
    Par ratamahatta dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/06/2006, 19h17
  4. Réponses: 8
    Dernier message: 21/04/2006, 16h50
  5. [VBA] exportation vers une feuille précise d'un fichier xls
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo