XL 2016 Ouvrir tous les fichiers en liens

maxwellou

XLDnaute Occasionnel
Bonjour à tous,

Tout d'abord je vous souhaite à tous une excellente année 2020.

Je dois régulièrement mettre à jour un tableau excel qui a d'autre fichier excel en source (liens via formule dans les cellules), et ces mêmes fichiers sources ont aussi d'autre liens. A l'image de poupées russes.

Je souhaiterais pouvoir ouvrir tous les fichiers (sources et sources de source) via une macro.

La macro ci-joint ne peut ouvrir que les liens du 1er fichier excel que j'ai ouvert. Ainsi, je souhaiterais que la macro ci-dessous se "relance" dès qu'un nouveau excel s'ouvre avec de nouveau lien.

L'autre souci, c'est que si un fichier est déjà ouvert, la macro bug, il faudrait qu'elle puisse continuer à tourner en ignorant le fichier déjà ouvert.

Merci de votre aide.


Sub Ouvrir_Liens()
Dim F As Worksheet, a, i&
Set F = ActiveSheet
a = ThisWorkbook.LinkSources
If Not IsArray(a) Then Exit Sub
For i = 1 To UBound(a)
Workbooks.Open a(i)
Next
Application.Goto F.[A1]
End Sub
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Utilise la récursivité de la fonction. Un truc du genre (non testé !):
VB:
Sub Ouvrir_Liens()
    Call Ouvrir_Liens_Classeur(ThisWorkbook)
End Sub

Sub Ouvrir_Liens_Classeur(WB As Workbook)
    Dim aLinks As Variant
    Dim WB2 As Workbook
    Dim i As Integer
    
    aLinks = WB.LinkSources
    If Not IsEmpty(aLinks) Then
        For i = 1 To UBound(aLinks)
            Workbooks.Open aLinks(i)
            Set WB2 = ActiveWorkbook
            Call Ouvrir_Liens_Classeur(WB2)
        Next i
    End If
End Sub
 

Dudu2

XLDnaute Barbatruc
Et si des liens identiques sont mentionnés plusieurs fois à différents endroits:
Code:
Sub Ouvrir_Liens()
    Call Ouvrir_Liens_Classeur(ThisWorkbook)
End Sub

Sub Ouvrir_Liens_Classeur(WB As Workbook)
    Dim aLinks As Variant
    Dim i As Integer
    Dim j As Integer
  
    aLinks = WB.LinkSources
    If Not IsEmpty(aLinks) Then
        For i = 1 To UBound(aLinks)
            For j = 1 To Application.Workbooks.Count
                If Application.Workbooks(j).FullName = aLinks(i) Then Exit For
            Next j
          
            If j > Application.Workbooks.Count Then
                Workbooks.Open aLinks(i)
                Call Ouvrir_Liens_Classeur(ActiveWorkbook)
            End If
        Next i
    End If
End Sub
 
Dernière édition:

Discussions similaires

  • Question
Microsoft 365 XLOOKUP
Réponses
8
Affichages
366

Statistiques des forums

Discussions
311 711
Messages
2 081 794
Membres
101 817
dernier inscrit
carvajal