Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Mise à jour des liaisons externes d'un classeur sans ouvrir les classeurs sources

tetter88

XLDnaute Nouveau
Bonjour à vous,

J'ai un fichier de destination, (appelons-le "Classeur A") qui contient des liaisons externes vers d'autres fichiers sources ("Classeurs B", "C", "D", "E" par exemple). Les formules sont des RECHERCHEV et des SOMME.SI.ENS exclusivement. La mise à jour de mes liens fonctionnent très bien lorsque les classeurs "B", "C", "D," et "E" sont ouverts mais pas quand ils sont fermés.

J'ai bien décoché la case "Confirmer la mise à jour automatique des liens" dans Fichier ->Option -> Options avancées -> Générales mais cela ne résout pas mon souci.

Mes fichiers sources sont .csv mais j'ai tenté de les mettre en .xlsx, cela ne change rien.

Petit détail qui a son importance, tous les fichiers sont sur mon ordinateur mais partagés en dropbox avec d'autres utilisateurs. Il faudrait donc que les mises à jours soit faites également chez eux directement.

Je sais que les liens externes vers d'autres classeurs ne sont pas idéaux et, initialement, mon classeur A avait toutes les données des autres classeurs mais le fichier final faisait plus de 40 mo, impossible donc à gérer. J'ai donc décidé de scinder les informations en plusieurs classeurs plus petit.

Merci beaucoup pour votre aide et à votre disposition s'il y a des questions.

Cordialement,
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour tetter88, le forum

Il faut plus de précisions !
Tu utilises Indirect pour tes liaisons ? si c'est le cas, normal que les fichiers doivent être ouverts pour la mise à jour des liens.
Tu veux que tes liens se mettent à jour quand ton fichier est ouvert et que tes fichiers sources sont modifiés par d'autres personnes ?

Cordialement, @+
 

tetter88

XLDnaute Nouveau
Bonjour,

Merci pour votre message. Je vais tenter d'être plus explicite, navré.

Je n'ai que des RECHERCHEV et des SOMME.SI.ENS, pas de formule INDIRECT.

