Liens documents Excel

majagypsie Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
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)

1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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