OVH Cloud OVH Cloud

liens hypertexte (VBA)

5 réponses
Avatar
bourby
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby

5 réponses

Avatar
MichDenis
Bonjour Bourby,

Essaie ceci :

Ton nouveau classeur doit être enregistré pour modifier les adresses des liens hypertexte

'-------------------------------
Sub Copie_2Feuilles()

Dim Arr(), Wk As Workbook
Dim H As Hyperlink
Dim Adr As String, SonNom As String

'Nom du classeur actuel
Adr = ThisWorkbook.Name

'Le nom des feuilles à copier
Arr = Array("Feuil1", "Feuil2")

Worksheets(Arr).Copy
Set Wk = ActiveWorkbook

'Enregistrer le nouveau le classeur

SonNom = "Hypert2.xls"
Wk.SaveAs ThisWorkbook.Path & "" & SonNom

'Modifier l'adresse de chaque lien pour qu'il
'pointe sur le classeur lui-même...
For Each sh In Wk.Worksheets
For Each H In sh.Hyperlinks
H.Address = Replace(H.Address, Adr, Wk.Name)
Next
Next

Set H = Nothing: Set Wk = Nothing
End Sub
'-------------------------------


Salutations!



"bourby" a écrit dans le message de news: %
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby
Avatar
bourby
bonsoir,

Merci MichDenis.
ton code m'a tout l'air de correspondre parfaitement à la question
posée; je l'essayerai demain au bureau.

Mais ne peut-on pas donner dès le départ des adresses relatives pour les
liens hypertexte? En effet, quand je vais envoyer le fichier à mes
collègues, chacun va le mettre sur son espace disque, et le pb va
recommencer???

D'avance merci pour tes lumières.

Bourby

MichDenis wrote:
Bonjour Bourby,

Essaie ceci :

Ton nouveau classeur doit être enregistré pour modifier les adresses des liens hypertexte

'-------------------------------
Sub Copie_2Feuilles()

Dim Arr(), Wk As Workbook
Dim H As Hyperlink
Dim Adr As String, SonNom As String

'Nom du classeur actuel
Adr = ThisWorkbook.Name

'Le nom des feuilles à copier
Arr = Array("Feuil1", "Feuil2")

Worksheets(Arr).Copy
Set Wk = ActiveWorkbook

'Enregistrer le nouveau le classeur

SonNom = "Hypert2.xls"
Wk.SaveAs ThisWorkbook.Path & "" & SonNom

'Modifier l'adresse de chaque lien pour qu'il
'pointe sur le classeur lui-même...
For Each sh In Wk.Worksheets
For Each H In sh.Hyperlinks
H.Address = Replace(H.Address, Adr, Wk.Name)
Next
Next

Set H = Nothing: Set Wk = Nothing
End Sub
'-------------------------------


Salutations!



"bourby" a écrit dans le message de news: %
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby




Avatar
MichDenis
Bonjour Bourby,

Je n'ai pas fait l'expérience, mais ceci pourrait fonctionner !

A ) Tu utilises un "Nom" (menu / insertion / nom) , ou une cellule de ton classeur, où tu vas enregistrer le chemin et
le nom du classeur actuel avant que tu le fermes.

B ) Dans le ThisWorkbook du classeur, tu ajoutes une procédure à l'ouverture de ce dernier :

C ) Et dans cette procédure, tu reprends essentiellement la même procédure que je t'ai donnée (enlève la copie des
feuilles et l'enregistrement du classeur) , il s'agira de la modifier légèrement pour substituer non seulement le nom du
fichier mais aussi le chemin du fichier pour lien hypertexte.

D ) Et tu rajoutes une ligne de code, pour mettre à jour la "cellule" ou le "Nom" avec la nouvelle adresse du fichier.


'---------------------------
Private Sub Workbook_Open()

'Le code ....

End Sub
'---------------------------


Salutations!


"bourby" a écrit dans le message de news: O$nb$
bonsoir,

Merci MichDenis.
ton code m'a tout l'air de correspondre parfaitement à la question
posée; je l'essayerai demain au bureau.

Mais ne peut-on pas donner dès le départ des adresses relatives pour les
liens hypertexte? En effet, quand je vais envoyer le fichier à mes
collègues, chacun va le mettre sur son espace disque, et le pb va
recommencer???

D'avance merci pour tes lumières.

Bourby

MichDenis wrote:
Bonjour Bourby,

Essaie ceci :

Ton nouveau classeur doit être enregistré pour modifier les adresses des liens hypertexte

