Liens documents Excel

Fermé
majagypsie Messages postés 1 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010 - 31 août 2010 à 20:01
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 1 sept. 2010 à 08:47
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 1/09/2010 à 08:22
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 1/09/2010 à 08:50
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