manda54
Messages postés2Date d'inscriptionmardi 11 janvier 2005StatutMembreDernière intervention14 janvier 2005
-
14 janv. 2005 à 14:22
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDerniè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.
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 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