'-------------------------------
Sub Copie_2Feuilles()

Dim Arr(), Wk As Workbook
Dim H As Hyperlink
Dim Adr As String, SonNom As String

'Nom du classeur actuel
Adr = ThisWorkbook.Name

'Le nom des feuilles à copier
Arr = Array("Feuil1", "Feuil2")

Worksheets(Arr).Copy
Set Wk = ActiveWorkbook

'Enregistrer le nouveau le classeur

SonNom = "Hypert2.xls"
Wk.SaveAs ThisWorkbook.Path & "" & SonNom

'Modifier l'adresse de chaque lien pour qu'il
'pointe sur le classeur lui-même...
For Each sh In Wk.Worksheets
For Each H In sh.Hyperlinks
H.Address = Replace(H.Address, Adr, Wk.Name)
Next
Next

Set H = Nothing: Set Wk = Nothing
End Sub
'-------------------------------


Salutations!



"bourby" a écrit dans le message de news: %
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby




Avatar
bourby
Re-bonsoir MichDenis,

oui, je pensais à quelque-chose comme ça pour le cas où les adresses
relatives ne seraient pas directement accessibles; mais ta proposition
est plus claire.

En revanche, comme je refais souvent ce travail avec des jeux de données
différents,il faudra que la macro du fichier d'origine crée la procédure
ThisWorkbook_open du nouveau classeur... et ça, je ne sais pas le faire.

Peut-être un simple copier-coller un module (ou une macro)?? Mais je
n'ai pas la moindre idée de la syntaxe!

Encore merci pour tes explications.

Bourby



MichDenis wrote:
Bonjour Bourby,

Je n'ai pas fait l'expérience, mais ceci pourrait fonctionner !

A ) Tu utilises un "Nom" (menu / insertion / nom) , ou une cellule de ton classeur, où tu vas enregistrer le chemin et
le nom du classeur actuel avant que tu le fermes.

B ) Dans le ThisWorkbook du classeur, tu ajoutes une procédure à l'ouverture de ce dernier :

C ) Et dans cette procédure, tu reprends essentiellement la même procédure que je t'ai donnée (enlève la copie des
feuilles et l'enregistrement du classeur) , il s'agira de la modifier légèrement pour substituer non seulement le nom du
fichier mais aussi le chemin du fichier pour lien hypertexte.

D ) Et tu rajoutes une ligne de code, pour mettre à jour la "cellule" ou le "Nom" avec la nouvelle adresse du fichier.


'---------------------------
Private Sub Workbook_Open()

'Le code ....

End Sub
'---------------------------


Salutations!


"bourby" a écrit dans le message de news: O$nb$
bonsoir,

Merci MichDenis.
ton code m'a tout l'air de correspondre parfaitement à la question
posée; je l'essayerai demain au bureau.

Mais ne peut-on pas donner dès le départ des adresses relatives pour les
liens hypertexte? En effet, quand je vais envoyer le fichier à mes
collègues, chacun va le mettre sur son espace disque, et le pb va
recommencer???

D'avance merci pour tes lumières.

Bourby

MichDenis wrote:

Bonjour Bourby,

Essaie ceci :

Ton nouveau classeur doit être enregistré pour modifier les adresses des liens hypertexte

'-------------------------------
Sub Copie_2Feuilles()

Dim Arr(), Wk As Workbook
Dim H As Hyperlink
Dim Adr As String, SonNom As String

'Nom du classeur actuel
Adr = ThisWorkbook.Name

'Le nom des feuilles à copier
Arr = Array("Feuil1", "Feuil2")

Worksheets(Arr).Copy
Set Wk = ActiveWorkbook

'Enregistrer le nouveau le classeur

SonNom = "Hypert2.xls"
Wk.SaveAs ThisWorkbook.Path & "" & SonNom

'Modifier l'adresse de chaque lien pour qu'il
'pointe sur le classeur lui-même...
For Each sh In Wk.Worksheets
For Each H In sh.Hyperlinks
H.Address = Replace(H.Address, Adr, Wk.Name)
Next
Next

Set H = Nothing: Set Wk = Nothing
End Sub
'-------------------------------


Salutations!



"bourby" a écrit dans le message de news: %
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby









Avatar
MichDenis
Bonjour Bourby,

Pour ajouter une procédure par macro dans un classeur :

'----------------------------------
Sub CreerMacroParCode()

Dim LaMacro As String

LaMacro = "Private Sub Workbook_Open()" & vbCrLf
LaMacro = LaMacro & "MsgBox ""Bonjour""" & vbCrLf
LaMacro = LaMacro & "End Sub"

With Workbooks("NomDuClasseur.xls") ' à déterminer
With .VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString LaMacro
End With
End With

End Sub
'----------------------------------


Salutations!



"bourby" a écrit dans le message de news: uo$
Re-bonsoir MichDenis,

oui, je pensais à quelque-chose comme ça pour le cas où les adresses
relatives ne seraient pas directement accessibles; mais ta proposition
est plus claire.

En revanche, comme je refais souvent ce travail avec des jeux de données
différents,il faudra que la macro du fichier d'origine crée la procédure
ThisWorkbook_open du nouveau classeur... et ça, je ne sais pas le faire.

Peut-être un simple copier-coller un module (ou une macro)?? Mais je
n'ai pas la moindre idée de la syntaxe!

Encore merci pour tes explications.

Bourby



MichDenis wrote:
Bonjour Bourby,

Je n'ai pas fait l'expérience, mais ceci pourrait fonctionner !

A ) Tu utilises un "Nom" (menu / insertion / nom) , ou une cellule de ton classeur, où tu vas enregistrer le chemin et
le nom du classeur actuel avant que tu le fermes.

B ) Dans le ThisWorkbook du classeur, tu ajoutes une procédure à l'ouverture de ce dernier :

C ) Et dans cette procédure, tu reprends essentiellement la même procédure que je t'ai donnée (enlève la copie des
feuilles et l'enregistrement du classeur) , il s'agira de la modifier légèrement pour substituer non seulement le nom
du
fichier mais aussi le chemin du fichier pour lien hypertexte.

D ) Et tu rajoutes une ligne de code, pour mettre à jour la "cellule" ou le "Nom" avec la nouvelle adresse du fichier.


'---------------------------
Private Sub Workbook_Open()

'Le code ....

End Sub
'---------------------------


Salutations!


"bourby" a écrit dans le message de news: O$nb$
bonsoir,

Merci MichDenis.
ton code m'a tout l'air de correspondre parfaitement à la question
posée; je l'essayerai demain au bureau.

Mais ne peut-on pas donner dès le départ des adresses relatives pour les
liens hypertexte? En effet, quand je vais envoyer le fichier à mes
collègues, chacun va le mettre sur son espace disque, et le pb va
recommencer???

D'avance merci pour tes lumières.

Bourby

MichDenis wrote:

Bonjour Bourby,

Essaie ceci :

Ton nouveau classeur doit être enregistré pour modifier les adresses des liens hypertexte

'-------------------------------
Sub Copie_2Feuilles()

Dim Arr(), Wk As Workbook
Dim H As Hyperlink
Dim Adr As String, SonNom As String

'Nom du classeur actuel
Adr = ThisWorkbook.Name

'Le nom des feuilles à copier
Arr = Array("Feuil1", "Feuil2")

Worksheets(Arr).Copy
Set Wk = ActiveWorkbook

'Enregistrer le nouveau le classeur

SonNom = "Hypert2.xls"
Wk.SaveAs ThisWorkbook.Path & "" & SonNom

'Modifier l'adresse de chaque lien pour qu'il
'pointe sur le classeur lui-même...
For Each sh In Wk.Worksheets
For Each H In sh.Hyperlinks
H.Address = Replace(H.Address, Adr, Wk.Name)
Next
Next

Set H = Nothing: Set Wk = Nothing
End Sub
'-------------------------------


Salutations!



"bourby" a écrit dans le message de news: %
bonsoir,

Windows XP et Excel 2003.

Dans un classeur comportant des claculs un peu compliqués, je crée par
macro, afin de les communiquer à des collègues, 2 feuilles de synthèse;
en gros une avec les données, l'autre avec les résultats; c'est plus
facile à comprendre, et nettement moins volumineux, puisqu'il n'y a
aucune formule.
Les données et les résultats sont reliés par des liens hypertexte créés
par la même macro.
tant que suis dans le fichier d'origine, tout va bien. Mais quand je
copie ces 2 feuilles dans un nouveau classeur (par macro), j'ai un
message d'erreur genre 'liaison invalide'. Quand je regarde les liens
hypertexte, ils continuent de pointer sur le chemin complet du fichier
d'origine (depuis le disque dur), donc ça ne marche plus.

Comment puis-je conserver des liens hypertexte fonctionnels lorsque je
copie mes 2 feuilles dans un nouveau fichier?

D'avance merci.

Bourby