XL 2019 Liaison rompue d'un classeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Electronull

XLDnaute Junior
Bonsoir à tous,

Je suis à la recherche d'une solution pour refaire la liaison avec un classeur.
Je m'explique : mon classeur de données doit-être dans un dossier, si le fichier excel de travail ne trouve pas le fichier de données, il faut refaire la liaison.
Le problème, ma nièce qui utilisera les fichiers ne connait pas Excel et donc, lui dire d'aller dans Données/Modifier les liaisons n'est pas concevable.
J'aimerais donc automatiser tout cela en VBA, du genre
Je prends le lien de la liaison à l'ouverture du fichier
Si le lien n'est pas là, il faut pouvoir refaire la liaison en désignant le dossier où se trouve le fichier de données.
Refaire la liaison

Si vous avez des idées, je suis preneur. Je cherche et essaye des solutions trouvées sur le net mais c pas facile.

Merci
 
Solution
Re,
Ouvre mon fichier père et regarde les références rattachées (dans vbe menu Outils Références), et mets les même dans ton fichier (toujours sur mon téléphone, je ne peux pas être plus précis)
Il y a une référence qui permet d'utiliser les listview, une fois celle-ci activée tu n'auras plus ce problème.
À bientôt
EDIT : ce post ne traite que les liaisons vers des fichiers Excel (pas des objets OLE insérés)
Bonsoir à toutes & à tous, bonsoir @Electronull
1er point, ce n'est quand même pas trop difficile à apprendre comment actualiser des liaisons, mais bon, on continue quand même.
2ème point la réaction d'Excel aux liaisons dépend aussi d'options choisies :
Vue 2024 :
1739132877517.png


Vue 2007 :
1739132907407.png


Bon maintenant pour gérer les liaisons vers d'autres classeurs Excel on peut passer par un formulaire qui s'affiche à l'ouverture du classeur père si l'on détecte des liaisons rompues vers d'autres classeurs.

ThisWorkbook.LinkSources(xlExcelLinks) renvoie un tableau des liaisons vers d'autres fichiers Excel (liste des noms complets des fichiers)
Il suffit donc de tester l'existence de ces fichiers pour savoir si les liaisons sont rompues.

Si des liaisons sont rompues, on affiche un formulaire avec la liste des fichiers disparus et on propose de choisir des nouveaux fichiers ;
avec la liste des fichiers choisis on met à jour les liaisons ce qui se fait avec la syntaxe ThisWorkbook.ChangeLink Ancien, Nouveau

Formulaire proposé (à toi d'adapter):
1739134068714.png


Voilà pour le principe, l'application se trouve dans les fichiers joints :
Exemple.xlsm Classeur père qui comporte des liaisons vers des fichiers Excel
xPremier classeur.xlsx 1er classeur vers lequel pointent des liaisons (liaison rompue)
xDeuxième classeur.xlsx 2ème classeur vers lequel pointent des liaisons xPremier classeur.xlsx (liaison rompue)

Voir les pièces jointes

À bientôt
 

Pièces jointes

Dernière édition:
Bonjour AtTheOne,

Merci pour tes fichiers, désolé de ne pas avoir répondu plus tôt.
Je ne comprends pas le code suivant que j'essaie de placer dans mon code.
De plus, je ne trouve nulle part l'appel à cette fonction dans ton code.

'Renvoie True si l'item désigné par son nom appartient à la collection
'Exemple Collection = worksheets, Item = "Feuil1"
Function EstDansCollection(Coln As Object, Item As String) As Boolean
Application.Volatile
Dim obj As Object
On Error Resume Next
Set obj = Coln(Item)
EstDansCollection = Not obj Is Nothing
End Function

quand je démarre mon code, j'ai une erreur sur , LI As ListItem et LiB As ListItem dans la procédure Private Sub UserForm_Initialize()

merci pour ton aide
 
Dernière édition:
Bonjour à toutes & à tous, bonjour @Electronull
Je ne comprends pas le code suivant que j'essaie de placer dans mon code.
Suppose que tu cherches si une feuille, désignée par son nom, existe dans le classeur actif.
La collection est ThisWorkbook.Worksheets (la collection des feuilles du classeur)
Si le nom de la feuille cherchée est "MaFeuille"
L'appel de la fonction est
Résultat = EstDansCollection(ThisWorkbook.Worksheets, "MaFeuille")
Résultat contiendra True si la feuille existe et False si elle n'existe pas.
Tu peux placer l'appel directement dans un test plutôt que dans une variable.
Pour le reste, avec le peu d'éléments que tu me donnes, je ne peux guère t'aider.
Est-ce qu'avec les fichiers que je t'ai envoyés cela fonctionne ?
Je suis sur mon téléphone, difficile d'aller plus loin.
À bientôt
 
Salut,
Merci pour ta réponse.
En fait, oui tes fichiers fonctionnent.
Mais quand je copie ton code dans mes fichiers, il y a des erreurs sur cette ligne
Dim LiB As ListItem, LI As ListItem

Type défini par l'utilisateur non défini
 
Dernière édition:
Re,
Ouvre mon fichier père et regarde les références rattachées (dans vbe menu Outils Références), et mets les même dans ton fichier (toujours sur mon téléphone, je ne peux pas être plus précis)
Il y a une référence qui permet d'utiliser les listview, une fois celle-ci activée tu n'auras plus ce problème.
À bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Classeur Disparu
Réponses
2
Affichages
493
Retour