Mise à jour automatique des liens

Bonjour le forum,

Dans une feuille de calculs de synthèse, j'ai beaucoup de formules qui font référence à d'autres fichiers dans lesquels j' utilise la fonction AUJOURDHUI(). Malheureusement, si je n'ouvre pas ces fichiers, ils ne se mettent pas à jour de la bonne date. Tant que je ne les ai pas ouvert, il garde la dernière date sauvegardée...

Existe t-il une commande qui mettrait à jour tous les fichiers liés ou même un bout de VBA à l'ouverture du fichier de synthèse ?

Merci de votre aide.

Fabrice,

Bonjour,

Peux-tu nous en dire plus et notamment quel type de formule tu utilises dans ta feuille de synthèse ?

Indique nous également à quoi ressemblent tes fichiers fermés (avec AUJOURDHUI()).

On peut peut-être trouber une autre formule.

A te (re)lire avec suffisamment de précisions et le cas échéant, un petit bout de fichier exemple (anonymisé).

@+

Re- le forum,

Salut thibo,

Le fichier de synthèse que j'utilise effectue quelques RECHERCHEV dans une douzaine de fichiers sources très volumineux (+ de 5 Mo chacun...), utilisés dans la journée par des collègues qui saisissent leur temps d'absence au jour le jour.

Dans la synthèse, j'ai bien bricolé une macro, associée à un bouton, qui ouvre tous les fichiers à la suite, puis les sauvegarde (pour mettre les formules AUJOURDHUI() à jour), mais elle prend 7 minutes...

Ou alors, il faut que je parvienne à alléger mes fichiers sources en modifiant mes centaines de formules (NB.SI) qui occupent trop de mémoire. Ce sont des fichiers qui ont été élaborés avant que je connaisse ce forum et je pense qu'il y a surement moyen de les modifier... Je joins un petit exemple de ce que je souhaite faire :

https://www.excel-pratique.com/~files/doc2/Essai_sommeprod.xls

Mais la question de la mise à jour de la formule AUJOURDHUI() dans les fichiers fermés reste d'actualité.

Merci d'avance.

Fabrice,

Bonjour

Réponse dans le Fichier

Amicalement

Nad

re, salut Nad,

Pour ton problème de fonction AUJOURDHUI, peux-tu nous indiquer comment elle est utilisée dans tes fichiers fermés ?

A te (re)lire

@+

Bonjour le forum,

Merci (encore) Nad pour la formule SOMMEPROD... Je crois que j'ai du mal avec cette fonction car dans mes tableaux, je ne pense pas systématiquement à nommer les zones alors que cela rend la compréhension des formules beaucoup plus simple. Je vais m'efforcer à le faire dorénavant.

thibo, ma fonction AUJOURDHUI() me sert de support pour une formule de calcul matricielle (que m'avait déjà suggérée Nad...) pour trouver un nom en fonction de la date du jour. C'est tout.

Merci à tous les deux pour votre aide.

Amicalement.

Fabrice,

Bonsoir le forum,

Grâce à la formule SOMMEPROD, j'ai réduit les temps d'ouverture de mes fichiers et les tailles (1,6 Mo contre 5,7 Mo auparavant). Mais je n'ai toujours pas trouvé de solution pour mettre à jour la fonction AUJOURDHUI via le VBA sans être obligé d'ouvrir mes classeur un à un.

Quelqu'un a-t-il une idée ?

Merci d'avance.

Fabrice,

Bonjour à tous,

Désolé de relancer le post mais je n'ai toujours pas trouvé comment rafraichir mes fonctions AUJOURDHUI() sans être obligé d'ouvrir les fichiers un à un...

Pensez-vous qu'il existe une autre alternative ?

Merci d'avance pour l'intérêt que vous voudrez bien porter à mon message.

Bonne journée.

Fabrice,

Bonjour,

Peux-tu nous joindre deux fichiers exemples (quelques lignes suffisent) :

- le 1er fichier : celui qui contient la fonction AUJOURDHUI() et qui doit normalement rester fermé

- le 2ème fichier : celui depuis lequel tu fais appel à ce fichier fermé

Il ne s'agit pas de joindre des fichiers complets, mais simplement représentatifs de ton problème avec quelques lignes (ou colonnes) contenant des données non confidentielles.

A te (re)lire

@+

1mai-2017.xlsm (32.35 Ko)
0avril-2017.xlsm (32.77 Ko)

Re- le forum,

Salut thibo et merci d'avance de te pencher sur mon problème.

Voici le bout de fichier qui, en théorie, reste fermé pendant la mise à jour. En fait il y en a 12 à l'identique mais, bien entendu, avec des noms de personnes différents.

https://www.excel-pratique.com/~files/doc2/tNJ0dPlanning_TIT_ASS.xls

Puis, ci dessous, le fichier de synthèse (ramené au strict minimum) dans lequel je souhaiterai pouvoir faire les mises à jour sans ouvrir les 12 feuilles sources.

https://www.excel-pratique.com/~files/doc2/SyntheseCHT.xls

Merci encore pour ton aide.

Fabrice,

re,

J'ai regardé le fichier Planning qui doit resté fermé et qui doit contenir la fonction AUJOURDHUI()

Souci : je n'ai pas vu où était utilisée cette fonction.

Peux-tu nous indiquer où se trouve la formule qui utilise cette fonction AUJOURDHUI() ?

A te (re)lire

@+

Re-,

Pardon thibo, j'ai beaucoup réduit les fichiers et j'ai du faire une fausse manip en copiant les "valeurs"... La fonction AUJOURDHUI() est normalement en AK3 dans la feuille que j'ai jointe (mais dans le fichier complet, elle se situe en BB3 mais je ne pense pas que cela ait une grosse importance).

Merci encore.

Fabrice,

re,

à essayer :

Ta cellule qui contient la fonction AUJOURDHUI se situe dans ton fichier planning.

Fais un essais en la mettant dans ton fichier de synthèse.

et dans tes formules de ton fichier synthèse, au lieu de faire référence à la cellule $AK$3, tu fais référence à la cellule =[SyntheseCHT.xls]Accueil!$A$1

(référence à adapter en fonction de la cellule où tu mettras ta fonction AUJOURDHUI()

Pas fait l'essai, donc je te laisse tenter.

@+

Salut Fabrice69,

Pour avoir le même style de programme qui nécessite plusieurs fichiers annexe sous Excel et ayant beaucoup chercher également,

je pense que ce n'est pas possible de mettre à jour ton AUJOURDHUI sans lancer tous les fichiers.

Par contre ce que tu peux faire c'est créer un bouton qui va lancer directement tous les fichiers dont tu as besoin pour mettre à jour :

qques choses du genre :

Dim ID As Variant
If Cells(64, 3) = 1  Then
    ID = Shell("")
End If

Cela t'évitera de devoir les ouvrir un par un, je sais pas si cela t'aide vraiment

Bonjour le forum,

thibo, ma synthèse va également chercher le résultat d'un RECHERCHEV dans chaque fichier source. Du coup, pour avoir les données du jour, je suis forcé d'aller dans ces fichiers sources pour que la fonction AUJOURDHUI() qui s'y trouve se rafraichisse et me donne la bonne date...

J'aurai pu, effectivement, créer 12 "feuilles sources" + une feuille "synthèse" dans le même fichier mais alors là, j'aurai créé un monstre d'au moins 20 Mo...(chaque fichier source fait entre 1,5 et 1,8 Mo.) D'autre part, un fichier source correspond à un service de mon entreprise et je ne peux pas donner accès aux données de chaque service à tout le monde.

J'ai opté pour une macro qui m'ouvre successivement les 12 fichiers et les ferme dans la foulée. Elle dure environ 1 minute 30 c'est donc jouable... Mais je ne suis pas certain d'avoir optimisé mon application...

Richti, peux-tu m'en dire un peu plus sur cette fonction "Shell" ? Que fait-elle exactement ? (l'aide d'excel est vraiment très pauvre à ce sujet...). Quelle en est la syntaxe ? Me permet-elle d'ouvrir mes 12 fichiers à la suite ?

Un grand merci à tous les deux pour l'intérêt que vous portez à mon souci.

Bon week end.

Fabrice,

Bonjour Fabrice69,

Alors la fonction "Shell" permet de lancer toute forme de fichier à partir d'Excel , par exemple si c'est un fichier .xls que tu veux lancer tu peux utiliser ce type de code :

Dim ID As Variant 
If Cells(64, 3) = 1 Then
   ID = Shell("""C:\Program Files\Microsoft Office\OFFICE11\EXCEL.exe"" ""C:\Feuille de calcul.xls""")
End If

Dans ces lignes de code, tu vas d'abord lancer ton programme Excel puis ton fichier, donc il te suffit de mettre à la suite tous les programme que tu veux lancer et puis ça devrait le faire.

Et par exemple si tu places le code en macro sur un bouton, et bien en cliquant dessus il va faire appel à ce fichier. Cela marche très bien avec d'autres applications suffit juste de changer l'adresse

J'espère que c'est assez clair sinon hésite pas à poser des questions.

Bonne journée.

Bonjour à tous,

Ritchi, merci pour tes explications. J'ai déjà une macro, liée à un bouton, qui m'ouvre chaque fichier un à un pour mettre à jour la fonction AUJOURDHUI(). Cette macro "tourne" pendant environ 1 minute 30.

Penses-tu que ta fonction SHELL soit plus rapide ? Je n'arrive pas à voir quel avantage je peux en tirer.

Peux-tu, encore une fois, éclairer ma lanterne...

Merci d'avance.

Fabrice,

Bonjour,

pour ma part, j'évite d'utiliser Shell, lorsqu'il s'agit d'ouvrir un fichier Excel....

Cela ouvre une deuxième session d'excel, alors que l'on a déjà une d'ouverte....

Et les mises à jour ne sont pas effectives, les deux fichiers étant dans deux sessions différentes.

De plus, pour peu que tu aies une ou des macros personnelles dans le perso.xls, tu auras un message d'alerte, te prévenant que ton perso.xls est verrouillé pour modification.. (un DisplayAlerts à False ne suffit pas pour éviter ce message)

Un Workbooks.Open est suffisant...

Maintenant, Fabrice, si tu pouvais joindre ton code de mise à jour, on pourrait peut-être voir s'il peut être optimisé....

Bonne journée

Bonjour,

En fait cousinhub tu dis qu'en utilisant un "Workbooks.Open" cela ouvrirai un fichier excel tout en se mettant à jour contrairement à "Shell" ?

Dans ce cas la Fabrice, il vaudrait mieux utiliser la méthode de cousinhub.

Re-,

@ Ritchi

Oui, effectivement, la mise à jour n'est pas automatique entre 2 sessions différentes.

De plus, et j'avais oublié de le signaler, mais ta deuxième session, que tu ouvres avec Shell, reste ouverte, même si tu fermes le fichier et la deuxième session (utilise ton code, ouvre un fichier comme tu l'as dit avec Shell, ferme cette deuxième session et Ctrl + Alt + Suppr)

Dans le gestionnaire de taches, tu as toujours les 2 sessions d'effectives....

Il ne faut pas oublier de fermer cette session par Set ID = Nothing dans la procédure....

Bref, à manier avec précaution, si tu ne veux pas que ton PC ressemble rapidement à un PC des années 90, avec une utilisation mémoire pharaonique...

Rechercher des sujets similaires à "mise jour automatique liens"