Mise à jour des liens Hypertexte de documents Word transformés en PDF

BrennusBH

XLDnaute Nouveau
Bonjour,

Je peux imaginer que le titre laisse un peu perplexe. Voilà mon problème.
J'ai développé un outil permettant de convertir des documents Word en documents PDF, plus sûrs à utiliser par le client final.
Ces documents peuvent contenir des liens hypertexte pour faire le lien avec d'autres documents Word (exemple : un document Menu réliés aux documents spécifiques).
Mon outil balaie donc le dossier saisi par l’utilisateur (et les sous-dossiers) et pour chaque document trouvé corrige les liens hypertexte pour qu'il pointe sur une PDF au lieu d'un Word (puisqu'on traite toute l'arborescence) puis sauvegarde au format PDF.

Initialement, le code utilisé était le suivant :
VB:
        Dim WordApp As Object: Dim WordDoc As Object:Dim nbHP As Long
        ' Ouverture du document word
        Set WordApp = CreateObject("word.Application")
        WordApp.Visible = False
        Set WordDoc = WordApp.Documents.Open(FichierTraite)
 
        '+---------------------------------------------------------------------------------------------+
        '! Modification des liens hypertexte pour acceder aux fichiers PDF plutot qu'aux fichiers Word !
        '+---------------------------------------------------------------------------------------------+
        nbHP = WordDoc.Hyperlinks.Count  'nombre de liens hypertextes dans le fichier word
        For j = 1 To nbHP
           WordDoc.Hyperlinks(j).Address = Replace(WordDoc.Hyperlinks(j).Address, ".docx", ".pdf")
           WordDoc.Hyperlinks(j).Address = Replace(WordDoc.Hyperlinks(j).Address, ".doc", ".pdf")
        Next j

Sur nos postes, le résultat était concluant : les documents étaient convertis en PDF et les liens en interne les reliaient correctement entre eux.
Problème : sur certains environnements du client, les liens ne fonctionnent plus. Soit ils demandent l’ouverture de Internet Explorer et les liens retour ne fonctionnent plus, soit ils sont tout simplement sans effet.

J'ai comparé avec l'ancienne version de l'outil (développé sous ACCESS) et la seule différence que j'y ai vu, c'est qu'il recréait les liens (suppression/création) au lieu de les modifier.
Je me suis donc lancé dans le correctif du code. Mais je ne vois pas pourquoi ça cloche.
J'ai balayé un certains nombre de forum, dont celui-ci dont j'ai remarqué les retours pertinents, mais je n'ai pas trouvé la solution à mon problème spécifique. Quand j'essaie des solutions proposée, ça ne fonctionne pas.

Voilà le nouveau code :
Code:
Dim WordApp As Object: Dim WordDoc As Object:Dim nbHP As Long: Dim HPAdress As String: Dim TexteSel As Object
        ' Ouverture du document word
        Set WordApp = CreateObject("word.Application")
        WordApp.Visible = False
        Set WordDoc = WordApp.Documents.Open(FichierTraite)
 
        '+---------------------------------------------------------------------------------------------+
        '! Modification des liens hypertexte pour acceder aux fichiers PDF plutot qu'aux fichiers Word !
        '+---------------------------------------------------------------------------------------------+
        nbHP = WordDoc.Hyperlinks.Count  'nombre de liens hypertextes dans le fichier word
        For j = 1 To nbHP
           HPAdress = WordDoc.Hyperlinks(j).Address
           TexteSel = WordDoc.Hyperlinks(j).TextToDisplay
           HPAdress = Replace(HPAdress, ".docx", ".pdf")
           HPAdress = Replace(HPAdress, ".doc", ".pdf")
           WordDoc.Hyperlinks(j).Delete
           WordDoc.Hyperlinks(j).Add Anchor:=TexteSel, Address:=HPAdress
        Next j

Tel qu'il est là, je récupère l'erreur critique 91 (variable objet ou variable de bloc With non définie). Sinon, c'est le code de création du lien qui ne fonctionne plus, notamment à cause du paramètre "Anchor".

Pensez-vous pouvoir m'aider à débloquer la situation ?
Pour information, j'ai joint la totalité du code lié au bouton de mon écran.

Désolé pour ce long message mais il me semblait utile de vous expliquer l'objet réel de l'outil.

Merci d'avance de vos retours.
 

Pièces jointes

  • BtnGenerer_Click.txt
    21.7 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Bonjour,

A vue de nez et comme pour supprimer les lignes excel essayez de boucler par la fin. Logiquement si une ligne de code supprime un object quelconque, la ligne suivante ne peut plus y faire référence sans l'erreur 91.

Je n'ai pas testé, c'est juste une idée.
VB:
 For j = nbHP To 1 Step -1
           HPAdress = WordDoc.Hyperlinks(j).Address
           TexteSel = WordDoc.Hyperlinks(j).TextToDisplay
           HPAdress = Replace(HPAdress, ".docx", ".pdf")
           HPAdress = Replace(HPAdress, ".doc", ".pdf")
           WordDoc.Hyperlinks(j).Delete
           WordDoc.Hyperlinks.Add Anchor:=TexteSel, Address:=HPAdress
        Next j

Bon après-midi
 

Statistiques des forums

Discussions
298 771
Messages
1 971 605
Membres
203 412
dernier inscrit
elrico22