Modification de la cible d'un lien hypertexte par macro
Résolu
MeuhMeuh07
-
pilas31 Messages postés 1878 Statut Contributeur -
pilas31 Messages postés 1878 Statut Contributeur -
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
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
-
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.-
-
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 -
-
-
-