[Calc] Exécuter des fonctions par programmation

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.
Avatar de l’utilisateur
Loopingss
InconditiOOnnel
InconditiOOnnel
Messages : 783
Inscription : 17 déc. 2008 01:50

[Calc] Exécuter des fonctions par programmation

Message par Loopingss »

Voici une procédure qui permet d'exécuter une fonction Calc simple de type NBVAL(), NB(), MIN(), MAX(), etc ... dans un code Basic.
Pour utiliser d'autres fonctions que NBVAl() - COUNTA() en anglais il faut utiliser le nom anglais de la fonction.
Merci à B Marcelli et L Godard, je me suis inspiré de leur livre "Programmation d'OpenOffice.org2 - Macros et API" ainsi que d'un tutoriel de L Godard pour écrire cette procédure. Je l'utilise, entre-autres, pour rechercher le nombre de données présentes dans un feuille et ainsi connaitre les coordonnées de la première ligne vide.

Code : Tout sélectionner

REM  *****  BASIC  *****

Option Explicit

Sub Lpg_NombreValeurs()
Rem **************************************************
REM Cette procédure exécute la fonction Calc NBVAL() dans la plage de cellules (A1:A10)
REM Il suffit de remplacer NBVAL() par n'importe quelle autre fonction et (A1:A10) par n'importe quelle autre plage
REM par Loopingss - 2009
REM procédure proposée pour Suprème de Code le 29/01/2009
REM **************************************************

Dim oSht as Object, oZoneCell as Object, oAcces as Object
Dim Result as Long, Arg(0) as Variant

oSht = ThisComponent.Sheets.getByName("Feuille1") 'Accès à la feuille
Arg(0) = oSht.getCellRangeByName("A1:A10") 'La plage de données est passée en arguments
REM Il est possible d'utiliser une plage nommée
'Arg(0) = oSht.getCellRangeByName("PlageDonnees"), PlageDonnees représentant (A1:A10)
oAcces = CreateUnoService("com.sun.star.sheet.FunctionAccess")
Result = oAcces.callFunction("COUNTA",Arg()) 'Execution de la fonction
Print "Nombre de données = ", Result, spc(1)
End Sub

Attention : lire aussi : [Calc] Traduction en anglais de fonction en langue locale