[Calc] Choisir un nom de fonction Basic pour Calc

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] Choisir un nom de fonction Basic pour Calc

Messagepar bm92 » 20 Mai 2011 11:42

Bonjour,

Ceci est une réflexion suite à un problème résolu récemment.
Lorsque vous écrivez une fonction en Basic destinée à être utilisée dans une formule de cellule, vous n'avez pas toute liberté pour le nom de votre fonction : Calc ne doit pas l'interpréter comme une autre entité.
Quelques exemples...

____________________

Vous êtes chercheur en biologie, et vous avez concocté une fonction relative à l'ADN. Vous l'avez appelée ADN2750().
Code : Tout sélectionner   AgrandirRéduire
Function ADN2750(v)
ADN2750 = v*10
End Function

Essayez sur un tableur Calc d'écrire la formule =ADN2750(B2)
snap001.png
snap001.png (5.56 Kio) Consulté 4477 fois

Pourquoi ? Parce que ADN2750 est la coordonnée d'une cellule !
Vous ne devez pas utiliser un nom de fonction pris dans la série A1 à AMJ1048576

__________________

Votre tableur contient des relevés de température, pression, humidité, etc. À partir de ces données météo vous concoctez une fonction complexe qui renverra une indication météo. Vous choisissez un nom de fonction en rapport avec votre sujet:
Code : Tout sélectionner   AgrandirRéduire
Function Temps(p, h, a, b, c) As String
' ici un calcul très compliqué...
End Function

Essayez sur un tableur Calc d'écrire la formule =TEMPS(1;2;3;4;5)
Calc semble vous guider dans l'écriture des arguments. Mais si vous persistez vous aurez Err: 504 Erreur dans la liste de paramètres
Pourquoi ? Vous avez oublié que TEMPS() est une fonction de Calc, dans la catégorie Date et heure.
Celle-là était simple, mais connaissez-vous vraiment tous les noms de fonctions Calc ?
Ne croyez pas vous en sortir facilement avec un nom anglais, si vous travaillez en international. S'il correspond à une fonction Calc de langue anglaise, un utilisateur anglo-saxon tombera sur le problème.

___________________

Votre tableur contient des noms d'élèves, avec leurs notes. Vous avez écrit une fonction CLASSER() qui renvoie le classement de l'élève en fonction de ses notes.
Tout ceci marche bien, depuis des années.
Et puis un jour, un élève se présente, il s'appelle : Classer. Et la fonction ne veut plus marcher ! Et votre tableau se met à sortir des erreurs #REF!
snap002.png
snap002.png (5.55 Kio) Consulté 4477 fois

Pourquoi ? Parce que vous avez enregistré votre classeur avec la recherche automatique des colonnes et des lignes.
snap003.png

Dans ce cas, Calc recherche si le nom indiqué est dans une cellule, et l'utilise alors comme une référence à cette cellule. Ce mécanisme très vicieux (probablement copié de Excel) est à désactiver. Cette coche peut être désactivée pour tout nouveau document (en utilisant un modèle), mais son état est mémorisé dans le document, qui peut avoir été écrit par une autre personne sur un autre ordinateur.

_____________

Enfin, les principes de programmation Basic s'appliquent. Notamment, le nom de votre fonction ne doit pas correspondre à un nom utilisé par Basic, et il doit être différent des noms des modules de la bibliothèque où elle se trouve.


Alors comment faire ? Choisissez un nom spécifique, pas trop court, ou comportant un caractère souligné _ ou des chiffres, ou tout ça à la fois. Z_2BK est bien, mais pas très parlant.
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é