Ouverture d'un fichier depuis un autre
touroul
-
touroul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
touroul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
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 :
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 :
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 !
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:
- Ouverture d'un fichier depuis un autre
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Ouvrir un fichier .dat - Guide
10 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.
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
Bonne soirée à toi.
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
DoEventsen tête de la macro voir si cela résout le problème.
Bonne soirée à toi.
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
je n'ai pas trouvé d'autre solution, merci à vous deux.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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).
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
Ouvrir (B) juste après (A) est une façon (visiblement peu fiable) de contourner le problème.
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
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
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
Il n'y a aucune formule en (A) du type :
Où avais-tu essayé
Moi j'essayerais :
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.
=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.
Bonjour Yg
Si, dans le fichier "A" il y a environ 300 formules de ce type-là.
J'avais essayé
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 !
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 !
Oui Yg, il y en a à peu près 300 dans les formules des cellules :
Ils sont tous du type
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 ..
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 ..
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 ?
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 ?
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 ...
À 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 ...