Bonsoir,

J'ai essayé le code corrigé, ça fonctionne directement lorsque j'exécute la
macro mais par contre une nouvelle mise à jour de la cellule d'origine
oblige à une réexécution de la macro pour que la cellule liée soit mise à
jour. Dans le cas contraire même un enregistrement, fermeture et réouverture
ne met pas à jour la cellule liée, il faut donc même dans ce cas réexécuter
la macro. Cela me semble cependant normal, j'ai du mal à imaginer comment
cette macro pourrait être toujours active sauf à tourner en boucle et donc
même si je n'y connais pas grand chose cela me parraît logique qu'il ne soit
pas possible de faire cette mise à jour automatiquement comme c'est le cas
au sein d'une même feuille de calcul lorsque que l'on valide une nouvelle
donnée par la touche entrée par exemple.

La résolution de mon problème a tout de même grandement progressé.

Merci beaucoup.

Serge.

Le 28 avril 2008 22:31, Francois Gatto <[EMAIL PROTECTED]> a écrit :

> Bonsoir,
>
> Serge DAUPHINOT a écrit :
>
> > Rebonjour,
> >
> > Toutes mes excuses je ne pensais pas que dans ce cas l'environnement
> > d'exécution avait une importance.
> >
> Tu n'as pas à t'excuser.
> Chaque environnement est spécifique, cependant nul ne peut en mesurer
> l'absolue portée.
>
>  Je suis sous Windows XP Pro SP2 et OOo 2.3.0.
> >
> Bon c'est pas trop grave ;-)
>
>  J'espère que l'on s'est bien compris quant au problème de dynamique.
> >
> Je crois que oui.
>
>  Ca marche à chaque fois que je relance la macro mais pour que l'affichage
> > soit
> > mis à jour, je dois soit éditer l'objet, soit enregistrer le fichier, le
> > fermer et le rouvrir. Si la valeur de la cellule d'origine est modifiée
> > il
> > faut que je relance la macro afin que la cellule "liée" soit de nouveau
> > mise
> > à jour, d'ailleurs je n'imagine pas comment il pourrait en être
> > autrement ou
> > alors en affectant la macro à un évènement mais je n'en ai pas trouver
> > un
> > qui semble convenir.
> >
> Ca me semble donc être un problème de rafraichissement.
>
>  C'est à ce niveau que je ne comprends pas ce que tu
> > veux dire lorsque tu écrits que sous Linux tu n'as pas ce souci.
> >
> Cela signifie que hormis quelques petits défauts d'affichage (parfois,
> mais c'est récurrent dans OOo selon les configs) la mise à jour des données
> est dynamique.
> Et finalement un forçage de l'actualisation des données m'apparait
> bénéfique.
>
>  Sans macro, il ne semble pas y avoir de solution même en adoptant une
> > syntaxe équivalente à celle permettant de le faire entre 2 tableaux ni
> > même
> > en utilisant la même syntaxe que celle faisant référence à une cellule
> > présente dans un autre fichier calc depuis une feuille de calcul
> > normale.
> >
> >  Je partage cette vision.
> Toutefois, à un problème il y a souvent plus d'une solution et en l'espèce
> ton cahier des charges devrait permettre d'opter pour celle qui présentera
> le meilleur compromis entre ergonomie/fonctionnalité/compétence.
>
> En l'absence d'une définition plus précise des besoins (sans doute pas le
> lieu pour cela) les propositions qui pourront t'être faites ne le seront
> qu'à titre d'idée ou de principe.
>
>  Merci pour ton aide.
> >
> > Serge.
> >
> >  Voici alors une solution de mise à jour (actualisation) des données "in
> live" :
>
> sub RecopieC1Objet1DsA1Objet2
>  dim oDoc as object
>  dim oFirstOLE as object
>  dim oFirstSheet as object
>  dim oFirstCell as object
>  dim oSecondOLE as object
>  dim oSecondSheet as object
>  dim oSecondCell as object
>  dim oResultCell as object
>  dim oFrame as object
>  dim aDsp
>  dim aProps()
>
>  oDoc = thisComponent
>  ' frame concernée par l'actualisation
>  oFrame = oDoc.CurrentController.Frame
>
>  ' accès premier objet
>  oFirstOLE = oDoc.EmbeddedObjects.getByName( "Objet1" )
>  oFirstSheet = oFirstOLE.Model.Sheets.getByName( "Feuille1" )
>  oFirstCell = oFirstSheet.getCellRangeByName( "E6" )
>
>  ' accès second objet
>  oSecondOLE = oDoc.EmbeddedObjects.getByName( "Objet2" )
>  oSecondSheet = oSecondOLE.Model.Sheets.getByName( "Feuille1" )
>  oSecondCell = oSecondSheet.getCellRangeByName( "E7" )
>
>  ' exemple : affecte le contenu d'une cellule de Objet1
>  ' dans une cellule de Objet2
>
>  oSecondCell.value = oFirstCell.value
>
>  ' Mise à jour (actualisation)
>  aDsp = createUnoService( "com.sun.star.frame.DispatchHelper" )
>  aDsp.executeDispatch( oFrame, ".uno:UpdateAll", "", 0, aProps() )
> end sub
>
>
> Francois Gatto
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Répondre à