Rechercher les liaisons externes liées à une validation

Bon­jour à tous,

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

Il faut en général:
— faire une recherche dans l’ensem­ble du classeur pour un “[“ ou un “.xl” (CTRL+F, et choisir de chercher sur tout le classeur)
— véri­fi­er les noms : onglet For­mules, Ges­tion­naire de noms
— véri­fi­er les mis­es en forme con­di­tion­nelle : pour un prochain article.
— véri­fi­er les validations

Voici donc une petite macro qui va per­me­t­tre de par­courir l’ensem­ble des val­i­da­tions de don­nées d’un classeur pour iden­ti­fi­er celles qui pour­raient con­tenir des liaisons externes.

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

Vous noterez que j’u­tilise des vari­ables tableaux pour stock­er le résul­tat. Ça n’est pas néces­saire, mais cela accélère grande­ment l’exé­cu­tion du code, donc c’est une bonne pra­tique au final, surtout si vous avez des dizaines de mil­liers 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’in­spi­ra­tion : 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 :

    Bon­jour
    Qu’u­tilisez-vous pour faire une pareille présen­ta­tion (lignes numérotées+ mots clé en gras) ? Dans les options de VBE, je n’ar­rive pas à dif­férenci­er les polices.
    merci

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

  3. Carol Desjardins dit :

    J’ai une liai­son externe dans mon fichi­er que je ne réus­sis pas à trou­ver. J’ai fait la recherche avec ctrl f, regarder dans le ges­tion­naire de noms, dans les mis­es en forme con­di­tion­nelle, j’ai même util­isé 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 cel­lule, c1 For­mule, et c’est tout. Est-ce-qu’il y a une autre option de recherche?

  4. Gaetan dit :

    Bon­jour Carol,
    Vous pou­vez m’en­voy­er le fichi­er 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.