Modifier liens hypertexte

Bonjour à tous,

J'utilise un fichier excel comme base de données documentaire afin de faciliter l'ouverture de spécifications techniques. Ce fichier contient des 100ène de liens vers des pdf et chaque ligne du tableau renvoie vers le document en question via un lien hypertexte. Ces documents sont stockés sur un serveur dans un dossier spécifique. Ce dossier spécifique contenant le fichier excel et tous les dossiers présents dans ce dossier ont été déplacés et donc les liens hypertextes ne sont plus bons.

Je souhaiterai développer une macro pour modifier tous mes liens afin de ne pas les modifier un par un avec clic droit, modifier le lien hypertexte, etc...

Seule une partie des liens n'est plus correct du fait du déplacement du dossier spécifique. Le reste du chemin pointant vers les fichiers reste identique.

J'ai recherché sur le forum avant de réaliser ce post et différents utilisateurs ont des problèmes similaires au miens.

J'ai essayé les solutions proposées en réponse en l'adaptant à mon cas mais sans succès.

Les posts sont les suivants :

https://forum.excel-pratique.com/excel/macro-pour-modifier-lien-hypertexte-t43527.html

https://forum.excel-pratique.com/excel/chemin-incorrect-avec-un-lien-hypertext-t44559.html#p249220

https://forum.excel-pratique.com/excel/mise-a-jour-des-liens-hypertextes-t32326.html#p183255

Je vous joins un exemple du fichier concerné pour plus de compréhension.

En vous remerciant par avance de vos précieuses réponses.

J-L

78fichier-test.xlsx (10.35 Ko)

Si tu veux, tu peux le faire via VBA avec le code suivant:

Sub UpdateHyperlinks()

chemin_a_remplacer = "C:\test\" 'partie du chemin à remplacer
nouveau_chemin = "D:\test2\" 'le nouveau chemin

For Each x In Selection.Cells

If x.Hyperlinks.Count > 0 Then
        old_link = x.Hyperlinks(1).Address
        old_text = x.Hyperlinks(1).TextToDisplay 'si nécessaire

        x.Hyperlinks(1).Address = Replace(old_link, chemin_a_remplacer, nouveau_chemin)
        x.Hyperlinks(1).TextToDisplay = Replace(old_text, chemin_a_remplacer, nouveau_chemin) 'si nécessaire

Else
End If
Next x

End Sub

Il faut juste adapter les paramètres selon ton besoin...

Cela modifie le hyperlien et, si nécessaire, le texte affiché dans la celulle...

Bonjour Excel-Malin,

J'ai essayé ta réponse mais cela ne modifie pas les liens.

Je n'ai pas une grosse compétence en VBA mais ne faut-il pas déclarer les variables en début du code ?

J-L 83 a écrit :

Bonjour Excel-Malin,

J'ai essayé ta réponse mais cela ne modifie pas les liens.

Je n'ai pas une grosse compétence en VBA mais ne faut-il pas déclarer les variables en début du code ?

Le code que j'ai écrit est un code plus général (et n'est donc pas spécifique à ton fichier)

2 choses:

1) tu dois adapter les chemins au début du code. J'ai donné juste des exemples.

chemin_a_remplacer = "C:\test\" 'partie du chemin à remplacer
nouveau_chemin = "D:\test2\" 'le nouveau chemin

2) le code modifie les cellules sélectionnées - donc tu dois sélectionner la liste des cellules contenant les hyperliens et lancer la macro pour cette sélection-là.

C'est bien entendu ce que j'ai fait mais sans résultat...


Ne faut-il pas mettre en début du code dim .... As string et etc. ?

J-L 83 a écrit :

Ne faut-il pas mettre en début du code dim .... As string et etc. ?

Si tu utilises "Option Explicit" alors en effet, il faut mettre ceci:

Option Explicit

Sub UpdateHyperlinks()
Dim chemin_a_remplacer As String
Dim nouveau_chemin As String
Dim old_link As String
Dim old_text As String
Dim x As Range

chemin_a_remplacer = "C:\test\" 'partie du chemin à remplacer
nouveau_chemin = "D:\test2\" 'le nouveau chemin

For Each x In Selection.Cells

