Page 1 sur 1

[Calc] Fonction pour modifier une autre cellule

Publié : 27 juil. 2010 13:04
par bm92
Bonjour,

Les fonctions pour Calc ont une limitation : elles ne peuvent pas modifier d'autre cellule que celle où la fonction est appelée, et encore, seulement pour lui renvoyer une valeur ou un texte.

Le service AsyncCallback sert à déclencher un événement de notification de manière asynchrone par rapport au programme lanceur. Cet événement est mis en file d'attente, et celle-ci est vidée dès que possible.

Ce service permet de contourner la limitation des fonctions pour Calc.
Le document ci-joint en fait une démonstration : la modification de la cellule A2 modifie la cellule D2, sa valeur et sa couleur de fond.
FonctionModifAutreCellule.ods
Pour ceux qui veulent aller plus loin

Le Listener employé est un peu particulier : il n'a pas d'événement disposing. Je suppose que les zones mémoires impliquées sont libérées après la notification.
Attention : en Basic, toute instruction est interruptible. Si vous avez d'autres instructions après le addCallback, la séquence de notification peut être déclenchée entre deux instructions quelconques, ce qui peut perturber votre programme.

Re: [Calc]Fonction pour modifier une autre cellule

Publié : 20 juin 2011 19:19
par bm92
Bonjour,
Voici un deuxième exemple, qui pourra intéresser quelqu'un. :wink:

Le but est, dans une feuille Calc, d'avoir une cellule contenant le résultat d'une formule. Mais la formule en question est créée de toutes pièces à partir de textes et de valeurs dans d'autres cellules. En d'autres termes l'expression mathématique elle-même dépend d'autres cellules.

La Feuille2 du fichier joint utilise 3 cellules correspondants à trois arguments de la formule, et 3 cellules correspondant à trois opérateurs.
La formule est réalisée par la concaténation de textes, et transmise à la macro ACTIVERFORMULE(). Celle-ci renvoie la chaîne de caractères correspondant à la formule (pour la visualiser), et écrit la formule dans une autre cellule grâce au service AsyncCallback.
Vous pourrez vérifier que la modification d'une des cellules d'arguments ou d'opérateur change bien la formule et son résultat.
snap003.png
FonctionModifAutreCellule2.ods

Re: [Calc]Fonction pour modifier une autre cellule

Publié : 20 juin 2011 20:21
par Jean-Louis Cadeillan
Rhââ Lovely... comme dirait Gotlib
Merci ! et :bravo:
Jean-Louis

Re: [Calc]Fonction pour modifier une autre cellule

Publié : 14 août 2011 22:59
par alhazred
Une pure beauté, comme disait le shah.

Merci, bm92

Re: [Calc]Fonction pour modifier une autre cellule

Publié : 15 août 2011 22:47
par Churay
Le Shah, certes... mais le chat sait aussi quoi dire...
bm.jpg

Re: [Calc] Fonction pour modifier une autre cellule

Publié : 16 août 2011 19:02
par OOo - Ekel
Bonsoir,

C'est si simple... qu'il fallait bien y penser.

Bravo pour cet exemple et ce travail.

Cordialement.

Re: [Calc] Fonction pour modifier une autre cellule

Publié : 05 févr. 2016 13:46
par bm92
Bonjour,
Un troisième exemple : comment afficher la date de dernière modification d'une cellule.

Principe
La cellule A14 de la Feuille1 est mise à jour par l'utilisateur.
La cellule B14 contient l'appel à une fonction basic TAMPONDATE()
=TAMPONDATE(A14;"Feuille1";"D14")
Argument 1 : cellule à surveiller
Argument 2 : nom de la feuille
Argument 3 : nom de la cellule où afficher la date de dernière modification
La fonction Basic se trouve dans le Module1, elle utilise la cellule ZD14 pour mémoriser la dernière valeur de A14.