IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Liaisons perdues qu'on ne peut supprimer


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    chargé d'affaires
    Inscrit en
    Novembre 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : chargé d'affaires
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 51
    Points : 22
    Points
    22
    Par défaut Liaisons perdues qu'on ne peut supprimer
    Bonjour,

    J'ai un fichier excel qui a des liaisons vers d'autres fichiers. Jusque là c'est normal.
    Sauf qu'un fichier d'une des liaisons à disparu, et que je ne peux pas supprimer cette liaison ni la modifier.

    J'ai donc cherché et j'ai fini par trouver une explication utile.
    Au delà des simples formules de ma feuille, les liaisons sont aussi dans les mises en formes conditionnelles et les validations de données.
    Sauf que mon fichier à bcp de feuilles et le tableau principal est immense.
    L'explication que j'ai trouvé vient de cette page. Il est proposé de passer par le VBA avec la macro décrite sur cette page.

    Sauf que moi, je ne veux supprimer qu'une liaison, pas toutes, est-il possible d'adapter la macro pour se focaliser sur 1 liaison en particulier ?

    Merci d'avance !

    Pierre

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Pour autant que je sache, il n'y a pas de liaison externe dans les mises en forme conditionnelles et les Validations de données.

    Cette macro permet de lister les liaisons d'un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    ' Objet : Liste les liaisons externe du fichier actif
    ' 19/02/16 Patrice33740 V1-0-00
    '
    Option Explicit
    Option Private Module
    '
    ' - couleurs (ColorIndex)
    Private Const VertClair As Integer = 35
    ' - autres
    Private Const Txt_Rapport_Modif As String = "Liste des liaisons externes trouvées dans le fichier "
    '
     
    Sub Liste_les_liaisons()
    ' Liste les liaisons du classueur actif.
    ' 19/02/16 Patrice33740 V1-0-00
    '
    Dim lnk As Variant                'Liaisons externes du fichier
    Dim nmR As String                 'Nom du fichier rapport des liaisons
     
      'Arrêter l'actualisation automatique de l'écran et les calculs
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
      'Rechercher les liaisons externes
      lnk = ActiveWorkbook.LinkSources(xlExcelLinks)
      If Not IsEmpty(lnk) Then Call Edition_des_liaisons(nmR)
      If nmR <> "" Then
        Workbooks(nmR).Activate
      Else
        MsgBox "Il n'y a pas de liaison dans ce classeur"
      End If
      'Restaurer l'actualisation automatique de l'écran et les calculs
      Application.StatusBar = False
      Application.Calculation = xlCalculationAutomatic
      Application.ScreenUpdating = True
     
    End Sub
     
    Private Sub Edition_des_liaisons(nmR As String)
    ' Recherche les formules génératrices de liaison externe dans le classeur actif
    ' Recherche les éléments graphiques et les formes générateurs de liaison externe
    ' Etablit un rapport des liaisons détectées
    ' 08/02/18 Patrice33740 V1-0-01
    '
    Dim wbS As Workbook               'Classeur source (à tester)
    Dim wbR As Workbook               'Classeur rapport des liaisons
    Dim wsh As Worksheet              'Feuille
    Dim gph As ChartObject            'Objet graphique
    Dim sér As Series                 'Série de données du graphique
    Dim nom As name                   'Nom de plage de cellules
    Dim shp As Shape                  'Forme
    Dim rng As Range                  'Plage de cellules
    Dim cel As Range                  'Cellule
    Dim nmF As String                 'Nom de la feuille
    Dim adC As String                 'Adresse cellule(s)
    Dim adM As String                 'Adresse la plage occupée par la formule matricielle
    Dim fml As String                 'Formule
    Dim isM As Boolean                'Flag formule matricielle
     
      'Création du classeur rapport
      Set wbS = Application.ActiveWorkbook
      Set wbR = Application.Workbooks.Add(xlWBATWorksheet)
      nmR = wbR.name
      wbR.Worksheets(1).Cells.NumberFormat = "@"
     
      'Recherche des cellules liées avec un classeur externe dans tout le classeur
      '- titres
      Set rng = wbR.Worksheets(1).Range("A1:C2")
      With rng
        .Font.Bold = True
        .Borders.Weight = xlThin
        .Range(Cells(1, 1), Cells(1, 3)).HorizontalAlignment = xlCenterAcrossSelection
        .Range(Cells(2, 1), Cells(2, 3)).HorizontalAlignment = xlCenter
        .Range(Cells(2, 1), Cells(2, 3)).Interior.ColorIndex = VertClair
        .Cells(1, 1).Value = Txt_Rapport_Modif & wbS.name
        .Cells(1, 1).Font.Size = 16
        .Cells(2, 1).Value = "Feuille"
        .Cells(2, 2).Value = "Cellule(s)"
        .Cells(2, 2).ColumnWidth = 16
        .Cells(2, 3).Value = "Formule avec liaison"
        .Cells(2, 3).ColumnWidth = 128
      End With
      '- plage à renseigner
      Set rng = wbR.Worksheets(1).Range("A3:C3")
      '- analyse feuille à feuille des formules
      For Each wsh In wbS.Worksheets
        Application.StatusBar = "Recherche cellules liées dans " & wsh.name & "..."
        '- analyse de chaque cellule
        For Each cel In wsh.UsedRange
          adC = cel.Address
          fml = cel.FormulaLocal
          isM = False
          '- recherche de formule matricielle
          If cel.HasArray Then
            adM = cel.CurrentArray.Address
            isM = (adC = Mid(adM, 1, InStr(1, adM & ":", ":") - 1))  '1° cellule de la matrice
            If isM Then adC = adM Else fml = ""
          End If
          If InStr(1, fml, "[") > 0 Then
            '- mettre à jour le rapport
            rng.Cells(1, 1).Value = wsh.name
            rng.Cells(1, 2).Value = Replace(adC, "$", "")
            rng.Cells(1, 3).Value = fml
            Set rng = rng.Offset(1)
          End If
        Next cel
      Next wsh
     
      'Recherche des noms liés (plages nommées)
      '- titres
      With rng
        .Font.Bold = True
        .Borders.Weight = xlThin
        .HorizontalAlignment = xlCenter
        .Interior.ColorIndex = VertClair
        .Cells(1, 1).Value = "Feuille"
        .Cells(1, 2).Value = "Nom(s) de plage"
        .Cells(1, 3).Value = "Nom avec liaison"
      End With
      '- plage à renseigner
      Set rng = rng.Offset(1)
      '- analyse des noms du classeur
      If wbS.Names.Count > 0 Then
        '- analyse de chaque nom
        For Each nom In wbS.Names
          fml = nom.RefersToLocal
          If InStr(1, fml, "[") > 0 Then
            '- mettre à jour le rapport
            rng.Cells(1, 1).Value = "Classeur"
            rng.Cells(1, 2).Value = nom.NameLocal
            rng.Cells(1, 3).Value = fml
            Set rng = rng.Offset(1)
          End If
        Next nom
      End If
      '- analyse feuille à feuille des noms
      For Each wsh In wbS.Worksheets
        Application.StatusBar = "Recherche noms liés dans " & nmF & "..."
        If wsh.Names.Count > 0 Then
          '- analyse de chaque nom
          For Each nom In wsh.Names
            fml = nom.RefersToLocal
            If InStr(1, fml, "[") > 0 Then
              '- mettre à jour le rapport
              rng.Cells(1, 1).Value = wsh.name
              rng.Cells(1, 2).Value = nom.NameLocal
              rng.Cells(1, 3).Value = fml
              Set rng = rng.Offset(1)
            End If
          Next nom
        End If
      Next wsh
     
      'Recherche des graphiques liés
      '- titres
      With rng
        .Font.Bold = True
        .Borders.Weight = xlThin
        .HorizontalAlignment = xlCenter
        .Interior.ColorIndex = VertClair
        .Cells(1, 1).Value = "Feuille"
        .Cells(1, 2).Value = "Graphique(s)"
        .Cells(1, 3).Value = "Série avec liaison"
      End With
      '- plage à renseigner
      Set rng = rng.Offset(1)
      '- analyse feuille à feuille des graphiques
      For Each wsh In wbS.Worksheets
        Application.StatusBar = "Recherche graphiques liés dans " & nmF & "..."
        If wsh.ChartObjects.Count > 0 Then
          For Each gph In wsh.ChartObjects
            '- analyse de chaque série
            For Each sér In gph.Chart.SeriesCollection
              fml = sér.FormulaLocal
              If InStr(1, fml, "[") > 0 Then
                '- mettre à jour le rapport
                rng.Cells(1, 1).Value = wsh.name
                rng.Cells(1, 2).Value = gph.Chart.name
                rng.Cells(1, 3).Value = fml
                Set rng = rng.Offset(1)
              End If
            Next sér
          Next gph
        End If
      Next wsh
     
      'Recherche des formes liées
      '- titres
      With rng
        .Font.Bold = True
        .Borders.Weight = xlThin
        .HorizontalAlignment = xlCenter
        .Interior.ColorIndex = VertClair
        .Cells(1, 1).Value = "Feuille"
        .Cells(1, 2).Value = "Forme(s)"
        .Cells(1, 3).Value = "Forme avec liaison"
      End With
      '- plage à renseigner
      Set rng = rng.Offset(1)
      '- analyse feuille à feuille des formes
      For Each wsh In wbS.Worksheets
        Application.StatusBar = "Recherche formes liées dans " & nmF & "..."
        If wsh.Shapes.Count > 0 Then
          '- analyse de chaque forme
          For Each shp In wsh.Shapes
            fml = ""
            On Error Resume Next
            fml = shp.DrawingObject.Formula
            On Error GoTo 0
            If InStr(1, fml, "[") > 0 Then
              '- mettre à jour le rapport
              rng.Cells(1, 1).Value = wsh.name
              rng.Cells(1, 2).Value = shp.name
              rng.Cells(1, 3).Value = fml
              Set rng = rng.Offset(1)
            End If
          Next shp
        End If
      Next wsh
     
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/09/2018, 13h51
  2. Ne peut supprimer un DC d'un domaine
    Par mioux dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 24/11/2016, 21h56
  3. "Liaisons" perdues
    Par Lucius Snow dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2009, 17h51
  4. Réponses: 2
    Dernier message: 26/09/2006, 09h08
  5. Quels sont les tâches dont on peut supprimer ?
    Par bertrand_declerck dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 11/01/2006, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo