Recherche classeurs Excel avec liaisons

Bonjour,

J'ai un dossier avec une foultitude de classeurs Excel (Office 365) et dans beaucoup de classeurs il existe des liaisons vers d'autres fichiers Excel ou des fichiers CSV.

Je voulais savoir s'il existerait un utilitaire spécial qui pouvait parcourir automatiquement un dossier et rechercher dans chaque classeur Excel les liaisons qui y sont intégrées.

Et au final restituer une liste avec pour chaque classeur ausculté, la liste des fichiers liées.

Merci de votre aide et de vos conseils.

Cordialement

Bonjour,

J'ai planché sur une macro pour lister les liaisons d'un répertoire :

Sub ListingLiaisonsFichiers()

'Déclaration des variables utilisées
Dim Wb As Workbook, Wb2 As Workbook
Dim Rep As String, Fichier As String
Dim Lig As Integer, i As Integer
Dim Liaisons As Variant

Application.ScreenUpdating = False 'Désactive l'affichage en temps réel
Application.Calculation = xlCalculationManual 'Désactive le recalcule auto des formules

Set Wb = ThisWorkbook 'Référence du classeur actif
Rep = Wb.Path & "\" 'Répertoire du classeur actif
Fichier = Dir(Rep)

Do While Fichier <> "" 'Parcourir les fichiers
    If Fichier Like "*.xls*" And Not Fichier Like "*" & Wb.Name Then 'S'intéresse uniquement aux classeurs Excel, sauf le présent classeur
        Set Wb2 = Workbooks.Open(Rep & Fichier, False) 'Ouvre le classeur testé
        Liaisons = Wb2.LinkSources(Type:=xlLinkTypeExcelLinks) 'Listing des liaisons
        If Not IsEmpty(Liaisons) Then 'Si le listing contient au moins 1 liaison
            For i = LBound(Liaisons) To UBound(Liaisons) 'Parcourir les liaisons
                With Wb.Sheets(1)
                    Lig = Lig + 1 'Compteur de ligne (pour savoir où écrire le résultat)
                    .Cells(Lig, 1) = Fichier 'Ecrit le nom du classeur en colonne 1 de la feuille 1
                    .Cells(Lig, 2) = Liaisons(i) 'Ecrit le chemin du classeur lié en colonne 2
                End With
            Next i
        End If
        Wb2.Close False 'Ferme le classeur testé
    End If
    Fichier = Dir 'Passe au fichier suivant
Loop

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

Voilà le fichier la contenant :

Quelques compléments :

  • -> Le fichier listing doit être placé dans le dossier que tu souhaites analyser
  • -> Le code ouvre chaque fichier parcouru (je n'ai pas trouvé comment faire sans) et peut donc prendre un peu de temps si le nombre et/ou la taille des fichier est important
  • -> Les classeurs du dossier analysé doivent être fermés avant de lancer la macro
  • -> Pour chercher l'emplacement exact des liaisons dans un classeur, tu peux utiliser l'utilitaire "Rechercher" (icone de jumelles dans le bandeau d'accueil) et faire une recherche avec .xls*]

En espérant avoir répondu à ta problématique.

Salut et merci ... génial ta macro.

Je suis informaticien mais je n'ai jamais développé en VBA. J'ai tout appris sur carte perforées en 1977 .. c'est dire !

2 questions:

  • est-ce que cela pourrait parcourir aussi tous les sous-dossiers ?
  • que se passe-t-il si un fichier est protégé en modification par un mot de passe ? Est-ce qu'on peut forcer l'ouverture en lecture seule pour trouver les liens ? Ou si le fichier est totalement protégé, le sauter ?

Encore merci.

Sinon, quelqu'un sur un autre forum m'a parlé de ce add-in Excel => http://www.manville.org.uk/software/linkmgr.htm

C'est pas mal aussi mais un peu plus compliqué car c'est censé être utilisé pour faire un replace de chemin par un autre ...

Je n'ai pas été jusque là dans la réflexion !

La macro ne parcourt pas les sous-dossiers, et je n'ai pas testé, mais cela risque de planter dans le cas de fichiers protégés. Cela dit, je ne sais pas très bien comment fonctionne la collection .LinkSources, j'ai juste trouvé ça au détour de quelques recherches.

Tu peux tester ce que ça donne en lecture seule, c'est une option possible en modifiant les paramètres de Workbook.Open.

J'ai testé ... il demande fichier par fichier le mot de passe ou de cliquer sur lecture seule ... donc ça peut aller.

La seule chose qui me manquerai serait de parcourir un dossier et tous ses sous-dossiers

C'est possible ?

Tu trouveras des problématiques similaires un peu partout, mais à priori ça fera un code un peu plus lourd.

Voilà une piste : https://grenier.self-access.com/access/fichiers/lister-les-dossiers-dun-dossier/

Encore merci ... tout cela m'a bien aidé et m'aide encore

Encore merci ... tout cela m'a bien aidé et m'aide encore

Et bien merci du retour !

Je pense donc que le sujet peut être passé en "résolu" !

Rechercher des sujets similaires à "recherche classeurs liaisons"