liaison fichier

jamespatagueul

XLDnaute Occasionnel
Bonjour à Tous,

J'ai 4 fichiers qui sont liées entre eux. (fichier 1 . 2. 3 & 4 par exemple)
la structure est la suivante :
dossier archive avec a l’intérieur: fichier 1, dossier 2
dans le dossier 2 : fichier 2 . 3 & 4.

Tous fonctionne parfaitement, cependant, je duplique 3 fois cette structure, donc le dossier 2 change de nom, sauf les fichiers.(mais qui pourrai changer de nom)

Je cherche à faire en sort que, lors du dupliquage des dossiers et fichiers originaux, je n'ai pas à mettre a jours la source (modifier les liaisons), qui forcement change d'emplacement.(dossier .2 .3 .4)

J'ai pense a "indirect" mais plus de 600 cellules à mettre a jour.
peux être en VBA.

Je cherche une piste.

Merci
 

Dranreb

XLDnaute Barbatruc
Remarque: Dans le module ThisWorkbook, cela impliquerait l'utilisation des Me.LinkSources, Me.Path, Me.ChangeLink.
Il reste à espérer que vous saurez y reconnaitre, dans une Sub Workbook_Open, une mauvaise source et en déduire de Path celle qu'il faudrait à la place.
 

Dranreb

XLDnaute Barbatruc
Exemple de code dans ThisWorkbook :
VB:
Option Explicit

Private Sub Workbook_Open()
   Dim TSplChm() As String, TLkSrc(), N As Long, AncLien As String, _
      PMax As Long, P As Long, TSplL() As String, NouvLien As String
   TSplChm = Split(Me.Path, "\")
   On Error Resume Next
   TLkSrc = Me.LinkSources
   If Err Then Exit Sub
   On Error GoTo 0
   For N = 1 To UBound(TLkSrc)
      AncLien = TLkSrc(N)
      TSplL = Split(AncLien, "\")
      P = UBound(TSplL) - 1: PMax = UBound(TSplChm): If PMax > P Then PMax = P
      For P = 1 To PMax: TSplL(P) = TSplChm(P): Next P
      NouvLien = Join(TSplL, "\")
      If NouvLien <> AncLien Then
         If MsgBox("Lien """ & AncLien & """ ? Curieux !" _
            & vbLf & "Plutôt """ & NouvLien & """ ! Voulez vous changer ?", _
            vbYesNo + vbExclamation, "Ouverture " & Me.Name) = vbYes Then
            On Error Resume Next
            Me.ChangeLink AncLien, NouvLien, xlLinkTypeExcelLinks
            If Err Then MsgBox "Err " & Err & " en tentant de changer le lien." _
               & vbLf & Err.Description, vbCritical, "Ouverture " & Me.Name
            On Error GoTo 0: End If: End If: Next N
   End Sub
 

jamespatagueul

XLDnaute Occasionnel
Bonjour Dranreb,

cela fonctionne, mais le fichier de "référence" ce trouve avant le dossier de travail.
Comment adapté ton lien pour que si :

"C:/essai/dossier1" se transforme en
"G:/essai4/dossier5" (clé usb)

ou alors, comment utilisé indirect (avec en A1, le nom du classeur) avec thisworkbook en vba

Merci d'avance pour ton aide.
 
Dernière édition:

jamespatagueul

XLDnaute Occasionnel
Mauvaise explication...
='G:\xxxxxxx\yyyyyy\zzzzzzz\Copie de azerty\[INVENTAIRE ANNUELLE MAISON.xlsm]JANVIER'!$O$646

Si je modifie le nom du fichier xslm, les liaisons sont rompus.
Comment adapté le code d'hier pour que [INVENTAIRE ANNUELLE MAISON.xlsm] se mette a jour.
C'est pour cette formule que je parlai de A1 en nom de fichier variable.

Merci
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je ne comprend pas le sens de votre phrase.
Vous pouvez évidemment avoir un traitement un peu différent selon les classeurs.
L'essentiel c'est de pouvoir trouver une règle pour chacun ne dépendant que de son propre chemin et de parties correctes des chemins des mauvais classeurs liés.
 

jamespatagueul

XLDnaute Occasionnel
Mauvaise explication...
='G:\xxxxxxx\yyyyyy\zzzzzzz\Copie de azerty\[INVENTAIRE ANNUELLE MAISON.xlsm]JANVIER'!$O$646

Si je modifie le nom du fichier xslm, les liaisons sont rompus.
Comment adapté le code d'hier pour que [INVENTAIRE ANNUELLE MAISON.xlsm] se mette a jour.
C'est pour cette formule que je parlai de A1 en nom de fichier variable.

Merci
 

Dranreb

XLDnaute Barbatruc
Le nom du fichier c'est le dernier élément de TSplL. Il faut s'arranger pour que ça aboutisse à faire :
Me.ChangeLink "G:\xxxxxxx\yyyyyy\zzzzzzz\Copie de azerty\INVENTAIRE ANNUELLE MAISON.xlsm", "G:\xxxxxxx\yyyyyy\zzzzzzz\Copie de azerty\" & Feuil1.[A1].Value, xlLinkTypeExcelLinks
 

Dranreb

XLDnaute Barbatruc
Joignez un classeur pas des images.
Je n'ai pas dit de faire ça. J'ai simplement dit que dans ma procédure le nom du fichier lié c'était TSplL(Ubound(TSplL)) et que c'était cet élément qu'il fallait changer en le bon nom de fichier avant de tout recombiner par Joint(TSplL, "\")
 

Dranreb

XLDnaute Barbatruc
Vous avez tellement de mal à définir et expliquer les règles qui permettrait de l'automatiser que je me demande si vous n'auriez pas intérêt à ne garder que la possibilité de le faire par les commandes appropriées.
 

jamespatagueul

XLDnaute Occasionnel
Voici une partie du fichier pour lequel je souhaiterai que les formules ce mette a jour, selon un emplacement qui est variable.

Vous ne parler pas un expert VBA, j'apprend au fur et a mesure.
Navrer de mon ignorance a se sujet.

Merci encore
 

Pièces jointes

  • essai.xlsm.xlsx
    12.6 KB · Affichages: 21

Discussions similaires

Réponses
5
Affichages
146
Réponses
5
Affichages
210

Statistiques des forums

Discussions
312 203
Messages
2 086 181
Membres
103 152
dernier inscrit
Karibu