VBA: Appeler lien hypertexte génèré par une formule

pierrot6245

XLDnaute Nouveau
Bonjour,

j'ai un fichier dans lequel je génère environ 200 liens hypertextes avec la formule lien hypertexte, chacun pointant vers un fichier excel fournissant des données à mon fichier.

Je souhaiterais une macro qui puisse ouvrir chaque fichier afin de mettre à jour mes données.
Concrètement j'aurais besoin d'un code qui sélectionne une cellule donnée et "clique sur le lien hypertexte" qui s'y trouve.

J'ai testé des codes du type:

Range("A1").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

=> le problème c'est que ce type de code ne semble fonctionner que si le lien hypertexte est contenu dans la cellule en aillant été créé via un clic droit, lien hypertexte.

J'aurais donc besoin d'un équivalent mais pour les liens générés via la formule lien hypertexte.


Merci d'avance à qui pourra m'aider!
 

job75

XLDnaute Barbatruc
Re : VBA: Appeler lien hypertexte génèré par une formule

Bonsoir pierrot6245, bienvenue sur XLD,

Avec votre formule en A1 exécutez cette macro :

Code:
Sub SuivreLien()
Dim c As Range
Set c = [A1] 'à adapter
If c.Formula Like "=HYPERLINK(""*" Then _
ThisWorkbook.FollowHyperlink Split(c.Formula, """")(1)
End Sub
Il y aura toujours un message d'avertissement.

Pour l'éviter il faut bricoler la base de registre, à voir sur le forum.

Edit : dans la formule, le chemin d'accès est supposé écrit en dur, entre guillemets.

A+
 
Dernière édition:

pierrot6245

XLDnaute Nouveau
Re : VBA: Appeler lien hypertexte génèré par une formule

Bonjour Job75,

merci pour la réponse et la bienvenue :)

mes formules de liens hypertextes ne sont pas écrites en dur entre guillemets mais sont du type:
=LIEN_HYPERTEXTE(CONCATENER(I9;J9;K9);K9)

Du coup en testant le code, rien ne se passe, normal. J'ai tenté d'adapter la partie If c.Formula Like "=HYPERLINK(""*"
Mais sans succès.
Une suggestion?
 

job75

XLDnaute Barbatruc
Re : VBA: Appeler lien hypertexte génèré par une formule

Bonjour pierrot6245,

Il suffit d'évaluer le 1er argument de la fonction LIEN_HYPERTEXTE :

Code:
Sub SuivreLien()
Dim c As Range, f$, n%
Set c = [A1] 'à adapter
f = c.Formula
If f Like "=HYPERLINK(*" Then
  n = InStr(f, "(") + 1
  f = Mid(f, n, InStrRev(f, ",") - n)
  ThisWorkbook.FollowHyperlink Evaluate(f)
End If
End Sub
Mais attention : il faut qu'il y ait toujours le 2ème argument.

A+
 

job75

XLDnaute Barbatruc
Re : VBA: Appeler lien hypertexte génèré par une formule

Re,

Si dans le chemin une feuille et une cellule sont indiquées, par exemple ...Classeur1.xlsx#Feuil2!B3, on aura remarqué que la méthode FollowHyperlink n'active pas la feuille.

Il faut compléter la macro :

Code:
Sub SuivreLien()
Dim c As Range, f$, n%
Set c = [A1] 'à adapter
f = c.Formula
If f Like "=HYPERLINK(*" Then
  n = InStr(f, "(") + 1
  f = Evaluate(Mid(f, n, InStrRev(f, ",") - n))
  ThisWorkbook.FollowHyperlink f
  If InStr(f, "#") Then Application.Goto Evaluate(Split(f, "#")(1))
End If
End Sub
A+
 

pierrot6245

XLDnaute Nouveau
Re : VBA: Appeler lien hypertexte génèré par une formule

Re,

merci, le code fonctionne pour une cellule donnée.

Par contre j'ai des difficultés à y intégrer ma boucle (je dois couvrir les lignes 9 à 200).


Sub SuivreLien()
Dim c As Range, f$, n%
For i = 9 To 200
Set c = ["H"&i] 'à adapter => il me sort une erreur car on ne peut y écrire qu'une cellule? pas adapté à une boucle?
f = c.Formula
If f Like "=HYPERLINK(*" Then
n = InStr(f, "(") + 1 'peux tu m'expliquer précisément ce que fait cette ligne? pour bien comprendre son fonctionnement
f = Mid(f, n, InStrRev(f, ",") - n) 'peux tu m'expliquer précisément ce que fait cette ligne? pour bien comprendre son fonctionnement
ThisWorkbook.FollowHyperlink Evaluate(f)
End If
Next
End Sub
 

job75

XLDnaute Barbatruc
Re : VBA: Appeler lien hypertexte génèré par une formule

Re,

Je vois que vous êtes néophyte en VBA.

Je vous conseille de consulter l'aide VBA pour comprendre les fonctions InStr InStrRev Mid, c'est très basique et simple.

Pour la boucle c'est aussi archi classique :

Code:
Sub SuivreLien()
Dim c As Range, f$, n%
For Each c In [H9:H200]
  f = c.Formula
  If f Like "=HYPERLINK(*" Then
    n = InStr(f, "(") + 1
    f = Mid(f, n, InStrRev(f, ",") - n)
    ThisWorkbook.FollowHyperlink Evaluate(f)
  End If
Next
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine