| auteur : Bidou |
Il est possible d'utiliser :
Vba |
Application. AskToUpdateLinks = True
|
Néanmoins cela ne supprime que la boîte de dialogue et les liaisons sont mises à jour. Pour empêcher la mise à jour des liaisons
sans boîte de dialogue, il faut mettre le paramètre UpdateLinks de la méthode Open de l'objet Workbook à False.
|
| auteur : Bidou |
Ce n'est pas toujours évident. Pour supprimer les liaisons il y a globalement deux méthodes. Une recherche complète
permettant la récupération de ce qui est récupérable
Vba |
Sub ChercheLiaison ()
Dim NomFichier As String , MonClasseur As Workbook, Liaisons As Variant
Dim compteur As Long, comptCar As Long, Cible As Range
Dim FirstAddress As String , PlageLiee As Range, comptFeuille As Long, Reponse As Integer
Dim MaFeuille As Worksheet, MonGraphe As Chart, MonGraphe1 As ChartObject, MaSerie As Series
NomFichier = Application. GetOpenFilename
Workbooks. Open NomFichier, False
Set MonClasseur = ActiveWorkbook
Liaisons = MonClasseur. LinkSources
If IsEmpty (Liaisons) Then Exit Sub
For Each MaFeuille In MonClasseur. Worksheets
MaFeuille. Activate
MaFeuille. Cells . Select
For compteur = 1 To UBound (Liaisons)
For comptCar = Len (Liaisons (compteur)) To 1 Step - 1
If Mid (Liaisons (compteur), comptCar, 1 ) = " \ " Then
Liaisons (compteur) = Mid (Liaisons (compteur), comptCar + 1 )
Exit For
End If
Next comptCar
Set Cible = Selection. Find (What:= Liaisons (compteur), After:= ActiveCell, LookIn:= xlFormulas, _
LookAt:= xlPart, SearchOrder:= xlByRows, SearchDirection:= xlNext, _
MatchCase:= False )
If Not Cible Is Nothing Then
FirstAddress = Cible. Address
Do
If PlageLiee Is Nothing Then Set PlageLiee = Cible Else Set PlageLiee = Union (PlageLiee, Cible)
Set Cible = Selection. FindNext (After:= Cible)
Loop While Not Cible Is Nothing And Cible. Address < > FirstAddress
End If
Next compteur
If Not PlageLiee Is Nothing Then
Reponse = MsgBox (" La feuille " & MaFeuille. Name & " contient " & PlageLiee. Cells . Count & _
" cellules avec des liaisons " & vbCrLf & _
" voulez-vous les supprimer ? " , vbYesNo + vbQuestion , " Liaisons trouvées " )
If Reponse = 6 Then
For Each Cible In PlageLiee. Cells
Cible. Formula = Cible. Value
Next
End If
Set PlageLiee = Nothing
End If
For Each MonGraphe1 In MaFeuille. ChartObjects
For Each MaSerie In MonGraphe1. SeriesCollection
For compteur = 1 To UBound (Liaisons)
If InStr (1 , MaSerie. Formula , Liaisons (compteur), vbTextCompare) > 0 Then
Reponse = MsgBox (" le graphe de la feuille " & MonGraphe1. Name & _
" contient une série " & MaSerie. Name & " avec des liaisons " & vbCrLf & _
" Voulez-vous les supprimer ? " , vbYesNo + vbQuestion , " Liaisons trouvées " )
If Reponse = 6 Then
MaSerie. Delete
Exit For
End If
End If
Next compteur
Next
Next
Next
For Each MonGraphe In MonClasseur. Charts
For Each MaSerie In MonGraphe. SeriesCollection
For compteur = 1 To UBound (Liaisons)
If InStr (1 , MaSerie. Formula , Liaisons (compteur), vbTextCompare) > 0 Then
Reponse = MsgBox (" le graphe de la feuille " & MonGraphe. Name & _
" contient une série " & MaSerie. Name & " avec des liaisons " & vbCrLf & _
" voulez-vous les supprimer ? " , vbYesNo + vbQuestion , " Liaisons trouvées " )
If Reponse = 6 Then
MaSerie. Delete
Exit For
End If
End If
Next compteur
Next
Next
End Sub
|
Une méthode beaucoup plus violente qui consiste à modifier les liaisons par le nom du classeur source. Cela va créer des références
circulaires qu'il faudra alors supprimer. Les données anciennement liées seront perdues.
Vba |
Dim Nom As String , objWorkbook As Workbook, TabLiaison As Variant, cmpt As Long
Dim objWorksheet As Worksheet, objRange As Range
Set objWorkbook = Application. Workbooks . Open (Application. GetOpenFilename , UpdateLinks:= 0 )
TabLiaison = objWorkbook. LinkSources (xlExcelLinks)
If IsEmpty (TabLiaison) Then Exit Sub
For cmpt = LBound (TabLiaison) To UBound (TabLiaison)
objWorkbook. ChangeLink TabLiaison (cmpt), objWorkbook. FullName , xlLinkTypeExcelLinks
Next cmpt
For Each objWorksheet In objWorkbook. Worksheets
Do
Set objRange = objWorksheet. CircularReference
If Not objRange Is Nothing Then objRange. Value = objRange. Value
Loop While Not objRange Is Nothing
Next objWorksheet
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|