[Résolu] [Calc] Rafraîchissement des liens à distance
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
[Résolu] [Calc] Rafraîchissement des liens à distance
Bonjour à tous,
Est-il possible d'actualiser (CTRL + MAJ + F9) à l'aide d'une macro, les liens d'un classeur lié à celui qui exécute la macro ?
@ Bientôt
Est-il possible d'actualiser (CTRL + MAJ + F9) à l'aide d'une macro, les liens d'un classeur lié à celui qui exécute la macro ?
@ Bientôt
Dernière modification par TheHache le 04 mars 2017 16:18, modifié 1 fois.
LibO 25.8.4.2 - Windows 11 Famille
-
Jeff
- Grand Maître de l'OOffice

- Messages : 10005
- Inscription : 18 sept. 2006 09:40
- Localisation : France
Re: [Calc] Rafraîchissement des liens à distance
Bonjour,
Je ne sais pas si cela t'aidera, mais l'équivalent de Ctrl + Maj + F9 est CalculateHard
(l'équivalent de F9 est CalculateAll)
Pour une mise à jour de lien, l’enregistreur donne le code suivant:
Où EditLinks semble être la clef
A +
Je ne sais pas si cela t'aidera, mais l'équivalent de Ctrl + Maj + F9 est CalculateHard
(l'équivalent de F9 est CalculateAll)
Pour une mise à jour de lien, l’enregistreur donne le code suivant:
Code : Tout sélectionner
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:EditLinks", "", 0, Array())
end subA +
À lire avant tout !
Pour télécharger Apache OpenOffice
AOO 4.1.16 / Debian 13 "Trixie" / Xfce
AOO 4.1.15 / Debian 11 "Bullseye" / Cinnamon
Pour télécharger Apache OpenOffice
AOO 4.1.16 / Debian 13 "Trixie" / Xfce
AOO 4.1.15 / Debian 11 "Bullseye" / Cinnamon
-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
Re: [Calc] Rafraîchissement des liens à distance
Merci Jeff
J'ai omis de préciser qu'il ne s'agissait pas de liens DDE mais de simples formules de la forme : 'file:///C:/MonClasseur.ods'#$MaFeuille.$E$2
Il me semble, d'après ce que j'ai compris, que EditLinks est pour les liens DDE.
@+
J'ai omis de préciser qu'il ne s'agissait pas de liens DDE mais de simples formules de la forme : 'file:///C:/MonClasseur.ods'#$MaFeuille.$E$2
Il me semble, d'après ce que j'ai compris, que EditLinks est pour les liens DDE.
@+
LibO 25.8.4.2 - Windows 11 Famille
-
zeguedon
- ManitOOu

- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] Rafraîchissement des liens à distance
Bonjour,
(Non testé) :
A+
(Non testé) :
Code : Tout sélectionner
Sub Main
lesLiens = Thiscomponent.SheetLinks' AreaLinks...DDELinks
for i = 0 to lesLiens.count -1
unLien = lesLiens(i)
unLien.refresh
next
End Sub-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
Re: [Calc] Rafraîchissement des liens à distance
Bonjour Zeguedon,
Merci pour ta collaboration.
Au final, exécuter une macro dans classeur_1.ods qui rafraîchi les liens de classeur_2.ods.
@+
Merci pour ta collaboration.
Le ThisComponent de ton code correspond au classeur en cours hors je désirerai activer les liens d'un classeur depuis un autre.zeguedon a écrit :Code : Tout sélectionner
lesLiens=Thiscomponent.SheetLinks' AreaLinks...DDELinks
Au final, exécuter une macro dans classeur_1.ods qui rafraîchi les liens de classeur_2.ods.
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 25.8.4.2 - Windows 11 Famille
-
Dude
- IdOOle de la suite

- Messages : 26177
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Rafraîchissement des liens à distance
Salut,
Ouvre le classeur_2.ods en mode caché :
Agis ensuite sur lui de la même manière.
Ouvre le classeur_2.ods en mode caché :
Code : Tout sélectionner
Dim Arg(0) As New com.sun.star.beans.PropertyValue
Arg(0).Name = "Hidden"
Arg(0).Value = True
sDoc = ConvertToURL("chemin/vers/classeur_2.ods")
oDoc = StarDesktop.loadComponentFromURL(sDoc, "_default", 0, Arg() )-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
Re: [Calc] Rafraîchissement des liens à distance
Salut Dude,
Ton code ouvre, en caché, mon classeur_2.ods depuis classeur_1.ods. Cependant ce classeur_2.ods ne doit pas être caché pour mon usage. Donc Hidden = False, ou pas d'argument.
@+
Ton code ouvre, en caché, mon classeur_2.ods depuis classeur_1.ods. Cependant ce classeur_2.ods ne doit pas être caché pour mon usage. Donc Hidden = False, ou pas d'argument.
Que veux tu dire par là ?Dude a écrit :Agis ensuite sur lui de la même manière.
@+
LibO 25.8.4.2 - Windows 11 Famille
-
zeguedon
- ManitOOu

- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] Rafraîchissement des liens à distance
Bonjour TheHache
Désolé pour ma réponse tardive (programme chargé en ce moment).
Je viens de faire un test mais cela ne fonctionne pas.
Thiscomponent.SheetLinks ne concerne que les feuilles insérées par le menu Feuille>Insertion à partir d'un fichier (sous LO).
AreaLinks et DDELinks concernent les plages nommées et les liens DDE. Je n'ai pas trouvé le moyen d'obtenir l'équivalent de : menu Édition>Liens>Actualiser même le dispatcher s’arrête à l'ouverture de la fenêtre d'actualisation.
De mon point de vue, il ne faut pas procéder comme tu le souhaites. Il est préférable d'utiliser l'option Lien vers des données externes (toujours dans le menu Feuille sous LO) à la place de :='file:///C:/MonClasseur.ods'#$MaFeuille.$E$2. Cela implique que les cellules à lier soient nommées. Ensuite Insertion>Liens vers des données externes.
Là tu as deux options : soit l'actualisation est automatique : soit une actualisation par macro à l'image du code plus haut.
Dans tous les cas, pour que l'actualisation fonctionne, il faut que les modifications apportées au classer1 soient systématiquement enregistrées avant de tenter l'actualisation du classeur2.
Je te laisse tester à partir de ces quelques informations.
A dans 24 heures.
Désolé pour ma réponse tardive (programme chargé en ce moment).
Dude veut dire que lorsque que le classeur2 (oDoc) est ouvert par son code, tu appliques le code que je t'ai donné plus haut à oDoc au lieu de Thiscomponent.TheHache a écrit :Que veux tu dire par là ?Dude a écrit:
Agis ensuite sur lui de la même manière.
Je viens de faire un test mais cela ne fonctionne pas.
Thiscomponent.SheetLinks ne concerne que les feuilles insérées par le menu Feuille>Insertion à partir d'un fichier (sous LO).
AreaLinks et DDELinks concernent les plages nommées et les liens DDE. Je n'ai pas trouvé le moyen d'obtenir l'équivalent de : menu Édition>Liens>Actualiser même le dispatcher s’arrête à l'ouverture de la fenêtre d'actualisation.
De mon point de vue, il ne faut pas procéder comme tu le souhaites. Il est préférable d'utiliser l'option Lien vers des données externes (toujours dans le menu Feuille sous LO) à la place de :='file:///C:/MonClasseur.ods'#$MaFeuille.$E$2. Cela implique que les cellules à lier soient nommées. Ensuite Insertion>Liens vers des données externes.
Là tu as deux options : soit l'actualisation est automatique : soit une actualisation par macro à l'image du code plus haut.
Dans tous les cas, pour que l'actualisation fonctionne, il faut que les modifications apportées au classer1 soient systématiquement enregistrées avant de tenter l'actualisation du classeur2.
Je te laisse tester à partir de ces quelques informations.
A dans 24 heures.
| Ajout : Un exemple de lien avec actualisation automatique |
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
Hubert Lambert
- SuppOOrter

- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Rafraîchissement des liens à distance
Dès qu'une référence au second document est disponible, un simple calculateAll() doit suffire en principe à rafraîchir les liens externes.
En partant de l'exemple de Dude, cela donnerait :
Cordialement.
En partant de l'exemple de Dude, cela donnerait :
Code : Tout sélectionner
[...]
oDoc = StarDesktop.loadComponentFromURL(sDoc, "_default", 0, Arg() )
oDoc.calculateAll()AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
Re: [Calc] Rafraîchissement des liens à distance
Bonjour à tous,
Parfait Hubert Lambert !
effectivement rafraîchi les liens, je l'utilisais dans le classeur 2 en attendant une solution alternative.
Couplé avec l'idée de Dude, le rafraîchissement des liens du classeur2 depuis le classeur1 fonctionne. Cependant, ouvre le classeur 2 et l'active. De ce fait, je ne peux plus continuer à saisir dans le classeur1 sans l'avoir activé au préalable. C'est gênant.
N'y aurait-il pas une solution pour laisser le classeur1 actif à l'ouverture du classeur2 ?
@ bientôt
Parfait Hubert Lambert !
Code : Tout sélectionner
calculateAll()Couplé avec l'idée de Dude, le rafraîchissement des liens du classeur2 depuis le classeur1 fonctionne. Cependant,
Code : Tout sélectionner
StarDesktop.loadComponentFromURL(sDoc, "_default", 0, Arg() )N'y aurait-il pas une solution pour laisser le classeur1 actif à l'ouverture du classeur2 ?
@ bientôt
LibO 25.8.4.2 - Windows 11 Famille
-
Piaf
- GourOOu

- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Calc] Rafraîchissement des liens à distance
Bonjour
en dernière ligne de la macro.
A+
Même avec AOO ?TheHache a écrit :effectivement rafraîchi les liens,
TesteTheHache a écrit :ouvre le classeur 2 et l'active. De ce fait, je ne peux plus continuer à saisir dans le classeur1 sans l'avoir activé au préalable. C'est gênant.
Code : Tout sélectionner
thisComponent.CurrentController.Frame.ContainerWindow.toFrontA+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
Hubert Lambert
- SuppOOrter

- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Rafraîchissement des liens à distance
En effet, ça ne marche qu'avec LibO !Piaf a écrit :Même avec AOO ?
Pour obtenir une référence à un document ouvert sans l'activer, tu peux t'inspirer du code suivant, où "doc2url" est l'url du document cherché :TheHache a écrit :ouvre le classeur 2 et l'active. De ce fait, je ne peux plus continuer à saisir dans le classeur1 sans l'avoir activé au préalable. C'est gênant.
Code : Tout sélectionner
components = stardesktop.Components.createEnumeration()
do while components.hasMoreElements()
component = components.NextElement()
if component.URL = doc2url then
doc2 = component
exit do
end if
loop
| Ajout : Aux dernières nouvelles (forum anglophone), il n'est pas possible avec AOO d'actualiser ces liens par macro. |
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
Piaf
- GourOOu

- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Calc] Rafraîchissement des liens à distance
Re
La seule solution trouvée,
La demande de confirmation d'actualisation des liens est systématique.
A+
La seule solution trouvée,
Code : Tout sélectionner
Sub Main
Dim sDoc as String, oDoc as Object
Dim oEnum as Object, oComp as Object
Dim arg(0) As New com.sun.star.beans.PropertyValue
Dim oFrame as Object, oDispatch as Object
thisComponent.store
oEnum = StarDesktop.Components.createEnumeration
Do While oEnum.hasMoreElements()
oComp = oEnum.nextElement()
If oComp.Title = "Classeur_2.ods" Then
oComp.Store
oComp.Close(True)
End If
Loop
arg(0).Name = "UpdateDocMode"
arg(0).Value = 3
sDoc = ConvertToURL("/home/tdm/Téléchargements/Classeur_2.ods")
oDoc = StarDesktop.loadComponentFromURL(sDoc, "_default", 0, arg() )
thisComponent.CurrentController.Frame.ContainerWindow.toFront
End SubA+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
TheHache
- PassiOOnné

- Messages : 653
- Inscription : 02 déc. 2009 09:43
Re: [Calc] Rafraîchissement des liens à distance
Bonjour
Merci à vous tous, le rafraîchissement automatique des liens à distance fonctionne parfaitement avec les morceaux de code de chacun.
Voici ce qui fonctionne :
Cette macro sur l’événement de la feuille --> contenu modifié et c'est parfait pour actualiser un autre classeur dés la saisie validée dans le classeur pincipal.
Encore bravo et merci à Jeff, Zeguedon, Dude, Hubert Lambert et Piaf.
A bientôt
Merci à vous tous, le rafraîchissement automatique des liens à distance fonctionne parfaitement avec les morceaux de code de chacun.
Voici ce qui fonctionne :
Code : Tout sélectionner
Sub Rafraichir_Liens
Dim sDoc As String
Dim oDoc As Object
Dim Arg(0) As New com.sun.star.beans.PropertyValue
sDoc = ConvertToURL("C:\monClasseur2.ods")
oDoc = StarDesktop.loadComponentFromURL(sDoc, "_default", 0, Arg())
oDoc.calculateAll()
ThisComponent.CurrentController.Frame.ContainerWindow.toFront
End Sub
Encore bravo et merci à Jeff, Zeguedon, Dude, Hubert Lambert et Piaf.
A bientôt
LibO 25.8.4.2 - Windows 11 Famille