Problème de liens externes (modification après usage d'une macro)
Bonjour à tous,
Je rencontre actuellement un problème et malheureusement, mes connaissances en VBA sont trop limitées pour m'en sortir tout seul
J'ai une feuille avec plusieurs liens externes (soit sur des dossiers, soit sur des fichiers). De nouveaux liens sont ajoutés régulièrement par les différents utilisateurs du fichier. Malheureusement, j'ai remarqué que l'utilisation d'une des macros modifie tous les chemins d'accès des liens, les rendant de ce fait inutilisables. Cette macro permet de faire un backup du document lors de son ouverture. La voici:
Dim ThisBook As Workbook
Dim filePath As String, copyName As String
Set ThisBook = ThisWorkbook
filePath = "Y:\HWCOE\Public\xOrders\2018\backup\"
copyName = filePath & Format(Now(), "yyyy_mm_dd__hhmmss") & ".xlsm"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
ThisBook.SaveCopyAs copyName
ActiveWorkbook.Save
.DisplayAlerts = True
.ScreenUpdating = True
End With
Application.EnableEvents = True
Exit SubLa modification des liens se produit lors de l’exécution de la commande ThisBook.SaveCopyAs copyName, mais je n'ai pas trouvé la raison de ce changement.
Votre aide sera plus que bienvenue
Merci d'avance à tous!
Amicalement,
Julien
Bonjour
Il serait bien que tu t'intéresse à la notion de dossier courant (CurDir).
A partir du moment où tu ouvres un dossier pour enregistrer ou ouvrir un document, que ce soit manuellement ou par VBA, cela change le dossier courant... (même d'ailleurs si tu changes d'avis et ne fait rien dans le dossier)
Il te faut donc redéfinir le dossier courant (ChDir) avant d'enregistrer le classeur sinon tous les liens sont recalculés en fonction du dossier courant.
Bonjour 78chris,
Merci pour ta réponse. Je suis allé faire un tour sur google et j'ai trouvé quelques informations quant à cette fonction. J'ai également fait quelques essais dans VBA pour voir comment cela fonctionne... je dois dire que je ne comprends toujours pas son fonctionnement...
La fonction de test suivante retourne simplement C:\Users\E814770\Documents.
Function myDir()
MsgBox CurDir()
End FunctionSi je donne comme paramètre à cette fonction un autre disque (par exemple CurDir("Y")), celui-ci change effectivement (le message box affiche alors Y:\). Cependant, il est impossible de renseigner plus précisément le chemin d'accès (Y:\dossier\sousdossier).
Je ne comprends donc pas très bien l'utilité de cette fonction... Merci de m'éclairer encore un peu
Merci d'avance
Amicalement,
Julien
RE
Oublie un peu VBA et teste juste le comportement à la main.
Tu lances Excel, tu utilises fichier Ouvrir : un dossier s'affiche : c'est le répertoire courant.
Navigue dans l'arborescence, ouvre ou pas un nouveau fichier.
Puis refais fichier Ouvrir : tu constateras que tu es maintenant dans le dossier où tu as navigué et non dans le 1er : le répertoire courant a changé.
Tous les liens sont évalués par rapport au répertoire courant au moment de la sauvegarde.
Il est donc important quand on navigue, manuellement ou via VBA, dans divers dossiers de se repositionner sur le bon dossier, avec ChDir si VBA
Petit rappel : VBA ne change pas le comportement d'Excel. Il faut donc le connaître pour bien coder
Merci 78chris,
Je ne suis tout de même pas certain d'avoir complètement saisi le concept. Cependant, je vais encore essayer de trouver la solution par moi-même. Sinon, je reviendrai compléter ce post!
Amicalement
Julien