Page 1 sur 1

[Issue][Calc] Fonction pour écrire dans une cellule distante

Publié : 16 janv. 2015 05:14
par zeguedon
Bonjour,

La section tableur regorge de questions du type : comment faire pour écrire X ou Y en A1 si je mets ceci cela en B1. Bien entendu, vous connaissez la réponse :)

Suite à ce fil : https://forum.openoffice.org/fr/forum/v ... =8&t=46016 je me suis amusé à faire des expériences (que je voulais plus élaborées) dont voici le fruit :

Une petite fonction que l'on appelle directement à partir d'une cellule comme toutes les fonctions Calc. Elle permet d'écrire un texte, une formule , une valeur, une formule calculée dans une cellule distante.
Elle permet aussi d'effacer à distance le contenu d'une cellule, directement ou sous condition, sans qu'il n'existe de lien entre les deux cellules. C'est un peu comme si on pouvait piloter à distance un tableau indépendant.

En A1 par exemple

Code : Tout sélectionner

=ECRIRDANS("G1";70)

Code : Tout sélectionner

SI(D1=6;ECRIRDANS("B2";"OK");ECRIRDANS("C27";"A voir"))
 Ajout : Pour effacer du contenu, il faut saisir une espace entre les deux doubles quottes

Code : Tout sélectionner

=ECRIRDANS("A1";" ")
 
Après on peu faire plein de truc bizarres, genre demander à une cellule d’écrire un truc dans une autre sous condition, puis demander à une autre d'effacer celle qui a demandé d'écrire un truc lorsque le truc est écrit. En gros on efface les traces.
J'ai constaté aussi qu'elle permet d'interdire l'effacement du contenu d'une cellule, que ce soit par la touche Del, la flèche gauche ou la touche entrée.
Il faut deux formules pour le faire :
en A1 :

Code : Tout sélectionner

=SI(ESTVIDE(D1);1;"")
En A2:

Code : Tout sélectionner

=SI(A1=1;ECRIRDANS("D1";50)
Voilà, à utiliser avec précaution mais à bon escient. Apparemment ne fonctionne pas avec AOO.

Code : Tout sélectionner

Function ECRIRDANS(arg1 As string, arg2 As variant) As string
    If IsNumeric(arg2)  then
    	ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(arg1).Value = arg2   
    Else
    	ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(arg1).String = arg2
    End If
    end Function

Re: [Calc]Fonction pour écrire dans une cellule distante

Publié : 16 janv. 2015 11:27
par bm92
Bonjour,

Je me suis amusé à faire :
Cellule E3 contient : G3
Cellule A3 contient : =ECRIRDANS(E3;95123)
Avec LibreOffice, j'écris bien dans la cellule G3.
Ensuite je change le contenu de la cellule E3
Cellule E3 contient : A3
La modification de E3 active la formule... qui se détruit dans la cellule A3.
zeguedon a écrit :Apparemment ne fonctionne pas avec AOO.
N'a jamais fonctionné avec OpenOffice.org et Apache OpenOffice. C'est donc une incompatibilité de plus introduite par LibreOffice...

Cependant, on ne peut toujours pas modifier le formatage de la cellule par une fonction. Même avec LibreOffice, pour le moment.

Re: [Calc]Fonction pour écrire dans une cellule distante

Publié : 16 janv. 2015 13:38
par Dude
Salut,
bm92 a écrit :N'a jamais fonctionné avec OpenOffice.org et Apache OpenOffice.
Rapport 31627 classé sans suite.
Le développeur de l'époque invoque qu'une fonction utilisée dans une formule peut être appelée lors du rafraichissement de la feuille pour obtenir son résultat et ne pas pouvoir ensuite modifier cette feuille.

Re: [Calc]Fonction pour écrire dans une cellule distante

Publié : 17 janv. 2015 02:17
par zeguedon
bm92 a écrit :La modification de E3 active la formule... qui se détruit dans la cellule A3.
J'avais essayé l'autodestruction directe aussi mais si on fait annuler>saisie avec la flèche à gauche du pinceau, au bout de la deuxième fois Libo ferme sans sommations.
On ne peut pas non plus lui demander d'écrire une formule, elle le fait, mais elle ne s'active pas, même après avoir ressaisi le signe égal. Il faut supprimer le formatage direct.
bm92 a écrit :Cependant, on ne peut toujours pas modifier le formatage de la cellule par une fonction.
Effectivement j'avais constaté et on ne peut pas non plus appeler une macro qui insérerait une ligne par exemple. Mais je vais continuer à faire mumuse pour voir si je peux l'améliorer.