Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

2 questions sur les liaisons + 1 question sur les macros

7 réponses
Avatar
Julien
Bonjour à tous,


1ère Question:
soit A le fichier excel source,
soit B le fichier excel destination, B ayant des cellules liées à des
cellules de A
Si je bouge les cellules de B et que les références des cellules de A
auxquelles il fait appel sont "relatives", alors les références de A dans B
s'adaptent automatiquement. Ca je sais.
Mais si, je déplace les cellules du fichier source A auxquelles B fait
appel, B n'adaptent pas ces références dans son fichier, qu'elles soient
absolues ou relatives, sauf si B est ouvert quand je modifie A. Cela oblige à
ouvrir tous les fichiers faisant référence à A quand ce dernier est modifié
pour que les références soient adaptées sur chacun des fichiers liés.
Y a t'il un moyen pour que les références de A dans B soit adapatées à
l'ouverture de B, alors que ce dernier n'était pas ouvert pendant les
déplacements des cellules dans A?

2ème Question:
Toujours avec A et B, quand j'ouvre B, Excel me propose de mettre à jour les
liaisons.
- Est il possible d'automatiser la réponse (par exemple "oui") à l'ouverture
du fichier, de sorte que si j'ai plusieurs fichiers avec des liaisons à
mettre à jour, je n'ai plus à répondre à cette question?
- Si je réponds "non", sera t'il possible de mettre à jour les liaisons par
la suite (le fichier étant ouvert ou à sa prochaine ouverture), ou les
liaisons sont elles perdues pour toujours ?

3ème Question (sur les macros):
Toujours à 'louverture d'un fichier, Excel me demande si je veux activer les
macros, si je dis non, l'activation des macros pourra t'elle se faire plus
tard, fichier déjà ouvert ou lors d'une nouvlle ouverture du fichier?

Merci d'avance pour vos lumières et n'hésitez pas à me demander des
précisions si nécessaire.
Julien

7 réponses

Avatar
MichDenis
Question I - Tu as exploré les possibilités et la magie ce sera pour une future version ?

Question II -


Les 3 options suivantes, c'est ce que l'on retrouve dans la fenêtre
liaisons ( barre des menus / édition / liaisons / bouton de commande "Invite de démarrage".

Elles sont présentes sauf erreur depuis la version 2002 d'excel.

nous amène à la fenêtre où l'on peut choisir l'une des options suivantes

1) ActiveWorkbook.UpdateLinks = xlUpdateLinksUserSetting
Laisser les utilisateurs choisir d'afficher ou non l'alerte

2) ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Ne pas afficher l'alerte et ne pas mettre à jour...

3) ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
Ne pas afficher l'alerte et mettre à jour

Ces mises à jour des données, selon l'option que l'on a choisie se font à l'ouverture
du fichier seulement. Cependant, il est possible de forcer ces mises à jour par
code à n'importe quel moment.

Pour mettre à jour les données avec un fichier source bien identifié, on peut
utiliser ceci :
'------------------------
With ThisWorkbook
.UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
End With
'------------------------

Pour mettre à jours tous les liens du classeur
'-------------------------
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With
' -- -- ------ -- ------ -- -----
En dernier lieu, Excel fait une différence entre les types de liens

A) xlLinkTypeOLELinks : Représente par exemple, le copier-coller
avec liaison d'un texte de l'application Word.

B) XlLinkType : Représente les liens que l'on retrouve au niveau
des formules dans les cellules, Plage nommée, et
séries d'un graphe!

Pour mettre à jour un lien Ole, on utilise les mêmes procédures, mais
avec cette constante xlLinkTypeOLELinks au lieu de xlExcelLinks

enfin, pour ceux qui possèdent une version un peu plus âgée (2000 et - ),
ils ne peuvent compter que sur ce qui suit au sujet des mises à jour à
l'ouverture du classeur :
Application.AskToUpdateLinks = True
impose à Excel de demander à l'utilisateur,
à chaque ouverture d'un fichier possédant des liaisons, s'il
souhaite mettre à jour ces liaisons.
(L'option peut être modifié dans l'interface de la feuille
de calcul : barre des menus / outils / options / onglet Modificiation
décoché "confirmation de la mise à jour automatique des liens"
pour ne plus avoir le message à l'ouverture)

Application.AskToUpdateLinks = False
Excel va mettre à jour automatiquement les liaisons.

Et pour finir, qu'est-ce qui se passe si dans la même procédure,
on utilise ceci qui par définition devrait être contradictoire :
'----------------------------
With ThisWorkbook
.UpdateLinks = xlUpdateLinksNever
End With
Application.AskToUpdateLinks = True
' -- -- -- ------ ------ ------ ----
ET bien, Excel ne demande rien à l'ouverture !
xlUpdateLinksNever a gagné.

Ce qui précède est valide pour les ouvertures de classeurs qui se ne font pas par macro.
(double-clic dans l'explorateur Windows, Menu fichier/open/...

Par macro, il y a dans la méthode "Open" qui accepte un paramètre que l'on peut définir :
Workbooks.Open Filename:=x, UpdateLinks:=True 'or fausse

Ce paramètre a préséance lorsqu'il est défini sur tous les autres paramètres dont il a été
question dans ce texte.





"Julien" a écrit dans le message de news:

Bonjour à tous,


1ère Question:
soit A le fichier excel source,
soit B le fichier excel destination, B ayant des cellules liées à des
cellules de A
Si je bouge les cellules de B et que les références des cellules de A
auxquelles il fait appel sont "relatives", alors les références de A dans B
s'adaptent automatiquement. Ca je sais.
Mais si, je déplace les cellules du fichier source A auxquelles B fait
appel, B n'adaptent pas ces références dans son fichier, qu'elles soient
absolues ou relatives, sauf si B est ouvert quand je modifie A. Cela oblige à
ouvrir tous les fichiers faisant référence à A quand ce dernier est modifié
pour que les références soient adaptées sur chacun des fichiers liés.
Y a t'il un moyen pour que les références de A dans B soit adapatées à
l'ouverture de B, alors que ce dernier n'était pas ouvert pendant les
déplacements des cellules dans A?

2ème Question:
Toujours avec A et B, quand j'ouvre B, Excel me propose de mettre à jour les
liaisons.
- Est il possible d'automatiser la réponse (par exemple "oui") à l'ouverture
du fichier, de sorte que si j'ai plusieurs fichiers avec des liaisons à
mettre à jour, je n'ai plus à répondre à cette question?
- Si je réponds "non", sera t'il possible de mettre à jour les liaisons par
la suite (le fichier étant ouvert ou à sa prochaine ouverture), ou les
liaisons sont elles perdues pour toujours ?


Question III

| Toujours à 'louverture d'un fichier, Excel me demande si je veux activer les
| macros, si je dis non, l'activation des macros pourra t'elle se faire plus
| tard, fichier déjà ouvert ou lors d'une nouvlle ouverture du fichier?

Si tu réponds non à la question, pour activer tes macros, tu devras
fermer ton fichier et le ré-ouvrir.
Avatar
Julien
Merci pour ta réponse complète MichDenis.

1) Pour résumer, si j'ai bien compris,
avec Excel 2002 et + récent, on utilise les menus Editions/Liaisons et on
choisit ce qu'on veut.
Avec un version antérieure d'Excel, c'est le menu Outils/option/modification
dans lequel on décoche la demande de confirmation et alors la mise à jour SE
FAIT BIEN et en AUTOMATIQUE.

2) Par ailleurs, tu parles de codes pour forcer une mise à jour, où doit il
être rentré? Est-ce une macro que l'on doit créer et à laquelle on fait appel
avec une touche ou un bouton créé?

3) Qu'est ce que la méthode "Open" et comment l'utilise-t'on?
J'ai compris qu'il faut insérer la commande "Workbooks.Open Filename:=x,
UpdateLinks:=True' (or fausse)" dans le code de la macro pour commander
l'ouverture d'un fichier et sa mise à jour automatique. C'est bien cela?

Merci encore.

Julien


Question I - Tu as exploré les possibilités et la magie ce sera pour une future version ?

Question II -


Les 3 options suivantes, c'est ce que l'on retrouve dans la fenêtre
liaisons ( barre des menus / édition / liaisons / bouton de commande "Invite de démarrage".

Elles sont présentes sauf erreur depuis la version 2002 d'excel.

nous amène à la fenêtre où l'on peut choisir l'une des options suivantes

1) ActiveWorkbook.UpdateLinks = xlUpdateLinksUserSetting
Laisser les utilisateurs choisir d'afficher ou non l'alerte

2) ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Ne pas afficher l'alerte et ne pas mettre à jour...

3) ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
Ne pas afficher l'alerte et mettre à jour

Ces mises à jour des données, selon l'option que l'on a choisie se font à l'ouverture
du fichier seulement. Cependant, il est possible de forcer ces mises à jour par
code à n'importe quel moment.

Pour mettre à jour les données avec un fichier source bien identifié, on peut
utiliser ceci :
'------------------------
With ThisWorkbook
..UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
End With
'------------------------

Pour mettre à jours tous les liens du classeur
'-------------------------
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
..UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With
' -- -- ------ -- ------ -- -----
En dernier lieu, Excel fait une différence entre les types de liens

A) xlLinkTypeOLELinks : Représente par exemple, le copier-coller
avec liaison d'un texte de l'application Word.

B) XlLinkType : Représente les liens que l'on retrouve au niveau
des formules dans les cellules, Plage nommée, et
séries d'un graphe!

Pour mettre à jour un lien Ole, on utilise les mêmes procédures, mais
avec cette constante xlLinkTypeOLELinks au lieu de xlExcelLinks

enfin, pour ceux qui possèdent une version un peu plus âgée (2000 et - ),
ils ne peuvent compter que sur ce qui suit au sujet des mises à jour à
l'ouverture du classeur :
Application.AskToUpdateLinks = True
impose à Excel de demander à l'utilisateur,
à chaque ouverture d'un fichier possédant des liaisons, s'il
souhaite mettre à jour ces liaisons.
(L'option peut être modifié dans l'interface de la feuille
de calcul : barre des menus / outils / options / onglet Modificiation
décoché "confirmation de la mise à jour automatique des liens"
pour ne plus avoir le message à l'ouverture)

Application.AskToUpdateLinks = False
Excel va mettre à jour automatiquement les liaisons.

Et pour finir, qu'est-ce qui se passe si dans la même procédure,
on utilise ceci qui par définition devrait être contradictoire :
'----------------------------
With ThisWorkbook
..UpdateLinks = xlUpdateLinksNever
End With
Application.AskToUpdateLinks = True
' -- -- -- ------ ------ ------ ----
ET bien, Excel ne demande rien à l'ouverture !
xlUpdateLinksNever a gagné.

Ce qui précède est valide pour les ouvertures de classeurs qui se ne font pas par macro.
(double-clic dans l'explorateur Windows, Menu fichier/open/...

Par macro, il y a dans la méthode "Open" qui accepte un paramètre que l'on peut définir :
Workbooks.Open Filename:=x, UpdateLinks:=True 'or fausse

Ce paramètre a préséance lorsqu'il est défini sur tous les autres paramètres dont il a été
question dans ce texte.





"Julien" a écrit dans le message de news:

Bonjour à tous,


1ère Question:
soit A le fichier excel source,
soit B le fichier excel destination, B ayant des cellules liées à des
cellules de A
Si je bouge les cellules de B et que les références des cellules de A
auxquelles il fait appel sont "relatives", alors les références de A dans B
s'adaptent automatiquement. Ca je sais.
Mais si, je déplace les cellules du fichier source A auxquelles B fait
appel, B n'adaptent pas ces références dans son fichier, qu'elles soient
absolues ou relatives, sauf si B est ouvert quand je modifie A. Cela oblige à
ouvrir tous les fichiers faisant référence à A quand ce dernier est modifié
pour que les références soient adaptées sur chacun des fichiers liés.
Y a t'il un moyen pour que les références de A dans B soit adapatées à
l'ouverture de B, alors que ce dernier n'était pas ouvert pendant les
déplacements des cellules dans A?

2ème Question:
Toujours avec A et B, quand j'ouvre B, Excel me propose de mettre à jour les
liaisons.
- Est il possible d'automatiser la réponse (par exemple "oui") à l'ouverture
du fichier, de sorte que si j'ai plusieurs fichiers avec des liaisons à
mettre à jour, je n'ai plus à répondre à cette question?
- Si je réponds "non", sera t'il possible de mettre à jour les liaisons par
la suite (le fichier étant ouvert ou à sa prochaine ouverture), ou les
liaisons sont elles perdues pour toujours ?


Question III

| Toujours à 'louverture d'un fichier, Excel me demande si je veux activer les
| macros, si je dis non, l'activation des macros pourra t'elle se faire plus
| tard, fichier déjà ouvert ou lors d'une nouvlle ouverture du fichier?

Si tu réponds non à la question, pour activer tes macros, tu devras
fermer ton fichier et le ré-ouvrir.





Avatar
Garette
Bonjour,

Pour la question 1, il y a une solution en nommant les cellules ou zones
dans la fichier source (A).
Formule dans B.xls "=A.xls!toto" meme si on deplace la zone nommée toto dans
le fichier A.xls, B.xls ira chercher les données au bon endroit sans ouvrir
A.xls.
Avatar
Julien
Merci Garette,

Excellente idée !! mais ATTENTION car :
Par contre, j'ai remarqué une chose IMPORTANTE en navigant dans l'aide
d'Excel, c'est que le fait de renommer un champ ou une cellule de format
numérique, cela transforme son format en format texte et du coup on risque
d'avoir des surprises pour les calculs derrière.


Bonjour,

Pour la question 1, il y a une solution en nommant les cellules ou zones
dans la fichier source (A).
Formule dans B.xls "=A.xls!toto" meme si on deplace la zone nommée toto dans
le fichier A.xls, B.xls ira chercher les données au bon endroit sans ouvrir
A.xls.






Avatar
MichDenis
| avec Excel 2002 et + récent, on utilise les menus Editions/Liaisons et on
| choisit ce qu'on veut.
*** Tu as le choix de ton mode d'intervention

| Avec un version antérieure d'Excel, c'est le menu Outils/option/modification
| dans lequel on décoche la demande de confirmation et alors la mise à jour SE
| FAIT BIEN et en AUTOMATIQUE.
***C'est exact

| 2) Par ailleurs, tu parles de codes pour forcer une mise à jour, où doit il
| être rentré? Est-ce une macro que l'on doit créer et à laquelle on fait appel
| avec une touche ou un bouton créé?
*** Tu inscris le code dans un module standard...évidemment tu peux affecter
un bouton à cette macro si tu le désires.


| 3) Qu'est ce que la méthode "Open" et comment l'utilise-t'on?
| J'ai compris qu'il faut insérer la commande "Workbooks.Open Filename:=x,
| UpdateLinks:=True' (or fausse)" dans le code de la macro pour commander
| l'ouverture d'un fichier et sa mise à jour automatique. C'est bien cela?

Dans une macro, quand tu veux ouvrir un classeur, tu dois utiliser normalement
cette ligne de code : Workbooks.Open FileName:="C:MonClasseur.xls"
Si tu places ton curseur de la souris sur le mot "Open" dans la ligne de code
et que tu appelles la touche F1, l'aide va t'aider à comprendre l'ensemble des
paramètres que l'on peut utiliser avec cette méthode .
ce paramètre est l'un deux : UpdateLinks:=True
Avatar
Julien
Finalement, ce n'est pas si grave, je m'explique:
Dans un classeur A, soit C3 une cellule au format "nombre" que l'on renomme
par un nom (ex. C3 en "ccc") fait que dans le classeur B destination qui fait
appel à "ccc", la cellule cible passe au format standard.
Ce qui permet de faire des calculs à partir de là.
En plus, on peut toujours mettre le format "nombre" à la cellule cible de B.


Merci Garette,

Excellente idée !! mais ATTENTION car :
Par contre, j'ai remarqué une chose IMPORTANTE en navigant dans l'aide
d'Excel, c'est que le fait de renommer un champ ou une cellule de format
numérique, cela transforme son format en format texte et du coup on risque
d'avoir des surprises pour les calculs derrière.


Bonjour,

Pour la question 1, il y a une solution en nommant les cellules ou zones
dans la fichier source (A).
Formule dans B.xls "=A.xls!toto" meme si on deplace la zone nommée toto dans
le fichier A.xls, B.xls ira chercher les données au bon endroit sans ouvrir
A.xls.








Avatar
Garette
Bonjour,

Effectivement, au moment du collage avec liaison, le format de la cellule
destination est au format standard.
Mais comme tu le dis, il suffit de la formater. Apres ça na bouge plus.
Il est possible de faire un Copier/Collage Special "Formats" pour récupérer
les formats uns fois les liaisons établies.