Accueil Fonctions Calc Menu Basic EDI OOo 1.x EDI OOo 2.x EDI LibO - OOo 3.x Affectation touche Affectation icône Etape par étape Macro débutant Fonctions Basic Dialogues OOo1-2 Dialogues LibO-OOo3 Quelques exemples Exemples dialogue Fonctions perso Définitions Recherche sur site


Fonctions personnalisées 1

 




Accès direct : page 1, page 2, page 3, page 4,


 

Vrai débutant(e) ? Un conseil, commencez par la macro Loto.

 

Créer une fonction personnalisée, c'est relativement simple. Commençons par un exemple facile : le calcul de la surface d'un cercle en fonction d'un rayon connu.

Ouvrons un nouveau classeur, puis via Outils, Macro, Gérer les macros, OpenOffice.org Basic, ouvrez un nouveau module, nommé Module1 par défaut puis OK

Comme dans les macros, accents et espaces sont interdits dans les variables. Dans le Module écrivons cette fonction simple :

SurfaceCercle001

  1. Function SurfaceCercle(Rayon)
  2.   SurfaceCercle = Rayon * Rayon * Pi
  3. End Function

Même si ça peut vous étonner, vous venez de créer une nouvelle fonction dans Calc. Pour le vérifier, revenez dans Calc et, dans n'importe quelle cellule, entrez par exemple : = SurfaceCercle(12), vous obtiendrez en retour 452,39 (suivant format d'affichage).

Remarque la fonction est automatiquement affichée en majuscules dans Calc . Ainsi vous pouvez lire = SURFACECERCLE(12)

Cependant en regardant de plus près, il faudrait pour être plus sérieux déclarer les formats de variables. La méthode change un peu par rapport à une macro traditionnelle. On peut toujours placer des Dim à l'intérieur de la fonction, pour des calculs internes par exemple, mais de plus on déclare les variables entrées et sorties dans Function comme suit :

SurfaceCercle002

  1. Function SurfaceCercle(Rayon As Double) As Double
  2.   SurfaceCercle = Rayon * Rayon * Pi
  3. End Function

Ceci est équivalent à :

Dim SurfaceCercle As Double
Dim Rayon As Double

Dans une macro.

C'est le moment de faire un test simple. Dans SurfaceCercle002 nous avons déclaré nos variables comme Double. Testez avec des variables comme Long, puis faites des tests dans Calc. Les résultats vont varier sensiblement.

Revenons un instant dans Calc. Tout comme les autres fonctions vous allez pouvoir écrire, par exemple :

= SURFACECERCLE(A1)

qui retourne la surface du cercle dont le rayon est dans la cellule A1

 

Poursuivons avec le périmètre du rectangle :

PerimetreRectangle

  1. Function PerimetreRectangle(Longueur As Double, Largeur As Double) As Double
  2.   PerimetreRectangle = (Longueur + Largeur) * 2
  3. End Function

Dans Calc =PERIMETRERECTANGLE(10; 5) retourne 30

 

Pour tester le bon fonctionnement d'une fonction depuis le Basic, il suffit de créer une macro (pas une fonction !) qui va appeler cette macro. Par exemple :

TestPerimetreRectangle

  1. Sub Test
  2.   Longueur = 10
  3.   Largeur = 5
  4.   Retour = PerimetreRectangle(Longueur, Largeur)
  5.   MsgBox(Retour)
  6. End Sub

 

En ligne 4, l'écriture est importante. Si vous vous contentez d'écrire :

Retour = PerimetreRectangle

Une erreur Runtime Error BASIC. L'argument n'est pas facultatif, va être générée en ligne 2 de la fonction PerimetreRectangle

 

Autre exemple de fonction avec la conversion des degrés Fahrenheit en degrés Celsius. Il suffit de connaître la formule pour créer la fonction Celsius.

STOP Voici la formule : Celsius = ( Fahrenheit - 32 ) * 5/9, essayez de l'appliquer.

 

Celsius

  1. Function Celsius(Fahrenheit As Double) As Double
  2.   Celsius = (Fahrenheit - 32 ) * 5/9
  3. End Function

Vous avez réussi ? Bien sûr.

Le nom Celsius n'est pas vraiment explicite. Il aurait fallu donner un nom plus causant comme FahrenheitEnCelsuis. Revers de la médaille, le risque de fautes à l'écriture dans Calc. Il convient donc de bien réfléchir au nom de fonction.

Précision Cette fonction est rigoureusement identique à =CONVERT_ADD(A1; "F"; "C") si la valeur à convertir est en A1.

 

Tout fonctionne ? C'est parfait ! Mais vous avez sans doute remarqué un problème. Ces superbes fonctions ne fonctionnent qu'avec le classeur à laquelle elles sont attachées. Comment faire pour que ces fonctions soient accessibles par tous les classeurs ? C'est simple !

 

Donnez un nom causant au module. Ce n'est pas indispensable, mais ça peut aider.

 

Voici une des méthodes possibles. Depuis l'EDI (Environnement de Développement Intégré), on fait Outils, Macros, Gérer les macros, OpenOffice.org Basic

 

Dans la boite de dialogue Gestion des macros de OpenOffice.org Basic, ouvrez l'onglet Modules. En dépliant Sans nom 1 (le nom de votre classeur par défaut) et Standard, vous arrivez au module ModuleMesFonctions

Dépliez Mes macros, Standard. Sur l'image ci-contre des modules qui logiquement n'apparaissent pas sur votre machine. Ce sont des modules pour mes propres tests.

 

Sélectionnez ModuleMesFonctions, maintenez le clic gauche enfoncé, puis déplacez vous vers le haut. Le curseur change de forme et un trait fin horizontal suit approximativement le curseur pour désigner l'emplacement futur du module. Relâchez le clic gauche et le module vient de changer de place. Il se trouve maintenant disponible pour tous les classeurs Calc.

Votre module a été déplacé, il n'existe donc plus dans le classeur d'origine. Nous aurions pu faire la copie en maintenant la touche Ctrl enfoncée en plus du clic gauche pendant le déplacement. L'icône de déplacement se serait alors transformé en icône de copie . Vous avez sans doute également remarqué que si vous étiez hors zone de copie l'icône devenait

 

Vous le constatez : il est très simple de créer des fonctions personnalisées. Il convient donc d'être très prudent avec des fonctions qui par exemple peuvent manipuler, déplacer ou même supprimer des fichiers. Les tests poussés seront nécessaires, de même qu'on doit être prudent avec des fichiers contenant des macros d'origine douteuse.

 

 

 


 


 

Ce site n'est plus mis à jour. Merci aux nombreux visiteurs depuis 2003. Consultez le Wiki LibreOffice.
   

Le tableur Calc par l'exemple : christianwtd@free.fr
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France License.

  .

Site optimisé pour Firefox

Dernière modification : 29/08/2010 à 18h47


Déjà plusieurs visites sur ce site depuis quelque temps (au moins vous et moi)

Compteur non certifié