Ouverture d'un fichier depuis un autre

Fermé
touroul - Modifié par touroul le 21/11/2016 à 20:21
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - 26 nov. 2016 à 20:47
Bonsoir le forum

J'ai besoin d'un peu d'aide si possible ...
Un de mes fichiers (A) effectue des calculs depuis un autre fichier XLSX (B).
Les formules de (A) sont par exemple du type :
=NB.SI('c:\Covoiturage\ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)


J'aurais souhaité qu'à l'ouverture de (A), (B) s'ouvre automatiquement.
Par contre, si (B) est déjà ouvert, ne pas le réouvrir.

J'ai tenté le coup avec ce code :
Private Sub Workbook_Open()
Application.AskToUpdateLinks = False
Application.EnableEvents = False
ThisWorkbook.UpdateLinks = xlUpdateLinksAlways

estouvert = False
For Each fich In Workbooks
If fich.Name = "ListeConducteurs.xlsm" Then estouvert = True
Next
If estouvert = False Then Workbooks.Open ("c:\Covoiturage\ListeConducteurs.xlsm")
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
ThisWorkbook.Activate: Sheets(1).Activate: Range("B4").Select
End Sub

Si (B) est déjà ouvert, no problemo.
Par contre, si (B) n'est pas encore ouvert, Excel m'indique ne pas pouvoir mettre à jour les liaisons de mon classeur ... Si je fais Continuer, tout semble OK.
Comment éviter ce message ?

Merci par avance pour vos explications !


A voir également:

10 réponses

yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
21 nov. 2016 à 21:29
Je me demande à quel moment Excel indique ne pas pouvoir mettre à jour les liaisons du classeur.
Pour découvrir cela, je suggère soit d'ajouter des msgbox ou des debug.print dans le code de Workbook_Open(), soit de mettre un point d’arrêt au début du code de Workbook_Open(), et de l'exécuter pas à pas, pour voir quand le message se produit.
1
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
21 nov. 2016 à 22:10
Bonjour,

Comment éviter ce message ?
Je pense que ton message vient des paramètres de confidentialité mais malgré pas mal de restrictions mises en place, je n'ai pas pu reproduire ton anomalie.
Cela peut aussi être dû à une exécution asynchrone trop rapide. Quand tu mets à jour ta synchronisation des liaisons, tu peux partir sur un thread tandis qu'un autre ouvre le classeur sans avoir l'info de mise à jour, vu la vitesse des machines.
Je tenterai de mettre
DoEvents
en tête de la macro voir si cela résout le problème.

Bonne soirée à toi.
1
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
25 nov. 2016 à 19:40
Salut cher GB, salut ami(e) belge

Je viens de passer quelques heures à chercher la solution à ce problème ...
GB avait raison, c'est bien la vitesse de calcul du PC qui est en cause !
J'ai testé le même fichier sur un core i5 datant de 4 ans, alors que le mien est tout neuf (core i5 "Lynnfield", le dernier) : et bien aucun problème !!!

Le problème c'est qu'Excel recalcule les liaisons directement à l'ouverture : dans le cas d'un processeur puissant, il effectue ces calculs plus rapidement, dès l'ouverture du classeur, avant même l'ouverture du fichier lié.
Avec un PC plus ancien, l'ouverture du fichier lié occupe tous les core dispos, et les calculs passent en second plan.
D'ailleurs, comme le conseillait YG, le code exécuté pas-à-pas ne plante pas.
C'est balot quand-même !

Le DoEvents placé en tête de macro n'a pas d'effet malheureusement, j'ai aussi essayé avec
Application.Wait(Now + TimeValue("0:00:10"))
sans résultat.

je n'ai pas trouvé d'autre solution, merci à vous deux.
1
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
25 nov. 2016 à 21:30
Bonsoir,

Dans "Options" et gestion de la confidentialité, pour éviter le message, il faudrait peut-être enregistrer l'option, même si MS ne le conseille pas (alors qu'il ne sait pas le gérer à la volée !)

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2016 à 12:05
Ne serait-il pas plus simple de désactiver la mise à jour automatique des liens, et de faire cette mise à jour à partir de la macro, après avoir ouvert (B)? (Je suppose qu'on peut programmer cette mise à jour, puisqu'on peut le faire à la main).
1
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 12:26
C'est une idée mais ça perturberait le fonctionnement de tous mes autres programmes qui ne posent pas de problème.
Je préfère avoir à valider cette maudite boîte de dialogue.
J'ai une autre idée, je ressaie lundi.
Merci encore
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2016 à 14:00
Je pense que le fonds du problème, c'est que les liens dans (A) ne contiennent pas le chemin vers le fichier (B), donc ne fonctionnent que si le fichier (B) est préalablement ouvert.
Ouvrir (B) juste après (A) est une façon (visiblement peu fiable) de contourner le problème.
1
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 10:11
Salut GB
Bien vu mais cette option était déjà activée chez moi.
En continuant mes recherches, je me suis demandé si ce message
"Pour l'instant, nous ne parvenons pas à mettre à jour des liaisons de votre classeur. Vous pouvez continuer sans mettre à jour les valeurs ou modifier les liaisons qui sont incorrectes"
... ne serait pas un message provenant de mon fichier "B" et pas du principal("A").
Je dis ça parce que le fichier "B" comprend lui aussi des macros dans Private Sub Workbook open. (réinitialisation des filtres, mises à jour d'autres feuilles, ...).
Y aurait-il un moyen de désactiver les macros du fichier "B" ?
Je m'accroche, je n'aime pas les problèmes non résolus, ils font progresser !

A plus
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2016 à 10:32
Il n'y a aucune formule en (A) du type :
=NB.SI('ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)
?

Où avais-tu essayé
Application.Wait(Now + TimeValue("0:00:10")) 
?
Moi j'essayerais :
If estouvert = False Then 
       Application.Wait(Now + TimeValue("0:00:10"))
       Workbooks.Open ("c:\Covoiturage\ListeConducteurs.xlsm")
       Application.Wait(Now + TimeValue("0:00:10"))
end if

Je me demande si Excel n'est pas perturbé parce qu'il doit ouvrir simultanément deux fois le fichier c:\Covoiturage\ListeConducteurs.xlsm, d'une part pour calculer les liens en (A), d'autre part pour le Workbooks.Open.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
26 nov. 2016 à 11:04
Bonjour,

Y aurait-il un moyen de désactiver les macros du fichier "B" ?
Tu l'a déjà fait :
 Application.EnableEvents = False


C'est plutôt cette phrase qui me titille :
"modifier les liaisons qui sont incorrectes"
As-tu vérifié si c'est le cas ou si ce n'est qu'un message passe partout d'excel ?
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 11:14
Bonjour Yg

Si, dans le fichier "A" il y a environ 300 formules de ce type-là.
J'avais essayé
Application.Wait(Now + TimeValue("0:00:10"))
mais pas au même endroit que toi.
J'ai injecté ton code en début de macro : dans ce cas, le fameux message arrive encore plus tôt, ce qui prouve que les formules de "A" sont bien celles qui s'exécutent en priorité, avant la prise en compte du "If estouvert = False".

@GB :
C'est en effet un message passe-partout, car quand je vérifie les liaisons suite au message ... il n'y a rien !

Je continue les essais.
Merci à tous les 2 pour votre aide !
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
26 nov. 2016 à 11:26
Re
Dans le fichier "A" , dans "Formules" / "Gestionnaire de noms" n'aurait-tu pas des références avec "#REF" ,
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié par yg_be le 26/11/2016 à 11:57
Dans le fichier (A), tu as vraiment des liens vers ListeConducteurs.xlsm et d'autres vers 'c:\Covoiturage\ListeConducteurs.xlsm'?
Si oui, que se passe-t-il si tu n'ouvres pas du tout (B)?
Peut-être faut-il ouvrir (B) avant (A), par exemple à partir de (C).
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 11:55
Oui Yg, il y en a à peu près 300 dans les formules des cellules :
Ils sont tous du type
=NB.SI('ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)


Les liens type 'c:\Covoiturage\ListeConducteurs.xlsm' sont seulement présents dans le Workbook Open, ils ouvrent le fichier distant.
Pour info je viens de désactiver toutes les macros de "B", c'est idem ...
GRRR ..
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2016 à 12:01
Tu écris "quand je vérifie les liaisons suite au message ... il n'y a rien". Tu veux dire "tout semble normal"?
Je suppose, cependant, que les liens n'ont pas été réévalués, et que les valeurs correspondent à celles qui étaient dans (A) avant de l'ouvrir.
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 12:28
C'est bien le cas, aucun message d'erreur sur un autre PC.
Les liens sont les mêmes, le fichier "B" est sur le réseau de l'entreprise, j'ai un VPN à distance
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 11:37
Cher GB
Et non !
J'y ai pensé parce qu'un jour il y a bien longtemps déjà, tu avais "levé ce lièvre" sur un de mes fichiers. Depuis, je ne me fais plus avoir.
Il y a juste "Segment_Régions" que je ne peux pas supprimer dans le fichier "B", je ne sais plus s'il a un intérêt ...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
26 nov. 2016 à 11:46
Re:
Je parlais du classeur A
"Segment_Régions" est généré par le TCD

Il me semble tout de même qu'il doit y avoir quelque chose qui gêne.
As-tu essayé de mettre l'ouverture en commentaire pour voir si le message arrivait tout de même ?
Ton essai avec un autre PC utilisait exactement les mêmes classeurs ?
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 11:59
Oui je viens d'essayer en désactivant toutes les macros de "B", idem.
Sur un autre PC plus lent, c'est parfait aucun message d'erreur lié aux mises à jour.
C'est dingue.
Je reprends ça lundi
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 19:04
Yg, si je comprends bien ton raisonnement, tu penses que les formules de ma feuille A devraient être référencées autrement.
À l'heure actuelle, ces formules sont de type :
=NB.SI('ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)
Je pense que tu me conseilles d'essayer avec :
=NB.SI(c:\Covoiturage\ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)

Je vais essayer et je te dirai.
On va y arriver ...
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 nov. 2016 à 19:15
C'était un peu confus, étant donné que tu avais spécifié dans ta question que tes formules étaient du genre
=NB.SI('c:\Covoiturage\ListeConducteurs.xlsm'!Tableau1[Colonne14];H14)
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
26 nov. 2016 à 20:47
C'est exact, j'ai fait cette erreur en ré-exprimant ma demande.
mais le c:\ n'y était pas.
J'ai fait un essai en local, ça ne change rien au problème, qu'elle que soit la manière d'écrire l'adresse du fichier.
J'essaierai d'autres trucs lundi.
0