Bonjour,
Pour ma prestation, j'utilise un fichier "Chrono" qui contient l'ensemble des documents émis ainsi qu'un lien hypertexte vers le répertoire les contenant sur le serveur de mon client (adresse du type \\serveur\sous-serveur\arbo...).
Après avoir perdu plusieurs fois les liens hypertexte (remplacement du début de l'adresse réseau par une adresse du type C:\users\...), j'ai décidé de mettre en place une macro qui viendra vérifier et corriger les liens défectueux.
Pour ce faire, j'ai listé l'ensemble des répertoires peuplés par mes documents (dans le tableau de l'onglet "Liste chrono") et créé, dans l'onglet "Liens" une liste du type :
Libellé du dossier /// Adresse du dossier.
En effet, par souci de lisibilité, le dossier \\serveur\sous-serveur\VV - dossier 1\WW - dossier 2\XX - dossier 3\YY - dossier 4\ZZ - dossier contenant le document (adresse contenue dans la colonne "Adresse du dossier" est abrégé comme suit VV \ WW \ XX \ YY \ ZZ - dossier contenant le document (information dans "Libellé du dossier").
J'ai mis une validation des données pour être certain que tous les libellés qui seront renseignés par mes collègues et moi soient déjà dans la liste que j'ai établie quitte à ce que, le cas échéant, j'ajoute de nouvelles lignes à cette liste.
J'ai ensuite créé la macro qui compare la valeur de l'attribut Hyperlink(1).Adress à la colonne "Adresse du dossier" de ma liste et, lorsqu'elles différent, vient remplacer la première.
Or, lorsque je déroule la macro, une erreur apparaît : "Erreur d'exécution '9': L'indice n'appartient pas à la sélection." et je ne comprends pas pourquoi.
Ci-dessous la macro utilisée.
Cela plante au niveau de la ligne 21 (formule : "If Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then"). La ligne du talbeau qui correspond (i = 24) contient le même type de données que les 21 précédentes (les 2 premières lignes du tableau correspondent à l'en-tête du tableau). Du coup, je sèche ! Y aurait-il une bonne âme pour m'indiquer mon erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Sub MAJ_HyperText() ' ' MAJ_HyperText Macro ' Dim NbDocs, NbRef As Integer Dim Libellé, Chemin As String NbDocs = Sheets("Liste chrono").Range("D1048576").End(xlUp).Row NbRef = Sheets("Liens").Range("A1048576").End(xlUp).Row For i = 3 To NbDocs If Sheets("Liste chrono").Cells(i, 12).Value = "*" Or Sheets("Liste chrono").Cells(i, 12).Value = "?" Or IsEmpty(Sheets("Liste chrono").Cells(i, 12)) = True Then Else Libellé = Sheets("Liste chrono").Cells(i, 12).Text Chemin = Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) If Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then Sheets("Liste chrono").Hyperlinks.Add Anchor:=Cells(i, 12), Address:=Chemin, TextToDisplay:=Libellé Else End If End If Next MsgBox ("Fin de la mise à jour des liens hypertexte") ' End Sub
D'avance, merci. Yann.
Partager