XL 2016 VBA - Comment empêcher Excel de modifier les liens Hypertexte à l'enregistrement

Dudu2

XLDnaute Barbatruc
Bonjour,

Lorsque le lien hypertexte et le classeur partagent le même début de chemin absolu, à l'enregistrement du classeur, Excel supprime la partie commune du chemin du lien hypertexte qui devient alors un chemin relatif. Et franchement de quoi se mêle-t-il ?!

Car si on utilise ces hyperliens dans un autre contexte (déplacement du classeur, utilisation par un autre classeur), leur relativité n'est plus valable et les liens sont évidemment inopérants.

Démonstration de la modification par Excel des Hyperliens dans le fichier joint.
Et demande d'aide pour savoir si on peut contourner ce comportement
1622111860123.gif
d'Excel
.
Merci par avance.
 

Pièces jointes

  • TestHyperlien.xlsm
    19.6 KB · Affichages: 24
Dernière édition:
Solution
On devrait normalement pouvoir l'attaquer en lecture écriture avec la propriété application.defaultweboptions ou par l'objet weboptions du classeur, je regarde comment et si on peut.
C'est peut être aussi une option d'enregistrement, je regarde si elle est documentée

@+

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

A part passer par la formule HYPERLINK je ne vois pas sauf à reconstruire tous les liens à l'ouverture du classeur.
VB:
ActiveSheet.Range("E6").Formula = "=HYPERLINK(""" & FichierPhoto & """,""photo"")"

Curieux de voir si une solution simple va émerger :)

Cordialement
 

Dudu2

XLDnaute Barbatruc
Bonjour @Roblochon,

L'alternative que tu proposes pourrait être une solution. Sachant que pour exploiter le lien par VBA il faut évidemment parser la formule, ce qui n'est pas bien compliqué.

Je vais quand même attendre de voir si une autre solution pointe à l'horizon.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
On devrait normalement pouvoir l'attaquer en lecture écriture avec la propriété application.defaultweboptions ou par l'objet weboptions du classeur, je regarde comment et si on peut.
C'est peut être aussi une option d'enregistrement, je regarde si elle est documentée

@+
 

Dudu2

XLDnaute Barbatruc
Tu as raison...
VB:
Dim objAppWebOptions As Object
  
Set objAppWebOptions = Application.DefaultWebOptions
objAppWebOptions.UpdateLinksOnSave = False
Le problème c'est que c'est une option Application et non Workbook.
Donc elle va rester permanente. Mais à la limite je trouve que c'est mieux car Excel n'a pas à bricoler les Hyperliens.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
En cherchant dans les docs microsoft, j'ai trouvé cela, ça fonctionne
Application.DefaultWebOptions.UpdateLinksOnSave = False
Application.DefaultWebOptions n'est finalement pas si en lecture seule que ça puisqu'on peut attaquer ses dépendances.
 

Dudu2

XLDnaute Barbatruc
En tous cas, quand c'est fait manuellement, l'effet est aussi général.
Dans le pire des cas, si on veut ne pas impacter les options par défaut ou courantes:
VB:
    'https://www.excel-downloads.com/threads/vba-comment-empecher-excel-de-modifier-les-liens-hypertexte-a-lenregistrement.20057520
    Dim UpdateLinksOnSave As Boolean
    
    'Sauvegarde de l'option Fichier/Options/Options avancées/Options Web/"Mettre à jour les liens avant enregistrement"
    UpdateLinksOnSave = Application.DefaultWebOptions.UpdateLinksOnSave
    
    'False pour éviter de rendre relatifs les liens partageant le même chemin que le classeur
    Application.DefaultWebOptions.UpdateLinksOnSave = False
    
    '-------------------------
    'Enregistrement du fichier
    '-------------------------
    ThisWorkbook.Save
    
    'Restoration de l'option Fichier/Options/Options avancées/Options Web/"Mettre à jour les liens avant enregistrement"
    Application.DefaultWebOptions.UpdateLinksOnSave = UpdateLinksOnSave
 

Pièces jointes

  • VBA - Comment empêcher Excel de modifier les liens Hypertexte à l'enregistrement.xlsm
    20.6 KB · Affichages: 2
Dernière édition:

Dudu2

XLDnaute Barbatruc
J'ai modifié et repris ton instruction:
VB:
Application.DefaultWebOptions.UpdateLinksOnSave = False
C'est un peu un tout petit peu plus simple que de créer l'objet Application.DefaultWebOptions. et de définir l'option UpdateLinksOnSave.

Par contre ça ne change rien au problème que cette modif est générale et qu'il faut éventuellement la restorer si on veut garder les options Excel en cours.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
de mémoire, en passant par un objet classeur.weboptions, on récupère un objet comprenant les propriétés weboptions classeur et defaultweboptions héritées de l'application, à voir si on peut accéder en écriture au UpdateLinksOnSave hérité sans toucher au paramètre par défaut.

Bien cordialement, @+
 

Dudu2

XLDnaute Barbatruc
Ce serait logique de penser que le Workbook.WebOptions hérite des settings de l'Application mais hélas, la propriété UpdateLinksOnSave n'est pas reconnue au niveau Workbook.WebOptions.
Et Workbook.DefaultWebOptions n'existe pas et c'est normal.
D'ailleurs niveau Application il y a .WebOptions et .DefaultWebOptions. Ceci explique sans doute cela.

Par contre ce qui n'est pas très logique c'est de ne pas avoir les propriétés du .DefaultWebOptions dans le .WebOptions.
 
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour le fil, le forum

Ce serait logique de penser que le Workbook.WebOptions hérite des settings de l'Application mais hélas, la propriété UpdateLinksOnSave n'est pas reconnue au niveau Workbook.WebOptions.
Et Workbook.DefaultWebOptions n'existe pas et c'est normal.
D'ailleurs niveau Application il y a .WebOptions et .DefaultWebOptions. Ceci explique sans doute cela.

Par contre ce qui n'est pas très logique c'est de ne pas avoir les propriétés du .DefaultWebOptions dans le .WebOptions.
oui, elles n'y sont pas toutes, encore une incohérence quoiqu'il y ait certainement une raison mais je ne vois pas laquelle.(peut être un ajout plus tardif et une implémentation bancale de la propriété UpdateLinksOnSave, Vba n'étant pas une priorité de Microsoft)

Bien cordialement, @+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 244
Messages
2 086 554
Membres
103 246
dernier inscrit
blablasss