Automatiser des liens hypertextes excel avec VBA

manda54 Messages postés 2 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 14 janvier 2005 - 14 janv. 2005 à 14:22
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 - 15 janv. 2005 à 11:43
Bonjour à touts et à toutes,


Débutant dans VBA, pourriez me dépanner?


J'ai un fichier excel avec un menu qui pointe vers d'autres fichiers excel qui se trouve dans des repertoires de mon disque C: . La liaison entre les différent fichier excel se fait via des liens hypertextes.
Mon problème c'est:
- si je déplace certains fichiers excel dans un autre repertoire par exemple le d:, je perds les liens. Je suis obligé de changer manuellement mes liens hypertexte entre mon fichier menu et les fichiers déplacés.


Existe-til une soliution en vba ? Mon but c'est quand je clique sur un bouton dans mon fichier excel menu, je voudrai que le chemin du fichier excel de pointage soit calculé et retrouvé dynamiquement, sans que j'ai a remodifier manuellment les liens hypertexte de mes fichiers excel.


Merci d'avance pour vos suggestions.

1 réponse

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
15 janv. 2005 à 11:43
La grosse difficulté de ton problème est qu'il faudrait pouvoir trouver le répertoire dans lequel tu as déplacé ton fichier cible. Ca peut s'avérer long de parcourir tout le disque pour le retrouver, et de plus, si tu as 2 fichiers du même nom, lequel choisir ?

Je te propose tjs ça :

Sub gsub_test()
Dim lh As Hyperlink
Dim li_pos As Integer
Dim ls_File As String
Dim i As Integer
Dim li_reponse As Integer
For Each lh In Hyperlinks
'Extrait le nom du fichier à partir du nom complet pointé par le lien
li_pos = Len(lh.Address) - InStrRev(lh.Address, "")
ls_File = Right(lh.Address, li_pos)

With Application.FileSearch
'Cherche ce fichier
.Filename = ls_File
'Parcourt tout le C:
.LookIn = "c:"
.SearchSubFolders = True 'Parcourt des sous-répertoires
.Execute
'Détermine le nb de fichiers trouvés
If .FoundFiles.Count > 1 Then
'Si il y a plusieurs fichiers, on propose chaque fichier
For i = 1 To .FoundFiles.Count
li_reponse = MsgBox("Choisir :" & vbCrLf & .FoundFiles(i), vbYesNo)
If li_reponse = vbYes Then
'Si un fichier est choisi, on l'affecte au lien
lh.Address = .FoundFiles(i)
Exit For
End If
Next i
Else
'Affecte au lien si un seul fichier trouvé If .FoundFiles.Count 1 Then lh.Address .FoundFiles(i)
End If
End With
Next lh
0
Rejoignez-nous