Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 suivre un lien hypertexte en VBA

_DIB_

XLDnaute Nouveau
Bonjour,

J'espère ne pas faire de doublon, j'ai cherché un peu partout mais n'ai pas trouvé de solution à mon problème, que voici...

J'ai créé des liens hypertextes grâce à une macro (macro_A) en VBA en utilisant le code :
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="yyy"
A partir d'une autre macro (macro_B), je souhaite suivre certains de ces liens en VBA en utilisant le code :
ActiveSheet.Range("B7").Hyperlinks(1).Follow NewWindow:=False

Mon problème est que le code pour suivre le lien fonctionne lorsqu'il est dans la même macro qui a créé les liens, mais ne fonctionnent pas lorsqu'il est dans une autre macro.

Précisions :
  • Les liens pointent vers un autre onglet du même fichier.
  • Les liens hypertextes sont bien créés, ils existent et fonctionnent en direct dans le fichier.
  • J'ai fait un test avec ActiveSheet.Hyperlinks.Count dans Macro_B pour m'assurer qu'une fois sortie de Macro_A et entré dans Macro_B, mes liens existaient toujours (pour VBA), et le résultat et positif.
  • Macro_A et Macro_B sont des Public Sub
Solution de contournement :
ActiveSheet.Hyperlinks.Add Anchor:=Range("B7"), Address:=ActiveSheet.Range("B7").Hyperlinks(1).Address, SubAddress:=ActiveSheet.Range("B7").Hyperlinks(1).SubAddress
ActiveSheet.Range("B7").Hyperlinks(1).Follow NewWindow:=False
Pour l'instant, je me contente de cette solution de contournement, qui recréé le lien existant dans la macro qui demande à le suivre. Mais cela alourdi considérablement mon code (étant donné que cette partie est inclue dans une boucle qui peut compter jusqu'à 100 éléments pour l'instant). Et puis c'est idiot de recréer un lien existant !

Si quelqu'un a une idée pour éviter cette hérésie ou m'expliquer ce que j'ai loupé pour qu'Excel ne suive pas un lien créé par une autre macro.
J'espère avoir exposé mon problème clairement.
Merci d'avance.
 
Solution
Bonjour _DIB_, bienvenue sur XLD,

Voyez le fichier joint et ces 2 macros :
VB:
Sub Creer_lien()
ActiveSheet.Hyperlinks.Add Range("B7"), "", "Feuil2!C3"
End Sub

Sub Suivre()
Application.Goto Evaluate(Range("B7").Hyperlinks(1).SubAddress)
End Sub
A+

job75

XLDnaute Barbatruc
Bonjour _DIB_, bienvenue sur XLD,

Voyez le fichier joint et ces 2 macros :
VB:
Sub Creer_lien()
ActiveSheet.Hyperlinks.Add Range("B7"), "", "Feuil2!C3"
End Sub

Sub Suivre()
Application.Goto Evaluate(Range("B7").Hyperlinks(1).SubAddress)
End Sub
A+
 

Pièces jointes

  • Lien(1).xlsm
    17.5 KB · Affichages: 32

_DIB_

XLDnaute Nouveau
Bonjour,

Désolée pour mon retour tardif, j'étais en week-end en famille...

Un grand merci pour cette réponse simple et efficace ! J'ai inclus ta solution dans mon code complet et cela fonctionne à la perfection.

Je ne connaissais pas la fonction "Evaluate" et je ne sais pas si j'aurai pensé à combiner avec "Goto".
Si je comprend bien, la fonction "Evaluate" va tester une propriété ou valeur ou autre d'une cellule. Et comme là, on lui demande un lien qu'il trouve, Goto va suivre le lien. C'est très schématique comme explication, mais ai-je bien compris l'idée ?

En tous cas, mille MERCIS ! Cela fonctionne !
Dès que j'ai trouvé le bouton "résolu" du post, promis je clique dessus

A bientôt pour de nouvelles aventures...
 

Discussions similaires

Réponses
21
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…