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.
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.
[Calc] Fonction pour modifier une autre cellule
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.
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.
-
- ManitOOu
- Messages : 2562
- Inscription : 26 nov. 2005 13:42
[Calc] Fonction pour modifier une autre cellule
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
OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
-
- ManitOOu
- Messages : 2562
- Inscription : 26 nov. 2005 13:42
Re: [Calc]Fonction pour modifier une autre cellule
Bonjour,
Voici un deuxième exemple, qui pourra intéresser quelqu'un.
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.
Voici un deuxième exemple, qui pourra intéresser quelqu'un.
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.
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
OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
-
- GourOOu
- Messages : 5753
- Inscription : 02 janv. 2009 23:56
Re: [Calc]Fonction pour modifier une autre cellule
Rhââ Lovely... comme dirait Gotlib
Merci ! et
Jean-Louis
Merci ! et
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc]Fonction pour modifier une autre cellule
Une pure beauté, comme disait le shah.
Merci, bm92
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 !
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 !
-
- ManitOOu
- Messages : 2668
- Inscription : 30 avr. 2009 04:54
- Localisation : CATALUNYA
Re: [Calc]Fonction pour modifier une autre cellule
Le Shah, certes... mais le chat sait aussi quoi dire...
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
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
-
- SuppOOrter
- Messages : 1273
- Inscription : 10 nov. 2006 15:04
- Localisation : F-Oise
Re: [Calc] Fonction pour modifier une autre cellule
Bonsoir,
C'est si simple... qu'il fallait bien y penser.
Bravo pour cet exemple et ce travail.
Cordialement.
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.
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.
-
- ManitOOu
- Messages : 2562
- Inscription : 26 nov. 2005 13:42
Re: [Calc] Fonction pour modifier une autre cellule
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()
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.
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
OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial