Microsoft 365 problème liens excel

cmdavid

XLDnaute Occasionnel
Bonjour a tous,
j'ai un dossier (A) contenant des fichiers excel (1 et 2) qui ont des liens entre eux. lorsque je fais une copie du dossier, les liens des fichiers 1 et 2 reste ceux des fichiers du dossier A.
comment faire pour lorsque je fais des copies, les liens soient ceux des fichiers excel du nouveau dossier?
un grand merci pour votre aide
 

chris

XLDnaute Barbatruc
Bonjour à tous

Sauf modification récente, quand les fichiers sont dans un même dossier, les liens ne contiennent pas le chemin d'accès (même si Excel l'affiche).
Si en revanche les classeurs sont des sous-dossiers différents, tout le chemin est en absolu.

Ceci pour les formules. C'est différent pour PowerQuery ou PowerPivot
 

cmdavid

XLDnaute Occasionnel
bonjour a tous
j'ai un dossier comprenant 2 sous dossiers A et B :
dans A j'ai 2 fichiers BASE et RAPPORT, RAPPORT a des liens avec BASE qui fonctionne parfaitement en cas en copie du dossier
RAPPORT a aussi des liens avec un fichier dans B avec une macro de mise a jour automatique, en cas de copie, les liens sont ceux du dossier d'origine.
voila la macro ;

Sub Macroformulaire()
'
' Macroformulaire Macro
'

'
Range("C4:TJ2788").Select
End Sub

comment faire pour qu'en cas de copie du dossier tous les liens soit ceux du nouveau dossier?
 

chris

XLDnaute Barbatruc
Bonjour

Donc effectivement pour B, le lien est en chemin absolu.

Il faudrait
soit revoir l'arborescence pour que tout soit dans le même sous-dossier,
soit qu'à l'ouverture du classeur RAPPPORT, les liaisons ne soient pas mises à jour (les déclarer en MAJ manuelle) et qu'une macro compare le chemin des liaisons A et B avec le chemin du classeur RAPPORT et remplace la 1ère partie de celle vers B puis declanche la MAJ.
 

chris

XLDnaute Barbatruc
Re

A placer dans le module Workbook du classeur RAPPORT

On part du principe que le sous-dossier est juste un niveau en-dessous et ne change pas de nom
VB:
Private Sub Workbook_Open()
    Dim Liens, LiensP
    Dim cheminActuel As String
    Dim sousDoss As String
    Dim i As Integer, j As Integer
    
    ThisWorkbook.UpdateLinks = 2 'ne pas MAJ les liens
    cheminActuel = ThisWorkbook.Path & "\"
    
    Liens = ThisWorkbook.LinkSources
    If Not IsEmpty(Liens) Then
        Application.Calculation = xlCalculationManual 'ne pas recalculer les cellules liées
        For i = 1 To UBound(Liens)
            LiensP = Split(Liens(i), "\")
            j = UBound(LiensP)
            If Left(Liens(i), Len(Liens(i)) - Len(LiensP(j))) <> cheminActuel Then
                sousDoss = LiensP(j - 1) & "\"
                ThisWorkbook.ChangeLink Name:=Liens(i), _
                    NewName:=cheminActuel & sousDoss & LiensP(j), Type:=xlExcelLinks
            End If
        Next i
        
        ThisWorkbook.UpdateLinks = 1  'MAJ les liens
        Application.Calculation = xlCalculationAutomatic 'rétablir calcul
    End If
 

cmdavid

XLDnaute Occasionnel
bonjour,
lorsque je mets la VBA ci-dessous, la fenetre de recherche fichier s'ouvre et me demande : nom fichier!?
lorsque de retire cette VBA, les liens sont devenus #REF!

Private Sub Workbook_Open()
Dim Liens, LiensP
Dim cheminActuel As String
Dim sousDoss As String
Dim i As Integer, j As Integer

ThisWorkbook.UpdateLinks = 2
cheminActuel = ThisWorkbook.Path & "\"

Liens = ThisWorkbook.LinkSources
If Not IsEmpty(Liens) Then
Application.Calculation = xlCalculationManual '
For i = 1 To UBound(Liens)
LiensP = Split(Liens(i), "\")
j = UBound(LiensP)
If Left(Liens(i), Len(Liens(i)) - Len(LiensP(j))) <> cheminActuel Then
sousDoss = LiensP(j - 1) & "\"
ThisWorkbook.ChangeLink Name:=Liens(i), _
NewName:=cheminActuel & sousDoss & LiensP(j), Type:=xlExcelLinks
End If
Next i

ThisWorkbook.UpdateLinks = 1
Application.Calculation = xlCalculationAutomatic
End If
End Sub

je ne sais pas quoi faire!
merci pour votre aide
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous devriez demander confirmation, de toute façon, à mon avis, avant de changer chaque lien :
VB:
Option Explicit
Private Sub Workbook_Open()
   Dim Liens, CheminActuel As String, L&, P&, AncLien As String, NouvLien As String
   Liens = ThisWorkbook.LinkSources
   If IsEmpty(Liens) Then Exit Sub
   CheminActuel = ThisWorkbook.Path & "\"
   For L = 1 To UBound(Liens)
      AncLien = Liens(L)
      P = InStrRev(AncLien, "\")
      NouvLien = CheminActuel & Mid$(AncLien, P + 1)
      If NouvLien <> AncLien Then
         If MsgBox("Le lien suivant doit-il être rectifié en celui indiqué en dessous ?" _
            & vbLf & AncLien & vbLf & NouvLien, vbYesNo, "Correction liens externes") = vbYes Then
            On Error Resume Next
            ThisWorkbook.ChangeLink Name:=AncLien, NewName:=NouvLien, Type:=xlExcelLinks
            If Err Then MsgBox "Err." & Err & " en tentant de changer le lien." _
               & vbLf & Err.Description, vbCritical, "Correction liens externes"
            On Error GoTo 0
            End If
         End If
      Next L
   End Sub
À tester.
 

cmdavid

XLDnaute Occasionnel
bonjour,
l'ensembles des fichiers est dans un dossier "AB"
T - BASE est dans un autre dossier "A" sous dossier "AB" dont les liens viennent des fichier ci-dessous et lorsque le copie le dossier "AB" les liens de T - BASE reste ceux du fichier d'origine.
MMG - TBS COM - COPIE et MMG - TBS DG - COPIE sont un dossier "formulaire"

merci pour votre aide
 

Pièces jointes

  • T - BASE.xlsm
    16.1 KB · Affichages: 4
  • MMG - TBS COM - Copie.xlsx
    409.6 KB · Affichages: 2
  • MMG - TBS DG - Copie.xlsx
    71.4 KB · Affichages: 2

Discussions similaires

Réponses
10
Affichages
301

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 663
dernier inscrit
ToussaintBug