Par exemple:
SOMME.SI.ENS('C:\Users\moncompte\Dropbox\SOCIETE\STOCKS\F21\[Consultation de Stock Novembre.csv]
ou
=RECHERCHEV([@[REF ARTICLES]];'C:\Users\moncompte\Dropbox\SOCIETE\DATABASE\Recherche_Articles.xlsx'!LISTING[#Données];4;FAUX)

Personne d'autre que moi ne touche aux fichiers sources. Ils y ont tout de même accès mais n'ont pas d'intérêt à y aller. Seul le fichier de destinations (le classeur A dans mon explication) est utilisée par plusieurs personnes.

C'est donc moi qui fait les modifications sur les fichiers sources.

Néanmoins, quand j'ouvre le classeur A sans avoir ouvert les autres, la mise à jours ne se fait pas et je reçoit des #REF sur toutes les cellules où il y a les liaisons.

Ce que je souhaite donc, c'est que lorsque quelqu'un ouvre le fichier A, il n'ait pas à ouvrir tous les autres pour actualiser les liaisons et n'ait pas les #REF.

Cordialement,
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,

vous adressez un nom de tableau structuré dans le classeur, le nom n'existe pas si le fichier est fermé.
faites votre recherche en attaquant les plages de la feuille et cela passera.

Bien cordialement, @+
 

Wayki

XLDnaute Impliqué
Bonjour,
Je complèterai par le fait que pour qu'un utilisateur puisse avoir les liaisons, il faut qu'il ai exactement le même chemin d'accès, et bien entendu que les fichiers soient présent sur la bécane.
Si son compte s'appel "Tartempion", il ne pourra accéder au chemin d'accès C:\Users\moncompte
Il faudra rectifier par C:\Users\Tartempion, sous réserve que le reste du chemin d'accès soit valide.
Pour aller plus loin, la fonction vba environ("username") renvoie le nom d'utilisateur.
A +
 
Dernière édition:

tetter88

XLDnaute Nouveau
re,

vous adressez un nom de tableau structuré dans le classeur, le nom n'existe pas si le fichier est fermé.
faites votre recherche en attaquant les plages de la feuille et cela passera.

Bien cordialement, @+
Re,

Merci beaucoup. En effet, cela marche mieux pour les RECHERCHEV.

Néanmoins, sur les SOMME.SI.ENS, j'ai désormais des #VALEURS!. Quand je vais dans modifier les liaisons, il est indiqué: "CE CLASSEUR CONTIENT DES VALEURS QUI RENVOIENT A D'AUTRES CLASSEURS. OUVREZ CES CLASSEURS SOURCES POUR LES METTRE A JOUR. "

Je ferai demain un fichier de test, ce sera plus facile.
 

tetter88

XLDnaute Nouveau
Bonjour,

Merci beaucoup pour cette excellente remarque auquelle je n'avais pas du tout pensé.

Pouvez-vous m'en dire plus sur cette fonction vba environ("username)? Je ne suis pas du tout au fait sur ce sujet. Je sais ouvrir la console (Alt + F11) et inserer le code mais c'est à peu près tout.

Cordialement,
 

Wayki

XLDnaute Impliqué
Il n'y a pas besoin d'en savoir plus, mettre sub test() et ensuite msgbox environ("username")
Cela affiche le nom du compte utilisé à insérer dans les formules.
Ces formules peuvent être insérée dans le fichier à son ouverture avec vba mais il nous faudrait un fichier pour ça
A +
 

tetter88

XLDnaute Nouveau
Bonsoir tetter88, wayki, le forum

environ("username") ne renvoyant pas forcément le nom utilisé dans le chemin du dossier utilisateur, il vaudrait mieux utiliser pour être sûr d'avoir le bon :
Environ("homepath")

Bien cordialement, @+
Bonjour a tous,

J'ai revu les formules et maintenant toutes les mises à jours se font parfaitement. Merci beaucoup à vous deux.

J'ai bien réussi à intégrer la VBA mais j'ai plutôt fait une
Private Sub Workbook_Open()
Sheets("Macro").Range("A1") = Workbooks(ActiveWorkbook.Name).Path
End Sub

Cela me donne le chemin complet sur une cellule dans une feuille que je masquerais. Est ce qu'à tout hasard il existerait une façon de remplacer dans les formules la partie c:\moncompte selon le chemin de la personne qui ouvrira le fichier svp?

Je suis conscient que je devrais normalement ouvrir un nouveau sujet mais puisque vous m'avez très bien aidé tous les deux jusque là, j'essaye d'en profiter un maximum.

Merci beaucoup
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re,

en premier lieu
Sheets("Macro").Range("A1") = Workbooks(ActiveWorkbook.Name).Path
peut être remplacé par
Sheets("Macro").Range("A1") = ActiveWorkbook..Path
pour le classeur actif ou
Sheets("Macro").Range("A1") = ThisWorkbook.Path
pour le classeur contenant la macro en cours d'exécution
Est ce qu'à tout hasard il existerait une façon de remplacer dans les formules la partie c:\moncompte selon le chemin de la personne qui ouvrira le fichier svp?
Pour cela, c'est exactement ce que @Wayki vous a dit
Ces formules peuvent être insérée dans le fichier à son ouverture avec vba mais il nous faudrait un fichier pour ça

Bien cordialement, @+
 

tetter88

XLDnaute Nouveau
Bonjour,

Merci pour ces précisions et merci pour votre support.

J'ai voulu mettre un fichier .ZIP sur ce site mais ce dernier est trop volumineux. De ce fait, voici un lien wetransfer : https://we.tl/t-Q0ntIlQUgz

Le répertoire est composé de plusieurs dossiers:
AA- ORDER MANAGEMENT : Il y a dedans le fichier de destination en question qui recentre tous les autres fichiers.

DATABASE: Il contient les codes articles et les descriptions qui sont envoyés à tous les autres fichiers

STOCK/F22: Une extraction mois par mois.

VENTES: Les chiffres de ventes N et N-1.

Merci beaucoup pour votre aide.

Cordialement,
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…