OVH Cloud OVH Cloud

Gros soucis avec liens hypertexte.

13 réponses
Avatar
Patrick BASTARD
Bonsoir à tous.

Mon classeur comporte une feuille "modèle" que je duplique par macro (une
copie de ce "modèle" pour chaque jour du mois).
J'utilise une plage relativement étendue, et ai choisi les liens hypertexte
pour me déplacer d'un endroit à un autre.

Sur "modèle", aucun problème.

Par contre, sur les onglets qui sont créés par copies de "modèle", (nommés
01.01.05, 02.01.05, etc...), les liens hypertexte sont bien dupliqués, mais
continuent de pointer sur les plages de "modèle".

J'ai une quarantaine de liens par onglet, 31 onglets, et me vois mal tout
réaffecter "à la mimine".

L'un d'entre vous a-t'il la solution, un lien à m'indiquer, un début de
piste ?

Je vous en remercie sincèrement par avance,

Et profite de l'occasion pour vous souhaiter ainsi qu' à vos proches et à
tous ceux qui vous sont chers...

Une Bonne et Heureuse Année 2005.

Patrick.

Version : Excel 2002, Windows XP.

3 réponses

1 2
Avatar
Patrick BASTARD
Bonsoir, François,



En fait, une seule boucle m'est utile, puisque je l'inclus dans la boucle
qui crée chacune des feuilles à partire du modèle.

Mais je te remercie cependant pour ces précisions que j'archive pour une
utilisation future.

Tous mes voeux pour l'année qui vient de poindre, à toi et à ceux qui te
sont chers.

Bien cordialement,

Patrick.


Bonsoir,

Avec les deux lignes ...
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
... l'activesheet reste inchangée


1e solution :
For Each f In ActiveWorkbook.Sheets
For Each l In f.Hyperlinks


2e solution :
For Each f In ActiveWorkbook.Sheets
f.activate

For Each l In ActiveSheet.Hyperlinks


Il y a un autre fil qui parle également des liens hypertexte. Tu y a
probablement déjà jeté un oeil.

@+
FxM






Bonsoir, Michel.

Je te remercie vivement de l'aide que tu m'apportes.
Un code prêt à servir, et avec les explications en plus !

La boucle fonctionne sans problème pour tous les liens de la feuille
active, mais ne semble pas couvrir toutes les feuilles du classeur.
-et je ne comprends pas pourquoi-.
J'ai testé en copiant ce code :
******************************
Sub MAJLiens()
Dim l As Hyperlink, f As Worksheet
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
l.SubAddress = Replace(l.SubAddress, "Modèle!",
"") Next l
Next f
End Sub
******************************
dans un module standard et dans ThisWorkbook, et seuls les liens de
la feuille active sont corrigés.

Ce qui n'est pas si mal (litote), et qui me suffit amplement, car je
vais inclure ces lignes dans la boucle qui crée chaque feuille.

Une nouvelle fois, Merci,
Joyeux réveillon, et bonne année.

Bien cordialement,

Patrick.



Bonsoir Patrick,

Pour parcourir une collection, il y a la boucle For Each qui est
bien pratique.

Dans tes hyperliens, tu as dans chacune des feuilles obtenues par
copie une liaison vers la feuille copiée : au lieu que le lien
pointe vers la cellule A8, il pointe vers "Feuil1!A8", "Feuil1"
étant à remplacer par le nom de ta feuille modèle.

2 boucles imbriquées (une pour les feuilles, l'autre pour les
hyperliens au sein de chaque feuille) permettent de remplacer les
liens vers la feuille modèle par une chaine vide.

Aucun test n'est nécessaire pour appliquer un traitement
particulier à la feuille modèle : celle-ci ne contient pas de
liason dans les hyperliens, et la fonction Replace n'a donc aucun
effet. Sub MAJLiens()
Dim l As Hyperlink, f As Worksheet
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
l.SubAddress = Replace(l.SubAddress, "Feuil1!",
"") Next l
Next f
End Sub

