Liaison introuvable

Bonjour,

Je travaille actuellement sur un gros fichier dont la fonction n'a pas d'importance ici, et lorsque je l'ouvre, il m'indique qu'il y a une liaison (vers une version précédente du même doc) qu'excel ne peut pas reconstituer. Je sais pourquoi (l'ancienne version a été déplacée dans un dossier "old"), et comme je ne veux pas la conserver je voudrais la localiser pour mettre à jour la cellule.

Problème, impossible de trouver la liaison. J'ai essayé plusieurs méthodes :

1. ctrl+F dans l'ensemble du workbook en cherchant une séquence de caractère improbable issue du nom du fichier vers lequel renvoie la liaison

2. ctrl+F avec l'ensemble du nom du fichier

3. crtl+F avec le nom et l'adresse du fichier

4. Ctrl+H pour remplacer tous les "=" par rien pour faire sauter toutes les formules et refaire une recherche (même si avec les options avancées du ctrl+F j'aurais dû tomber dessus...)

5. Macro pour remonter les liaisons (j'ai utilisé deux macros, je les mets-ci dessous).

6. Balayer manuellement toutes les cellules des sections dans lesquelles j'ai avancé pour voir si je tombe sur la liaison

J'ai malheureusement beaucoup trop avancé pour pouvoir recommencer sur une version antérieure, et le fichier est bien trop complexe pour faire des copier-coller sauvage afin de trouver la liaison...

Si quelqu'un ici a un conseil ou une solution, j'offre mon éternelle reconnaissance, parce que je suis à deux doigts de brûler tout l'étage...

Ah, et je ne partage pas le fichier car c'est du confidentiel

Macro 1 : pour trouver les liens dans le workbook et les afficher dans une feuille créée à cet effet. Cette macro trouve effectivement un lien.

Sub links()
'Updateby20140529
Dim wb As Workbook
Set wb = Application.ActiveWorkbook

If Not IsEmpty(wb.LinkSources(xlExcelLinks)) Then
    wb.Sheets.Add
    xIndex = 1
    For Each Link In wb.LinkSources(xlExcelLinks)
        Application.ActiveSheet.Cells(xIndex, 1).Value = Link
        'Application.ActiveSheet.Cells(xIndex, 2).Value = link.Address
        Debug.Print Link
        xIndex = xIndex + 1
    Next Link
End If

End Sub

Macro 2 qui devrait me donner l'adresse de la cellule qui contient la liaison. Mais elle ne me retourne rien...

Sub listLinks()
    alinks = ActiveWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(alinks) Then
        Sheets.Add
        shtName = ActiveSheet.Name
        Set summaryWS = ActiveWorkbook.Worksheets(shtName)
        summaryWS.Range("A1") = "Worksheet"
        summaryWS.Range("B1") = "Cell"
        summaryWS.Range("C1") = "Formula"
        summaryWS.Range("D1") = "Workbook"
        summaryWS.Range("E1") = "Link Status"
        For Each ws In ActiveWorkbook.Worksheets
            If ws.Name <> summaryWS.Name Then
                For Each rng In ws.UsedRange
                    If rng.HasFormula Then
                        For j = LBound(alinks) To UBound(alinks)
                            filePath = alinks(j)   'LinkSrouces returns full file path with file name
                            Filename = Right(filePath, Len(filePath) - InStrRev(filePath, "\"))   'extract just the file name
                            filePath2 = Left(alinks(j), InStrRev(alinks(j), "\")) & "[" & Filename & "]"  'file path with brackets

                            If InStr(rng.Formula, filePath) Or InStr(rng.Formula, filePath2) Then
                                nextrow = summaryWS.Range("A" & Rows.count).End(xlUp).Row + 1
                                summaryWS.Range("A" & nextrow) = ws.Name
                                summaryWS.Range("B" & nextrow) = Replace(rng.Address, "$", "")
                                summaryWS.Hyperlinks.Add Anchor:=summaryWS.Range("B" & nextrow), Address:="", SubAddress:="'" & ws.Name & "'!" & rng.Address
                                summaryWS.Range("C" & nextrow) = "'" & rng.Formula
                                summaryWS.Range("D" & nextrow) = filePath
                                summaryWS.Range("E" & nextrow) = linkStatusDescr(ActiveWorkbook.LinkInfo(CStr(filePath), xlLinkInfoStatus))
                                Exit For
                            End If
                        Next j

                        For Each namedRng In Names
                            If InStr(rng.Formula, namedRng.Name) Then
                                filePath = Replace(Split(Right(namedRng.RefersTo, Len(namedRng.RefersTo) - 2), "]")(0), "[", "") 'remove =' and range in the file path
                                nextrow = summaryWS.Range("A" & Rows.count).End(xlUp).Row + 1
                                summaryWS.Range("A" & nextrow) = ws.Name
                                summaryWS.Range("B" & nextrow) = Replace(rng.Address, "$", "")
                                summaryWS.Hyperlinks.Add Anchor:=summaryWS.Range("B" & nextrow), Address:="", SubAddress:="'" & ws.Name & "'!" & rng.Address
                                summaryWS.Range("C" & nextrow) = "'" & rng.Formula
                                summaryWS.Range("D" & nextrow) = filePath
                                summaryWS.Range("E" & nextrow) = linkStatusDescr(ActiveWorkbook.LinkInfo(CStr(filePath), xlLinkInfoStatus))
                                Exit For
                            End If
                        Next namedRng
                    End If
                Next rng
            End If
        Next
        Columns("A:E").EntireColumn.AutoFit
        lastrow = summaryWS.Range("A" & Rows.count).End(xlUp).Row

        For r = 2 To lastrow
            If ActiveSheet.Range("E" & r).Value = "File missing" Then
                countBroken = countBroken + 1
            End If
        Next

        If countBroken > 0 Then
            sInput = MsgBox("Do you want to remove broken links of status 'File missing'?", vbOKCancel + vbExclamation, "Warning")
            If sInput = vbOK Then
                For r = 2 To lastrow
                    If ActiveSheet.Range("E" & r).Value = "File missing" Then
                        Sheets(Range("A" & r).Value).Range(Range("B" & r).Value).ClearContents
                        dummy = MsgBox(countBroken & " broken links removed", vbInformation)
                    End If
                Next
            End If
        End If
    Else
        MsgBox "No external links"
    End If
End Sub
Public Function linkStatusDescr(statusCode)
           Select Case statusCode
                Case xlLinkStatusCopiedValues
                    linkStatusDescr = "Copied values"
                Case xlLinkStatusIndeterminate
                    linkStatusDescr = "Unable to determine status"
                Case xlLinkStatusInvalidName
                    linkStatusDescr = "Invalid name"
                Case xlLinkStatusMissingFile
                    linkStatusDescr = "File missing"
                Case xlLinkStatusMissingSheet
                    linkStatusDescr = "Sheet missing"
                Case xlLinkStatusNotStarted
                    linkStatusDescr = "Not started"
                Case xlLinkStatusOK
                    linkStatusDescr = "No errors"
                Case xlLinkStatusOld
                    linkStatusDescr = "Status may be out of date"
                Case xlLinkStatusSourceNotCalculated
                    linkStatusDescr = "Source not calculated yet"
                Case xlLinkStatusSourceNotOpen
                    linkStatusDescr = "Source not open"
                Case xlLinkStatusSourceOpen
                    linkStatusDescr = "Source open"
                Case Else
                    linkStatusDescr = "Unknown status"
            End Select
End Function

Bonjour

as tu regarder dans le gestionnaire de nom ???

fred

Bonjour et merci pour l'accueil

Je n'avais pas regardé et c'est chose faire, je n'ai pas de référence dans le naming, juste mes print_area

parfois excel garde en mémoire des liaisons... as tu essayé de rompre les liaisons ??

car normalement quand il y a liaison d'une cellule vers un autre fichier le debut de la formule doit commencé par :

='[

si tu n'as rien trouvé, et le code des liaisons n'a rien trouvé je ferais une tentative de suppression des liaisons

fred

sinon autre piste de recherche as tu des liste de validation de données ?? des mises en formes conditionnelles ?? des formes avec lien hypertexte vers autre feuille ou autre ???

fred

C'est également ce que je me suis dit, j'ai donc voulu faire ça, je suis allé dans "données" > "Editer les liens" et j'ai voulu breaker la liaison. Mais quand je clique sur "break link" j'ai une fenêtre qui me prévient des conséquences et me demande si je suis sûr de vouloir briser le lien. Je valide en cliquant sur l'option "break" et rien ne se passe, la liaison apparaît toujours dans la liste des liens. J'ai recommencé une quinzaine de fois en me demandant si le lien n'était pas répété, mais non, rien à faire ça ne bouge pas.

Je deviens fou ^^

Bonne idée, je viens de vérifier toutes les formes auxquelles j'ai affecté une macro, et je suis bon. Par contre la mise en forme conditionnelle, j'en ai absolument partout, ça va être coton à éplucher.

tu peux visualiser en une fois toutes les mises en forme conditionnelle ... certes feuille par feuille mais cela simplifie quand même

menu mise en forme/gérer les mises en forme et sélectionner les feuilles une par une.

capture

fred

et au fait juste comme ca... par hasard, les feuilles de ton fichier ne sont pas vérouillées ??? si c'est le cas deprotège et essai la suppression de la liaison je me suis déjà retrouvé dans ce genre de cas...

fred

Merci pour ton aide, j'ai fini par m'en sortir. Mes feuilles ne sont pas (encore) protégées.

Je mets ci-dessous ma solution, parce que vu la galère que c'était, ça vaut le coup :

1. j'ai changé l'extension en .zip et je l'ai ouvert avec 7zip (winrar fonctionnera aussi bien j'imagine), et j'ai trouvé la xl/worksheet dans le zip

2. j'ai extrait le fichier xlm que j'ai drag&droppé sur IE (chrome m'ayant lâché...).

3. Ctrl+F pour trouver une séquence de caractère peu commune

La séquence était dans les "sheet6" et "sheet7", avec une règle "cellIS" qui correspond effectivement à une mise en forme conditionnelle. Donc j'ai pu localiser les cellules concernées un peu plus facilement comme ça.

Presque une journée de boulot cramée là dessus, mais au moins le fichier est fini et tout propre

Encore merci !

Tant mieux que cela soit résolu.

a+

Fred

Rechercher des sujets similaires à "liaison introuvable"