!!!!! Mise à jour de tous les liens
activeworkbook.updatelink name:=activeworkbook.linkSources
Ouverture sans mise à jour des liens (vous pouvez changer cela dans outils/options)
dim WB As Workbook set WB = workbooks.Open(filename:="Test.xls",updatelinks:=0)
'Workbooks.Open
"C:\Temp\Test.xls", False
workbooks.open("zaza.xls",3)
'Empêcher la mise à jour des liaisons du classeur que l'on
sélectionne dans la boite de dialogue ouvrir :
3 points à voir
Changement du classeur source Cela est possible avec la méthode ChangeLinks, vous trouverez des infos dans l'aide.If Application.Dialogs(xlDialogOpen).Show(, 0) Then ....
Ouvre ton classeur, va dans Outils -> Options, onglet "Modification", désactive l'option "Confirmation de la mise à jour automatique des liens" puis enregistre ton classeur. Cette boîte de dialogue ne s'affichera plus à l'ouverture du classeur
Voir aussi cette instruction vba : application.asktoupdatelinks=false
voir aussi http://disciplus.simplex.free.fr/xl/file.htm#majouverture
Il faut désactiver le bit 14 de la clé suivante dans la base de registres :
HKEY_USERS\.Default\Software\Microsoft\Office\8.0\Excel \Microsoft Excel\Options5
Lister les liaisons
Sub testliaisonLister les liaisons selon leur type
Liens = activeworkbook.linksources
range("A1").resize(ubound(Liens)) = application.transpose(Liens)
end sub
Il y a 4 types de liaisons, en VBA ce sont des 4 constantes de type Xllink ; les voici : xlExcellinks, xlOLElinks (qui gère également les liaisons DDE), xlPublishers ou xlSubscribers
alinks = activeworkbook.linkSources(xlOLElinks)
if Not IsEmpty(alinks) then
for i = 1 to ubound(alinks)
msgbox "link " & i & ":" & Chr(13) & alinks(i)
next i
end if
J'ai travaillé sur différentes méthodes pour obtenir l'adresse des cellules : voir dernier post sur ce sujet (news)
Lister tousles fichiers d'un répertoire qui possèdent des liaisons : news
Suppression des liaisons
Ca, c'est un sujet qui tient tout le monde en haleine ;-).
La difficulté
avec les liaisons, ce n'est pas vraiment de supprimer celles qui sont créées
par formules.
Des liaisons externes peuvent se trouver partout dans le classeur:
dans des noms (éventuellement cachés), des contrôles (affectations
de macros résidant dans d'autres classeurs), des graphiques, des zones
de texte etc. Et là, à part une macro adaptée, aucun autre
moyen que sélectionner un à un chacun de ces objets pour détecter
les liaisons indésirables.
Pour cela, vous avez :
la très célèbre macro de Bill Manville (findlink.xla) http://www.bmsltd.co.uk/MVP/MVPPage.asp#BillManville ou un assistant de Microsoft que je n'ai pas testé : http://support.microsoft.com/support/kb/articles/Q188/4/49.asp
Remplacer les cellules avec un lien par leur valeur
pas
terrible comme macro, d'autant plus qu'elle est basé sur la présence
d'un crochet [ mais c'est une idée intéressante qu'on pourrait
améliorer
Sub test()
dim Cell As range
for each Cell In selection.Specialcells(xlformulas)
if InStr(1, Cell.formula, "]") <> 0 then Cell.value = Cell.value
next
end Sub
Set mydocument = Worksheets(1)
mydocument.Shapes.AddOLEObject Left:=100, Top:=100, Width:=200, Height:=300, FileName:="c:\my documents\testing.doc", link:=True
Cet exemple montre comment ajouter un nouveau bouton de commande à mydocument.