Si tu es sur Mac, ou sur une version antérieure à Excel 2000, la
fonction Replace n'est pas disponible. Il faut la remplacer par la
fonction de feuille de calcul SUBSTITUE() :

Application.WorksheetFuction.Substitute

à la plac de Replace.


Voilà, et bonne année.






Avatar
Michel Gaboly
Bonjour FxM,

Tu as raison, bien sûr, je ne devais pas être réveillé ;-((

Personnellement, je préfère nettement la première solution ; je suis
partisan d'éviter les Select et Activate, qui ralentissent l'exécution
autant que possible.

Bonne année.

FxM wrote:
Bonsoir,

Avec les deux lignes ...
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
... l'activesheet reste inchangée


1e solution :
For Each f In ActiveWorkbook.Sheets
For Each l In f.Hyperlinks


2e solution :
For Each f In ActiveWorkbook.Sheets
f.activate

For Each l In ActiveSheet.Hyperlinks


Il y a un autre fil qui parle également des liens hypertexte. Tu y a
probablement déjà jeté un oeil.

@+
FxM







Bonsoir, Michel.

Je te remercie vivement de l'aide que tu m'apportes.
Un code prêt à servir, et avec les explications en plus !

La boucle fonctionne sans problème pour tous les liens de la feuille
active, mais ne semble pas couvrir toutes les feuilles du classeur.
-et je ne comprends pas pourquoi-.
J'ai testé en copiant ce code :
******************************
Sub MAJLiens()
Dim l As Hyperlink, f As Worksheet
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
l.SubAddress = Replace(l.SubAddress, "Modèle!", "")
Next l
Next f
End Sub
******************************
dans un module standard et dans ThisWorkbook, et seuls les liens de la
feuille active sont corrigés.

Ce qui n'est pas si mal (litote), et qui me suffit amplement, car je
vais inclure ces lignes dans la boucle qui crée chaque feuille.

Une nouvelle fois, Merci,
Joyeux réveillon, et bonne année.

Bien cordialement,

Patrick.



Bonsoir Patrick,

Pour parcourir une collection, il y a la boucle For Each qui est bien
pratique.

Dans tes hyperliens, tu as dans chacune des feuilles obtenues par
copie une liaison vers la feuille copiée : au lieu que le lien pointe
vers la cellule A8, il pointe vers "Feuil1!A8", "Feuil1" étant à
remplacer par le nom de ta feuille modèle.

2 boucles imbriquées (une pour les feuilles, l'autre pour les
hyperliens au sein de chaque feuille) permettent de remplacer les
liens vers la feuille modèle par une chaine vide.

Aucun test n'est nécessaire pour appliquer un traitement particulier
à la feuille modèle : celle-ci ne contient pas de liason dans les
hyperliens, et la fonction Replace n'a donc aucun effet.


Sub MAJLiens()
Dim l As Hyperlink, f As Worksheet
For Each f In ActiveWorkbook.Sheets
For Each l In ActiveSheet.Hyperlinks
l.SubAddress = Replace(l.SubAddress, "Feuil1!",
"") Next l
Next f
End Sub

Si tu es sur Mac, ou sur une version antérieure à Excel 2000, la
fonction Replace n'est pas disponible. Il faut la remplacer par la
fonction de feuille de calcul SUBSTITUE() :

Application.WorksheetFuction.Substitute

à la plac de Replace.


Voilà, et bonne année.









--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
FxM
Bonsoir Michel,

Tu as raison, bien sûr, je ne devais pas être réveillé ;-((
Ca arrive à bien d'autres ;o)


Personnellement, je préfère nettement la première solution ; je suis
partisan d'éviter les Select et Activate, qui ralentissent l'exécution
autant que possible.
tout à fait ... et qui génèrent parfois des surprises dans les codes

worksheet_activate.

@+
FxM

1 2