Macro=> Modif liaisons

f1f00

XLDnaute Occasionnel
Bonjour a tous

Quelqu'un connaitrait il une macro pour pouvoir modifier les liaisons?
Je m'explique le dossier source ne bouge pas mais quand je le copie dans un autre emplacement je dois modifier les liaisons manuellement et ca prend du temps. Je voudrais en choisissant un nom d'entreprise et une année pouvoir changer les liaisons qu'il y a dans les classeurs de se dossier.

c:/.../Nom de l'entreprise/année/... C'est le chemin classique d'un dossier mais cela doit être modifiable.

De la même manière est il possible de faire une macro qui ouvre un classeur dans le dossier source et qu'il l'enregistre sous le nouveau dossier. Sachant qu'il faut aussi que cela soit facilement modifiable.
 

kjin

XLDnaute Barbatruc
Re : Macro=> Modif liaisons

Bonjour,
:confused:
Si tu déplaces le classeur source, les liaisons doivent suivre en principe
Si tu en fais une copie, la copie n'en deviendra pas pour autant le classeur source.
Donc veux tu dire que tu veux remplacer les liaisons avec le classeur source par des liaisons avec sa copie ?
A+
kjin
 

f1f00

XLDnaute Occasionnel
Re : Macro=> Modif liaisons

En fait les liaisons sont entre plusieurs classeurs et on doit spécifier le nouvel emplacement des classeurs lorsqu'on fait une copie. Mais jai bcp de classeurs donc ce changement me prend du temps
 

f1f00

XLDnaute Occasionnel
Re : Macro=> Modif liaisons

A chaque fois que je copie un dossier complet avec tous les classeurs à l'intérieur je dois réactualiser les liaisons entre les classeurs sinon excel considère que le classeur est lié avec le classeur source.
Je ne peux pas utiliser le ctrl+h pour remplacer car pour certains remplacement ca ne marche pas. Le message d'erreur est "Formule trop longue" et je pense que c'est parce qu'il doit faire plus de 700 000 ou 1 000 000 de remplacements que cela bloque. DOnc je vais dans édition/liaisons et je rétébli la liaison avec le nouveau classeur. Mais cela prend du temps et je me demandais si il ne serait pas possible d'avoir une macro qu'on activerait à l'aide d'un bouton et qui actualiserait les liaisons.

En outre certains classeurs sont si lourd que même en passsant par édition/liaisons et en modifiant la source le message d'erreur "Formule trop longue" apparait la je dois user d'un subterfuge et en fait j'ouvre le classeur du nouveau dossier avec le classeur lié du dossier source ensuite j'enregistre sous le classeur source vers son, emplacement dans le nouveau dossier ainsi excel fait la liaison.
Et c'est pour ca que j'aimerai savoir si il était possible de faire ca par une macro a laide d'un bouton aussi, d'enregistrer sous un nouvel emplacement.

La ou tout ce complique c'est que je veux que l'emplacement du nouveau dossier, CAD le nom du répertoire ou se trouve les nouveaux classeurs, soit modifiable à partir d'une cellule excel CAD dans la cellule A1 se trouve l'emplacement ou enregister sous les classeurs et ou établir les liaisons. Et la macro doit faire référence à cette cellule.
 

kjin

XLDnaute Barbatruc
Re : Macro=> Modif liaisons

Bonjour,
Une adaptation de L. Longre
Code:
Sub ChangerLiaisons()
Dim Liaison, OldSource, NewSource
OldSource = InputBox("Entrez le chemin complet de l'ancienne Source", "Changement de Source")
NewSource = InputBox("Entrez le chemin complet de la nouvelle Source", "Changement de Source")
If OldSource = "" Or NewSource = "" Then Exit Sub
    For Each Liaison In ActiveWorkbook.LinkSources(xlExcelLinks)
        If LCase(Liaison) = LCase(OldSource) Then Exit For
    Next
    If Not IsEmpty(Liaison) Then ActiveWorkbook.ChangeLink Liaison, NewSource
End Sub
Maintenant si tu veux récupérer le chemin dans une cellule, il faudra être plus précis
A+
kjin
 

f1f00

XLDnaute Occasionnel
Re : Macro=> Modif liaisons

Salut kjin on pourrait pas imaginer que par exemple la old source se trouve dans la cellule A2 et la new source dans la cellule A3?
Quest ce que donnerait la macro?

Et comment faire pour l'activer par un bouton?
 

kjin

XLDnaute Barbatruc
Re : Macro=> Modif liaisons

Bonsoir,
Si en A2 : 'Chemin complet\ClasseurX.xls
Si en A3 : 'Chemin complet\ClasseurX.xls
il suffit de remplacer la boite de dialogue par le contenu de ces cellules
Code:
Sub ChangerLiaisons()
Dim Liaison, OldSource, NewSource
OldSource = Range("A2")
NewSource = Range("A3")
    For Each Liaison In ActiveWorkbook.LinkSources(xlExcelLinks)
        If LCase(Liaison) = LCase(OldSource) Then Exit For
    Next
    If Not IsEmpty(Liaison) Then ActiveWorkbook.ChangeLink Liaison, NewSource
End Sub
A+
kjin
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal