[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.

[Calc] Fonction pour modifier une autre cellule

Messagepar bm92 » 27 Juil 2010 14:04

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
Démonstration
(10.17 Kio) Téléchargé 1351 fois

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.
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
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Re: [Calc]Fonction pour modifier une autre cellule

Messagepar bm92 » 20 Juin 2011 20:19

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
Mise en oeuvre
snap003.png (7.82 Kio) Consulté 9068 fois

FonctionModifAutreCellule2.ods
Fichier avec les 2 exemples
(11.84 Kio) Téléchargé 679 fois
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
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Re: [Calc]Fonction pour modifier une autre cellule

Messagepar Jean-Louis Cadeillan » 20 Juin 2011 21:21

Rhââ Lovely... comme dirait Gotlib
Merci ! et :bravo:
Jean-Louis
LibreOffice 6.1.5.2 (x64) et Apache OpenOffice 4.1.5, Windows 7 Édition Intégrale 64 SP1, Java (x64) 1.8.0_201 (Domicile)
LibreOffice 5.4.1.2 (x86) sous Linux Karoshi 5.0 (Ubuntu LTS 16.04.1, noyau 4.4.0-93) et Xfce 4.12, Java (x86) 1.8.0_131 (Travail)
Avatar de l’utilisateur
Jean-Louis Cadeillan
ManitOOu
ManitOOu
 
Message(s) : 4202
Inscrit le : 03 Jan 2009 00:56

Re: [Calc]Fonction pour modifier une autre cellule

Messagepar alhazred » 14 Août 2011 23:59

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
alhazred
ManitOOu
ManitOOu
 
Message(s) : 3028
Inscrit le : 01 Mai 2011 00:08
Localisation : Casablanca (Maroc)

Re: [Calc]Fonction pour modifier une autre cellule

Messagepar Churay » 15 Août 2011 23:47

Le Shah, certes... mais le chat sait aussi quoi dire...

bm.jpg
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
Churay
ManitOOu
ManitOOu
 
Message(s) : 2666
Inscrit le : 30 Avr 2009 05:54
Localisation : CATALUNYA

Re: [Calc] Fonction pour modifier une autre cellule

Messagepar OOo - Ekel » 16 Août 2011 20:02

Bonsoir,

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

Bravo pour cet exemple et ce travail.

Cordialement.
Ekel

KUbuntu Cosmic Cuttlefish (18.10) : LibreOffice 6.1.4.2 Officielle
AMD Phenom(tm) II X4 955 3200 GHz
AMD Radeon HD 5770 Series
22" + 22"
12 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
 
Message(s) : 1145
Inscrit le : 10 Nov 2006 16:04
Localisation : F-Oise

Re: [Calc] Fonction pour modifier une autre cellule

Messagepar bm92 » 05 Fév 2016 14:46

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.
Pièces jointes
FonctionModifAutreCellule3.ods
Démo d'un tampon de date automatique.
Contient aussi les exemples précédents
(18.69 Kio) Téléchargé 171 fois
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
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité