Liaison "dynamique" entre 2 classeurs
Del78
-
santiago69 Messages postés 485 Statut Membre -
santiago69 Messages postés 485 Statut Membre -
Bonjour,
Je rencontre un petit problème de liaison entre deux classeurs... Je vous explique :
J'ai créer dans dossier (D1) dans lequel il y a deux autres dossiers (D2 et D3). Les dossiers D2 et D3 comportent chacun un classeur (respectivement C2 et C3). le classeur C2 reprend des données de C3 (grâce à des liens). Jusque là tout va bien pour moi je m'en sors...
Le problème est lorsque je veux déplacer le dossier D1 dans un autre emplacement et lorsque j'ouvre mon classeur C2, mes liaisons ne fonctionnent plus puisque le nom du chemin a changé. Comment faire pour pallier ce problème ? Je ne trouve pas de solution...
Merci à vous !
Je rencontre un petit problème de liaison entre deux classeurs... Je vous explique :
J'ai créer dans dossier (D1) dans lequel il y a deux autres dossiers (D2 et D3). Les dossiers D2 et D3 comportent chacun un classeur (respectivement C2 et C3). le classeur C2 reprend des données de C3 (grâce à des liens). Jusque là tout va bien pour moi je m'en sors...
Le problème est lorsque je veux déplacer le dossier D1 dans un autre emplacement et lorsque j'ouvre mon classeur C2, mes liaisons ne fonctionnent plus puisque le nom du chemin a changé. Comment faire pour pallier ce problème ? Je ne trouve pas de solution...
Merci à vous !
A voir également:
- Liaison "dynamique" entre 2 classeurs
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau croisé dynamique - Guide
- Liste déroulante dynamique excel - Guide
- 2 ecran pc - Guide
- Gta 6 trailer 2 - Guide
5 réponses
Salut,
Desole pour le retard, j'etais parti mange.
Voila un bout de code VB que j'ai teste et qui marche.
1) Ouvre le doc C2 et assure toi que les formules pointent vers la bonne adresse de C3.
2) Dans le doc C2, tu doit cree 2 noms :
-> Menu Insertion, Noms, Definir
Nom dans le classeur : relpath
Fait reference a : ..\D3\[C3.xls] (le chemin relatif de C3)
-> Clic sur Ajouter
Nom dans le classeur : path
Fait reference a : ="C:\Documents and Settings\santiago\My Documents\D1\D3\[C3.xls] (le chemin absolu de C3)
-> Clic sur Ajouter
-> Clic sur Fermer
3) Dans le code VBA de C2 (Alt+F11), dans l'objet ThisWorkbook, ajoute le code suivant :
4) Voila, tu n'as plus qu'a faire des tests et me poser des questions si necessaire.
Desole pour le retard, j'etais parti mange.
Voila un bout de code VB que j'ai teste et qui marche.
1) Ouvre le doc C2 et assure toi que les formules pointent vers la bonne adresse de C3.
2) Dans le doc C2, tu doit cree 2 noms :
-> Menu Insertion, Noms, Definir
Nom dans le classeur : relpath
Fait reference a : ..\D3\[C3.xls] (le chemin relatif de C3)
-> Clic sur Ajouter
Nom dans le classeur : path
Fait reference a : ="C:\Documents and Settings\santiago\My Documents\D1\D3\[C3.xls] (le chemin absolu de C3)
-> Clic sur Ajouter
-> Clic sur Fermer
3) Dans le code VBA de C2 (Alt+F11), dans l'objet ThisWorkbook, ajoute le code suivant :
Private Sub Workbook_Open()
Dim oldaddress As String, newaddress As String
Dim FSO As New FileSystemObject
Dim Sheet As Object
'Compare addresses
oldaddress = Names("path").Value
oldaddress = Mid$(oldaddress, 3, Len(oldaddress) - 3)
newaddress = Names("relpath").Value
newaddress = FSO.GetAbsolutePathName(ThisWorkbook.Path & "\" & Mid$(newaddress, 3, Len(newaddress) - 3))
'If they are different
If newaddress <> oldaddress Then
'Replace occurences
For Each Sheet In ThisWorkbook.Sheets
Sheet.Cells.Replace oldaddress, newaddress
Next
'Save current address
Names("path").Value = newaddress
End If
End Sub
4) Voila, tu n'as plus qu'a faire des tests et me poser des questions si necessaire.
Il y a une methode manuelle :
- Menu Editions, Liaisons
- Clique sur modifier la source et pointe sur le nouveau C3.
- Si tu clic sur Invite de demarrage, tu peux configurer la maniere dont les liaisons se mettent a jour au demarrage.
Pour une methode automatique, j'imagine bien un truc faisable en VBA mais ca demandera au moins 15 minutes. Si ca t'interesse, fais le moi savoir.
A+
Santiago
- Menu Editions, Liaisons
- Clique sur modifier la source et pointe sur le nouveau C3.
- Si tu clic sur Invite de demarrage, tu peux configurer la maniere dont les liaisons se mettent a jour au demarrage.
Pour une methode automatique, j'imagine bien un truc faisable en VBA mais ca demandera au moins 15 minutes. Si ca t'interesse, fais le moi savoir.
A+
Santiago
Bonjour Santiago69,
Et merci pour ta réponse...
La solution automatique m'intéresse énormément, même si elle prend 15 minutes :-)... En effet, mes classeurs ont vocation à aller sur le bureau d'un client, qui les mettra où il veut par la suite ! Il vaut mieux que je prévoit le coup, sinon je vais faire un peu tâche quand je lui mettrais sur son PC...
Merci !
Et merci pour ta réponse...
La solution automatique m'intéresse énormément, même si elle prend 15 minutes :-)... En effet, mes classeurs ont vocation à aller sur le bureau d'un client, qui les mettra où il veut par la suite ! Il vaut mieux que je prévoit le coup, sinon je vais faire un peu tâche quand je lui mettrais sur son PC...
Merci !
Salut,
Pas de soucis, je te rassure tu as le droit d'aller manger !
Merci pour ta réponse, j'ai testé et malheureusement cela ne fonctionne pas ! J'ai une erreur de compilation "Type défini par l'utilisateur non défini" et FSO As New FileSystemObject à la troisième ligne et surligné en gris...
N'étant pas du tout à l'aise avec ceci, je veux bien un nouveau coup de pouce... Je pense que j'ai bien défini mes noms...
Merci !!
Pas de soucis, je te rassure tu as le droit d'aller manger !
Merci pour ta réponse, j'ai testé et malheureusement cela ne fonctionne pas ! J'ai une erreur de compilation "Type défini par l'utilisateur non défini" et FSO As New FileSystemObject à la troisième ligne et surligné en gris...
N'étant pas du tout à l'aise avec ceci, je veux bien un nouveau coup de pouce... Je pense que j'ai bien défini mes noms...
Merci !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question