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

[Calc] Exécuter des fonctions par programmation

Messagepar Loopingss » 29 Jan 2009 23:09

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   AgrandirRéduire
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
Avatar de l’utilisateur
Loopingss
PassiOOnné
PassiOOnné
 
Message(s) : 687
Inscrit le : 17 Déc 2008 02:50

Retour vers Suprême de code

Qui est en ligne ?

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