[Calc] Fonction pour modifier une autre cellule

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

[Calc] Fonction pour modifier une autre cellule

Message 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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Calc]Fonction pour modifier une autre cellule

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5749
Inscription : 02 janv. 2009 23:56

Re: [Calc]Fonction pour modifier une autre cellule

Message par Jean-Louis Cadeillan »

Rhââ Lovely... comme dirait Gotlib
Merci ! et :bravo:
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc]Fonction pour modifier une autre cellule

Message par alhazred »

Une pure beauté, comme disait le shah.

Merci, bm92
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc]Fonction pour modifier une autre cellule

Message par Churay »

Le Shah, certes... mais le chat sait aussi quoi dire...
bm.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
Messages : 1271
Inscription : 10 nov. 2006 15:04
Localisation : F-Oise

Re: [Calc] Fonction pour modifier une autre cellule

Message par OOo - Ekel »

Bonsoir,

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

Bravo pour cet exemple et ce travail.

Cordialement.
Ekel

KUbuntu Jammy Jellyfish (22.04) : LibreOffice 24.2.0.3 Officielle
AMD Ryzen 5 5600G
AMD Radeon RX 6650 XT
22" + 22"
16 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Calc] Fonction pour modifier une autre cellule

Message 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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial