Liaisons à l'ouverture d'un classeur

!!!!! 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

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

Changement du classeur source Cela est possible avec la méthode ChangeLinks, vous trouverez des infos dans l'aide.
Moi je vous propose un exemple de LL : news

A l'ouverture d'un classeur, le message "Ce classeur comporte des liaisons......" s'affiche
Existe t'il un moyen pour désactiver l'affichage de ce message tout en mettant à jour les liaisons !!
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

Chercher les liaisons sur un classeur précis :
news

Lister tous les liens d'un classeur
Sub testliaison
Liens = activeworkbook.linksources
range("A1").resize(ubound(Liens)) = application.transpose(Liens)
end sub
Lister les liaisons selon leur type
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

 


 

Divers

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

Comment lier un document Word lié à une feuille de calcul
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.

 


Collage avec liaison

Exemple de collage avec liaison : activesheet.paste link:=true
Copie d'une feuille avec liaison : news
Exemple de collage avec omission des valeurs nulles, sans opération effectuée et non transposée
selection.pastespecial paste:=xlAll, Operation:=xlNone, SkipBlanks:=true , transpose:=false