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...
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.
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() :
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.
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
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() :
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
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
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
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