Modification de la cible d'un lien hypertexte par macro

Résolu/Fermé
-
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
-
Bonsoir à tous,

Je suis actuellement à la recherche d'une macro qui me permettrait de modifier la cible de plusieurs liens hypertextes dans une même feuille excel. Le plus important à savoir est que le texte affiché dans la cellule contenant le lien hypertexte est 1 et non pas le chemin d'accès du fichier. Donc je ne peux pas juste faire un "Find/Replace" si mes connaissances sont bonnes.

J'ai trouvé une macro que je vous mets ci-dessous mais qui modifie seulement le "texte à afficher" et non pas la cible réelle du lien.

Sub HyperLinkChange()
Dim oldtext As String
Dim newtext As String
Dim h As Hyperlink

' These can be any text portion of a hyperlink, such as ".com" or ".org".
oldtext = ""
newtext = ""

' Check all hyperlinks on active sheet.
For Each h In ActiveSheet.Hyperlinks
x = InStr(1, h.Address, oldtext)
If x > 0 Then
If h.TextToDisplay = h.Address Then
h.TextToDisplay = newtext
End If
h.Address = Application.WorksheetFunction. _
Substitute(h.Address, oldtext, newtext)
End If
Next
End Sub

Malheureusement mes connaissances en VBA sont un peu faibles... Est-ce que l'un d'entre vous connaîtrait une macro ou est calé(e) en VBA??

Je suis sur excel 2010 pour info...

Si vous avez des questions n'hésitez pas. J'espère avoir été à peu près clair ^^

Je m'excuse par avance si il y a déjà un topic la dessus, mais j'ai pas trouvé...

Merci par avance à tous

Bonne soirée

Aymeric

1 réponse

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
625
Bonjour,

Cette macro ne modifie pas que le texte à afficher, elle modifie aussi le texte de la cible du lien.
Le lien lui même est dans h.Address
le texte est dans h.TextToDisplay

Donc en modifiant légèrement cette macro, voila une version qui doit fonctionner :
Sub HyperLinkChange()
Dim oldtext As String
Dim newtext As String
Dim h As Hyperlink

' These can be any text portion of a hyperlink, such as ".com" or ".org".
oldtext = "texte à remplacer dans le lien"
newtext = "texte de remplacement"

' Check all hyperlinks on active sheet.
For Each h In ActiveSheet.Hyperlinks
x = InStr(1, h.Address, oldtext)
If x > 0 Then
h.Address = Application.WorksheetFunction. _
Substitute(h.Address, oldtext, newtext)
End If
Next
End Sub

Ik suffit de remplacer les valeurs de oldtext et newtext pas les chaines de caractères souhaitées.
Ok, merci pour l'info, je vais la tester!
Je l'ai testée... Pour 1 ou 2 liens, ça a marché puis les autres non. Je l'ai relancé plusieurs fois et à chaque fois un ou deux liens étaient mis à jour. Et maintenant, j'ai un message d'erreur : run-time error '7' Out of memory. Quand je clique sur "debug", il me surligne en jaune " h.Address = Application.WorksheetFunction. _Substitute(h.Address, oldtext, newtext). On dirait que la macro n'arrive pas à avancer.

En mode "debug", lorsque je met le curseur sur x, il vaut 18...

Est-ce que cela peut provenir du fait que le old text et new text sont trop longs?

Merci encore
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
625
Bonjour,

Je n'arrive pas a reproduire cette erreur.
Par contre, juste une précision :
h.Address contient le chemin vers le document cible.
S'il s'agit d'un lien vers des cellules du classeur lui même, la cible du lien est dans h.SubAddress
Dans ce cas, il faut modifier la macro.

Cdlt
Bonjour,

Ok pour toutes ces infos. Les liens font référence à des fichiers PDF dans un dossier.

Quand j'ai raccourci le chemin d'accès à changer, apparemment ça a marché. Peut être que mon ordi n'est pas assez de mémoire pour faire tourner la macro...

En tout cas, je te remercie

Bonne journée
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
625
Oui en fait je viens de tester avec un chemin qui fait plus de 255 caractères et j'ai bien la même erreur.
Donc voila une info intéressante : les chemins dans les hyperliens ne peuvent pas faire plus de 255 caractères.

Bonne journée