Rechercher les liaisons externes liées à une validation

Bonjour à tous,

La présence de liens externes est un problème assez courant et assez très très sioux.

Il faut en général:
- faire une recherche dans l'ensemble du classeur pour un "[" ou un ".xl" (CTRL+F, et choisir de chercher sur tout le classeur)
- vérifier les noms : onglet Formules, Gestionnaire de noms
- vérifier les mises en forme conditionnelle : pour un prochain article.
- vérifier les validations

Voici donc une petite macro qui va permettre de parcourir l'ensemble des validations de données d'un classeur pour identifier celles qui pourraient contenir des liaisons externes.

Une fois la macro exécutée, une nouvelle feuille est ajoutée au fichier.

Vous noterez que j'utilise des variables tableaux pour stocker le résultat. Ça n'est pas nécessaire, mais cela accélère grandement l'exécution du code, donc c'est une bonne pratique au final, surtout si vous avez des dizaines de milliers de lignes.

Option Explicit

Sub TrouveLiensExternesValidation()
    'Definition des variables
    Dim rgeCell As Range
    Dim sDvForm As String
    Dim counter As Integer
    Dim wksResult As Worksheet
    Dim wks As Worksheet
    Dim arrNomFeuille As Variant
    Dim arrAdresseCellule As Variant
    Dim arrFormule As Variant
    ReDim arrNomFeuille(1 To 1) As Variant
    ReDim arrAdresseCellule(1 To 1) As Variant
    ReDim arrFormule(1 To 1) As Variant
    Dim arrResult As Variant
    
    Dim lRow As Long
    Dim lRowResultat As Long
    'masquer l'actualisation
    Application.ScreenUpdating = False
    'compteur
    lRow = 1
    'on boucle sur toutes les feuilles
    For Each wks In ActiveWorkbook.Worksheets
        wks.Visible = xlSheetVisible
        'on boucle sur toutes les cellules de la feuille
        For Each rgeCell In wks.UsedRange.Cells
            'On reprend la formule
            On Error Resume Next
            sDvForm = ""
            sDvForm = rgeCell.Validation.Formula1
            On Error GoTo 0
            'il y a plusieurs options. On peut tester la presence d'un "[" ou bien du ".xl"
            If InStr(1, sDvForm, ".xl") > 0 Then 'on trouve un ".xl"
                lRow = lRow + 1
                'on peut faire un Preserve, car une seule dimension dans le tableau
                ReDim Preserve arrNomFeuille(1 To lRow) As Variant
                ReDim Preserve arrAdresseCellule(1 To lRow) As Variant
                ReDim Preserve arrFormule(1 To lRow) As Variant
                'on stocke les donnees
                arrNomFeuille(lRow) = wks.Name
                arrAdresseCellule(lRow) = rgeCell.Address
                arrFormule(lRow) = "'" & sDvForm
            End If
        Next rgeCell
    Next wks
    'on rapatrie les resultats dans la feuille
    'On revient en A1
    If lRow <> 0 Then
        'creer la feuille de resultat
        Set wksResult = ActiveWorkbook.Sheets.Add(before:=ThisWorkbook.Sheets(1))
        'wksResult.Name = "external links"
        ReDim arrResult(1 To lRow, 1 To 3) As Variant
        arrResult(1, 1) = "Nom de la feuille"
        arrResult(1, 2) = "Adresse de la cellule"
        arrResult(1, 3) = "Formule"
        For lRowResultat = 2 To UBound(arrNomFeuille, 1)
            arrResult(lRowResultat, 1) = arrNomFeuille(lRowResultat)
            arrResult(lRowResultat, 2) = arrAdresseCellule(lRowResultat)
            arrResult(lRowResultat, 3) = arrFormule(lRowResultat)
        Next lRowResultat
        wksResult.Range("A1:C" & UBound(arrResult, 1)).Value = arrResult
    End If
    Application.ScreenUpdating = True
End Sub

Source d'inspiration : http://dailydoseofexcel.com/archives/2009/05/04/finding-external-links-in-data-validation/#comment-1045713

Pour marque-pages : Permaliens.

4 réponses à Rechercher les liaisons externes liées à une validation

  1. LEVANT Jeff dit :

    Bonjour
    Qu’utilisez-vous pour faire une pareille présentation (lignes numérotées+ mots clé en gras) ? Dans les options de VBE, je n’arrive pas à différencier les polices.
    merci

  2. Ping :Excel : rechercher les liaisons externes liées à une validation – Mobiliblog…

  3. Carol Desjardins dit :

    J’ai une liaison externe dans mon fichier que je ne réussis pas à trouver. J’ai fait la recherche avec ctrl f, regarder dans le gestionnaire de noms, dans les mises en forme conditionnelle, j’ai même utilisé le vba ci-dessus, qui crée une feuille dans lequel il est indiqué dans en A1, nom de la feuille, b1, adresse de la cellule, c1 Formule, et c’est tout. Est-ce-qu’il y a une autre option de recherche?

  4. Gaetan dit :

    Bonjour Carol,
    Vous pouvez m’envoyer le fichier pour voir ce qui se passe.
    Cordialement.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.