If x.Hyperlinks.Count > 0 Then
        old_link = x.Hyperlinks(1).Address
        old_text = x.Hyperlinks(1).TextToDisplay 'si nécessaire

        x.Hyperlinks(1).Address = Replace(old_link, chemin_a_remplacer, nouveau_chemin)
        x.Hyperlinks(1).TextToDisplay = Replace(old_text, chemin_a_remplacer, nouveau_chemin) 'si nécessaire

Else
End If
Next x

End Sub

Je viens de le tester et chez moi, cela fonctionne.

Encore une remarque, c'est "case sensitive"...

Désolé mais cela ne fonctionne toujours pas de mon côté.

Je vous joins le fichier excel d'exemple avec la macro saisie ainsi que les dossiers pour simuler le changement de liens.

Merci pour vos réponses.

91test-liens.zip (20.46 Ko)

Quelqu’un aurait-il une solution SVP

HELP!!

Bonjour,

A la lecture de la macro ... il n' y a pas de raison que cela ne fonctionne pas ...

Cela dit, cette macro utilise Selection comme plage ... donc ... avant de lancer la macro ... il faut sélectionner soit au clavier, soit avec la souris ...

la plage sur laquelle la macro doit modifier les liens ...

Bonjour James007,

J'ai bien sélectionné dans la feuille les cellules contenant les liens et cela ne fonctionne pas...

C'est pour cela que j'ai fais un zip contenant le fichier excel avec la macro ainsi que 2 structures de dossiers pour faire un exemple concret.

Y a-t-il une histoire de config dans les options de Excel ?

Pourtant j'autorise bien l'exécution des macros dans excel : Option -> centre de gestion de la confidentialité -> Paramètres des macros -> Activer toutes les macros.

Salut,

dans ton exemple, tu as mis les valeurs absolues (contenant le disque D:)

chemin_a_remplacer = "D:\test lien\" 'partie du chemin à remplacer
nouveau_chemin = "D:\test lien2\" 'le nouveau chemin

Je ne sais pas où les fichiers se situent sur ton ordinateur mais si j'unzippe ton fichier, les liens "d'origine" dans ton excel sont relatifs.

Si j'enlève la référence au disque et si je garde seulement la partie relative du lien qui est utilisée d'origine, mon code fonctionne

Remplace les deux lignes citées plus haut par ceci, et ton exemple va fonctionner:

chemin_a_remplacer = "test lien\" 'partie du chemin à remplacer
nouveau_chemin = "test lien2\" 'le nouveau chemin

A faire:

Dans ton fichier "réel' (donc pas celui de test): clique droit sur le lien --> modifier le lien --> regarde le lien comme il est indiqué dans "Adresse". Et c'est une partie de cette valeur que tu dois mettre dans la variable "chemin_a_remplacer" de mon code.

Dans ton test, mon code ne trouve tout simplement pas de chaîne "D:\test lien\" et ne peut donc pas la remplacer (car le lien utilisé est: "test lien\X\X1.pdf"

Une dernière remarque: il se peut que tu doives remplacer l'espace (" ") par "%20" mais cela tu verras si la possibilité avec espace ne marche pas.

Donc en gros:

- le code fonctionne, tu dois seulement remplir EXACTEMENT le contenu des variables "chemin_a_remplacer" et "nouveau_chemin"

- tu trouveras le chemin existant EXACT dans: clique droit sur le lien --> modifier le lien --> regarde le lien comme il est indiqué dans "Adresse"

Bonjour Excel-malin !

Excellent !!!!! Tu viens de me sauver...

En effet, c'est bien à cause du chemin déclaré que la macro ne changer pas les liens.

Merci pour l'astuce pour visualiser le chemin du lien avec les %20. Cela m'a permis de voir qu'il fallait aussi modifier les sens des barres (/ au lieu de \).

J'ai testé sur mon fichier original et ça marche.

Merci !

De rien... Je suis content d'avoir pu aider.

Bonjour JL 83

Comment as tu fais pour lié le lien hypertexte au fichier situé sur le serveur ? Tu as seulement définis le chemin d'accès tout simplement où tu as crée une Macro.

J'aimerais que toutes les personnes qui ont le fichier excel et qui ont accès au serveur puissent ouvrir directement les fichiers à travers Excel.

Merci de ton aide

Rechercher des sujets similaires à "modifier liens hypertexte"