Créer un lien hypertexte stable
Avec le réglage que nous avons vu dans la commande Outils – Options – Général, bouton « Options Web », case « Mettre à jour les liens lors de l’enregistrement », on a des liens qui soit s’actualisent toujours, soit ne s’actualisent jamais, lors du déplacement du classeur contenant les liens. Il est donc impossible de demander que seuls les liens « internes » soient actualisés lors du déplacement du classeur.
Le remède consiste à utiliser une fonction peu connue d’Excel, la fonction Lien.Hypertexte() :
 Avec les formules présentées ci-dessus sous la forme de commentaires, nous avons enfin ce que nous voulions. En effet, les liens internes (tel celui de la cellule A3) font référence au classeur dans le répertoire actif, quel qu’il soit. Les liens externes (tel celui de la cellule B1) font référence à un classeur précis logé à un endroit précis sur un disque précis, et ne seront donc pas actualisés.
Avec les formules présentées ci-dessus sous la forme de commentaires, nous avons enfin ce que nous voulions. En effet, les liens internes (tel celui de la cellule A3) font référence au classeur dans le répertoire actif, quel qu’il soit. Les liens externes (tel celui de la cellule B1) font référence à un classeur précis logé à un endroit précis sur un disque précis, et ne seront donc pas actualisés.Remarque 1 – Seul problème potentiel : si l’on renomme le classeur, actuellement Hyper2.xls, cela ne modifiera pas son nom dans la formule de la cellule A3 puisque cet argument se trouve sous la forme de texte. Il faudrait donc, idéalement, remplacer ce nom par la référence à une cellule du classeur qui afficherait – de façon dynamique – le nom courant du classeur.
Remarque 2 – Il semblerait que cela ne marche pas quand le nom du classeur et ou de la feuille comporte au moins un espace, auquel cas la référence classeur-feuille est encadrée d'apostrophes. Exemple : =lien.hypertexte("'[LE nov-déc 2006.xls]Hyper 2'!$D$1","Aller en D1").

 Enregistrons le classeur puis, avec le Gestionnaire de fichiers de Windows, déplaçons-le à la racine du disque C: et enfin ouvrons-le dans Excel. Nous constatons avec horreur que les liens ont été modifiés, ce qui ne peut que provoquer des erreurs :
Enregistrons le classeur puis, avec le Gestionnaire de fichiers de Windows, déplaçons-le à la racine du disque C: et enfin ouvrons-le dans Excel. Nous constatons avec horreur que les liens ont été modifiés, ce qui ne peut que provoquer des erreurs : Qui est le fautif ? Encore une fois un réglage par défaut d’Excel dont on a le plus grand mal à imaginer le bien-fondé...
Qui est le fautif ? Encore une fois un réglage par défaut d’Excel dont on a le plus grand mal à imaginer le bien-fondé... Dorénavant, les liens que vous définirez seront enfin stables !
Dorénavant, les liens que vous définirez seront enfin stables ! Après l’exécution de la macro VBA que nous avons écrite pour masquer l’environnement Excel, activée par le bouton ci-dessous, vous vous trouvez dans la situation suivante :
Après l’exécution de la macro VBA que nous avons écrite pour masquer l’environnement Excel, activée par le bouton ci-dessous, vous vous trouvez dans la situation suivante : Voici la macro permettant d’atteindre notre objectif. Vous noterez que nous masquons aussi la barre d’outils « Dessin » que beaucoup d’utilisateurs laissent installée par défaut :
Voici la macro permettant d’atteindre notre objectif. Vous noterez que nous masquons aussi la barre d’outils « Dessin » que beaucoup d’utilisateurs laissent installée par défaut :
 Grosso modo, partant de l’état à gauche ci-dessus, on souhaite – après traitement par la macro – parvenir au résultat à droite ci-dessus.
Grosso modo, partant de l’état à gauche ci-dessus, on souhaite – après traitement par la macro – parvenir au résultat à droite ci-dessus.

 
    
     En outre, l’identification – dans un classeur comportant de nombreuses feuilles – de toutes les cellules faisant référence à d’autres classeurs est un véritable travail de bénédictin. Sans parler du travail supplémentaire qui consistera peut-être ensuite à remplacer toutes ces références extérieures par les valeurs correspondantes si l’on souhaite « casser » les liens.
En outre, l’identification – dans un classeur comportant de nombreuses feuilles – de toutes les cellules faisant référence à d’autres classeurs est un véritable travail de bénédictin. Sans parler du travail supplémentaire qui consistera peut-être ensuite à remplacer toutes ces références extérieures par les valeurs correspondantes si l’on souhaite « casser » les liens. Si vous validez le choix de la première option, le dialogue suivant vous permet de sélectionner le classeur dont vous voulez identifier les cellules liées, et de décider ce que vous ferez une fois les liens identifiés :
Si vous validez le choix de la première option, le dialogue suivant vous permet de sélectionner le classeur dont vous voulez identifier les cellules liées, et de décider ce que vous ferez une fois les liens identifiés : A mon avis, cet add-in à lui seul justifie l’achat du Spreadsheet Assistant dont il n’est pourtant que l’une des multiples macros complémentaires.
A mon avis, cet add-in à lui seul justifie l’achat du Spreadsheet Assistant dont il n’est pourtant que l’une des multiples macros complémentaires.
    
    
 
     

