Liens documents Excel

majagypsie Messages postés 1 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai plusieurs fichiers Excel contenant des résultats de tests que je désire consolider dans un seul et même fichier. Au départ j'ai seulement fait un lien entre le fichier source et la destination ce qui fonctionne très bien tant et aussi longtemps que je ne dois pas réexécuter un des documents.

Exemple: Document A -> Source; Document B -> Destination.

Si je modifie le contenu du Document A, le Document B sera mis à jour MAIS, si je prends ces 2 documents et les places dans un répertoire d'archive, le Document B conserve le lien avec le Document A comme si celui-ci n'avait pas été déplacé ce qui provoque une erreur. 


Est-ce qu'il y a une façon de consolider les données de fichiers Excel sans que les "adresses" restent fixes ou, plutôt, de façon à ce que l'adresse du fichier change si celui-ci est déplacé?

Merci!!! :O)
A voir également:

1 réponse

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour

dans ton classeur source (classeur1) module Thisworkbook; cette macro mémorise l'emplacement de la source lorsque tu ouvres ce classeur

Private Sub Workbook_Open() 
Dim chemin As String 
chemin = ThisWorkbook.Path 
    ' ("curiosité" trouvée sur le site web de Laurent Longre ("hidden namespace") ) 
    ExecuteExcel4Macro "set.name(""macroxl4"",""" & chemin & """)" 
End Sub 


dans le classeur cible module this workbook, cette macro renvoie sur la feuille active en B2 l'emplacement de la source lorsque tu ouvres ce classeur

Private Sub Workbook_Open() 
Range("B2") = Application.ExecuteExcel4Macro("get.name(""macroxl4"")") 
End Sub 


Enfin, pour que les liaisons suivent, il faut utiliser la fonction INDIRECT dans tes formules. par exemple valeur de C10 feuil1 du fichier source

=INDIRECT("'"&B2&"\[Classeur1.xls]Feuil1'!$C$10")


on peut également le faire en utilisant la base de registre, mais je ne me souviens plus sur quelle étagère de mon grenier j'ai "rangé" les codes !!! si je trouve (en cherchant autre chose) je te communiques ze codes...

:-x
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Re,

les fouilles ont réussi !!!

dans classeur source:
Private Sub Workbook_Open() 
Dim chemin As String 
chemin = ThisWorkbook.Path 
'écriture dans HKey_current_user/software / VB and VBA Program settings 
 SaveSetting appname:="ccm", section:="gypsie", key:="lieu", setting:=chemin 
End Sub


dans classeur cible
Private Sub Workbook_Open() 
'lecture dans HKey_current_user/software / VB and VBA Program settings 
Range("B2") = GetSetting(appname:="ccm", section:="gypsie", key:="lieu") 
End Sub


Ensuite m^me punition pour la fonction "indirect"


Pour nettoyer la base de registre dans un module de la source
Sub EffacedansRegistre()
     On Error Resume Next
     DeleteSetting "ccm"
End Sub


source: d'après Eric Renaud
0