Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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
 
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:
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:
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.
 
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
 
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
 
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, "\")
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
289
Réponses
5
Affichages
532
Retour