Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue98:libreoffice [2015/07/17 12:10] – d52fr | issue98:libreoffice [2015/07/19 11:10] (Version actuelle) – auntiee |
---|
However, I am aware that the day may come when I will need a highly specialized function, a function that does something that the built-in functions can't, or calculates an extremely complicated formula. Luckily, Calc allows you to use macros as functions. You can create your own functions and call them from within a cell's formula. You can even pass the values of cells or even cell ranges to your functions.** | However, I am aware that the day may come when I will need a highly specialized function, a function that does something that the built-in functions can't, or calculates an extremely complicated formula. Luckily, Calc allows you to use macros as functions. You can create your own functions and call them from within a cell's formula. You can even pass the values of cells or even cell ranges to your functions.** |
| |
LibreOffice Calc intègre des centaines de fonctions. Elles couvrent les mathématiques, dont la géométrie, la trigonométrie et le calcul, des fonctions de logique, des fonctions sur les cellules et des fonctions sur les textes. Après des années d'utilisation de Calc, je n'ai jamais eu un besoin que je n'aurai pas résolu ou une formule que je n'aurai pas pu recréer en utilisant les fonctions de Calc. | LibreOffice Calc intègre des centaines de fonctions. Elles couvrent les mathématiques, dont la géométrie, la trigonométrie et le calcul, des fonctions de logique, des fonctions sur les cellules et des fonctions sur les textes. Après des années d'utilisation de Calc, je n'ai jamais eu un besoin que je n'ai pas résolu ou une formule que je ne pouvais pas recréer en utilisant les fonctions de Calc. |
| |
Cependant, je suis au courant que le jour peut arriver où j'aurai besoin d'une fonction hautement spécialisée, une fonction qui fait ce que les fonctions intégrées ne peuvent pas faire ou qui calcule une formule extrêmement compliquée. Heureusement, Calc vous permet d'utiliser des macros comme fonctions. Vous pouvez créer vos propres fonctions et les appeler dans la formule d'une cellule. Vous pouvez même passer les valeurs des cellules et même une plage de cellules dans vos fonctions. | Cependant, je sais que le jour peut arriver où j'aurai besoin d'une fonction hautement spécialisée, une fonction qui fait ce que les fonctions intégrées ne peuvent pas faire ou qui calcule une formule extrêmement compliquée. Heureusement, Calc vous permet d'utiliser des macros comme fonctions. Vous pouvez créer vos propres fonctions et les appeler dans la formule d'une cellule. Vous pouvez même passer les valeurs des cellules et même une plage de cellules dans vos fonctions. |
| |
**Create User-Defined Functions | **Create User-Defined Functions |
Créer des fonctions propres à l'utilisateur | Créer des fonctions propres à l'utilisateur |
| |
Pour créer des fonctions propres à l'utilisateur, vous avez besoin d'abord d'un module pour ranger vos macros. Créez un nouveau fichier Calc et sauvez-le sous le nom Macrofunctions.ods. Ouvrez la boîte de dialogue du Basic LibreOffice des macros : Outils > Macros > Gérer les Macros > LibreOffice Basic. Dans le cadre de navigation « Macros de », sélectionnez le nom de votre fichier Macrofunctions.ods. Cliquez sur Nouveau. Dans la fenêtre Nouveau module, saisissez le nom UserFunctions et cliquez sur OK. LibreOffice va ouvrir un nouveau module dans l'IDE (Integrated Development Environment - Environnement intégré de développement) du Basic LibreOffice. Le module définit automatiquement une sous-routine principale vierge. Vous pouvez la laisser ou l'effacer ; à vous de choisir. Vous ne l'utiliserez pas dans cet exemple. L'IDE est un mini-éditeur de programmation. Comme c'est un éditeur de macro intégré dans la suite bureautique, il est plutôt bon. Il y a des outils pour tester et pister les macros, mais tout ceci est hors de propos aujourd'hui. Dans l'IDE, vous allez écrire votre première fonction. C'est très simple. La fonction retourne simplement le nombre cinq. | Pour créer des fonctions propres à l'utilisateur, vous avez besoin d'abord d'un module pour ranger vos macros. Créez un nouveau fichier Calc et sauvez-le sous le nom Macrofunctions.ods. Ouvrez la boîte de dialogue du Basic LibreOffice des macros : Outils > Macros > Gérer les Macros > LibreOffice Basic. Dans le cadre de navigation « Macros de », sélectionnez le nom de votre fichier Macrofunctions.ods. Cliquez sur Nouveau. Dans la fenêtre Nouveau module, saisissez le nom UserFunctions et cliquez sur OK. LibreOffice va ouvrir un nouveau module dans l'IDE (Integrated Development Environment - Environnement intégré de développement) du Basic LibreOffice. Le module définit automatiquement une sous-routine principale vierge. Vous pouvez la laisser ou l'effacer ; à vous de choisir. Vous ne l'utiliserez pas dans cet exemple. L'IDE est un mini-éditeur de programmation. En tant qu'éditeur de macro intégré dans la suite bureautique, il est plutôt bon. Il y a des outils pour tester et pister les macros, mais tout ceci est hors de propos aujourd'hui. Dans l'IDE, vous allez écrire votre première fonction. C'est très simple. La fonction retourne simplement le nombre cinq. |
| |
Function NumberFive() | Function NumberFive() |
Passer des arguments | Passer des arguments |
| |
C'est bien d'avoir créer la macro et de l'utiliser dans une formule. Pour que cette fonction soit vraiment utile, vous avez besoin de pouvoir envoyer des données à la fonction. Vous envoyez des données par les biais des arguments. Comme arguments, vous pouvez utiliser du texte, des nombres, des références de cellules et des | C'est bien d'avoir créé la macro et de l'utiliser dans une formule. Pour que cette fonction soit vraiment utile, vous avez besoin de pouvoir envoyer des données à la fonction. Vous envoyez des données par le biais d'arguments. Comme arguments, vous pouvez utiliser du texte, des nombres, des références de cellules et des plages de cellules. D'abord, vous allez créer une fonction qui passe un seul argument, que ce soit une référence de cellule ou une valeur. |
plages de cellules. D'abord, vous allez créer une fonction qui passe un seul argument, que ce soit une référence de cellule ou une valeur. | |
| |
Function SqrIt(x) | Function SqrIt(x) |
Passer des valeurs multiples | Passer des valeurs multiples |
| |
Si passer une valeur à une fonction est utile, parfois vous avez besoin de passer plusieurs valeurs. Par exemple, vous créez une fonction qui calcule le volume d'un parallélépipède. Un version simpliste de cette fonction est représentée par la fonction Vol (voir ci-dessous). | Si passer une valeur à une fonction est utile, parfois vous avez besoin de passer plusieurs valeurs. Par exemple, vous créez une fonction qui calcule le volume d'un parallélépipède. Une version simpliste de cette fonction est représentée par la fonction Vol (voir ci-dessous). |
| |
Dans Vol, vous passez le trois valeurs nécessaires pour calculer le volume d'un parallélépipède. Les parenthèses contiennent trois variables séparées par des virgules. Dans la déclaration If, la fonction vérifie si chacune des variables est un nombre, et si c'est vrai, elle retourne le résultat du produite des valeurs. Sinon, elle retourne 0.0. | Dans Vol, vous passez le trois valeurs nécessaires pour calculer le volume d'un parallélépipède. Les parenthèses contiennent trois variables séparées par des virgules. Dans la déclaration If, la fonction vérifie si chacune des variables est un nombre, et si c'est vrai, elle retourne le résultat du produit des valeurs. Sinon, elle retourne 0.0. |
| |
Nous pouvons utiliser cette fonction comme nous l'avons fait pour les autres : | Nous pouvons utiliser cette fonction comme nous l'avons fait pour les autres : |
Passer une plage de cellules | Passer une plage de cellules |
| |
Jusqu'à maintenant, vous avez passé des références à une cellule dans vos fonctions, mais vous pouvez passer une plage de cellules plutôt qu'un référence unique. En Basic, une plage de cellules est passée à une fonction comme une matrice. Une matrice est un ensemble de valeurs. Les plages de cellules sont transmises comme des matrices multi-dimensionnelles, par exemple x(ligne, colonne). Vous pouvez utiliser une fonction appelée IsArray pour déterminer si la valeur passée est une matrice. La fonction SumIt démontre l'utilisation de la référence à une plage de cellules. SumIt acceptera un valeur simple ou une plage de cellules. Si l'argument est une simple valeur, il retourne la valeur. Si l'argument est une plage de cellules, il additionne les valeurs de toutes les cellules de la plage. Le code pour cette fonction est présenté à la page suivante, à droite. | Jusqu'ici, vous avez passé des références à une cellule dans vos fonctions, mais vous pouvez passer une plage de cellules plutôt qu'une référence unique. En Basic, une plage de cellules est passée à une fonction comme une matrice. Une matrice est un ensemble de valeurs. Les plages de cellules sont transmises comme des matrices multi-dimensionnelles, par exemple x(ligne, colonne). Vous pouvez utiliser une fonction appelée IsArray pour déterminer si la valeur passée est une matrice. La fonction SumIt démontre l'utilisation de la référence à une plage de cellules. SumIt acceptera une valeur simple ou une plage de cellules. Si l'argument est une simple valeur, il retourne la valeur. Si l'argument est une plage de cellules, il additionne les valeurs de toutes les cellules de la plage. Le code pour cette fonction est présenté à la page suivante, à droite. |
| |
Le corps de la fonction définit trois variables, TheSum, iRow,et iCol. iRow et iCol sont définis comme entiers, c'est-à-dire des nombres entiers comme 1, 2, 3... Ces deux variables sont les index de ligne et de colonne. TheSum est défini comme Double, c'est-à-dire un nombre réel, en virgule flottante, par exemple, 2,34. ; il contiendra le résultat courant. TheSum est initialisé à 0.0. | Le corps de la fonction définit trois variables, TheSum, iRow, et iCol. iRow et iCol sont définis comme entiers, c'est-à-dire des nombres entiers comme 1, 2, 3... Ces deux variables sont les index de ligne et de colonne. TheSum est défini comme Double, c'est-à-dire un nombre réel, en virgule flottante, par exemple, 2,34. ; il contiendra le résultat courant. TheSum est initialisé à 0.0. |
| |
**You have only one argument in your function definition, x. The user could send a single value, single cell reference, or a cell range. The function tests for this using an If statement. It uses the IsArray function to check if x is an array. If it is, SumIt sets up two loops. The outer loop cycles through the row lower-to-upper values. The inner loop cycles through the column lower-to-upper values. The lower values are obtained through the LBound function, and the upper values are obtained through the UBound function. Both functions take a reference to the array, x, and the dimension of the array, 1 or 2. Remember, it references the values through x(row, column). The row is the first level, and the column is the second level. In the middle of the two loops, SumIt takes the current sum, TheSum, and adds the value of the current cell in the array to it, x(iRow, iColumn). Once the first row is complete and iColumn has reached its UBound limit, the iRow increases by one, and the inner loop starts over again. This procedure continues until both iRow and iColumn have reached their UBound limits. The two Next statements end the two loops once they reach the UBound limit for their range. The Else statement handles the case when x is not an array but a single value. It sets TheSum equal to the value of the single argument.** | **You have only one argument in your function definition, x. The user could send a single value, single cell reference, or a cell range. The function tests for this using an If statement. It uses the IsArray function to check if x is an array. If it is, SumIt sets up two loops. The outer loop cycles through the row lower-to-upper values. The inner loop cycles through the column lower-to-upper values. The lower values are obtained through the LBound function, and the upper values are obtained through the UBound function. Both functions take a reference to the array, x, and the dimension of the array, 1 or 2. Remember, it references the values through x(row, column). The row is the first level, and the column is the second level. In the middle of the two loops, SumIt takes the current sum, TheSum, and adds the value of the current cell in the array to it, x(iRow, iColumn). Once the first row is complete and iColumn has reached its UBound limit, the iRow increases by one, and the inner loop starts over again. This procedure continues until both iRow and iColumn have reached their UBound limits. The two Next statements end the two loops once they reach the UBound limit for their range. The Else statement handles the case when x is not an array but a single value. It sets TheSum equal to the value of the single argument.** |
| |
Il n'y a qu'un seul argument dans la définition de la fonction, x. L'utilisateur peut envoyer, soit une simple valeur, soit la référence d'une cellule, soit une plage de cellules. La fonction fait un test en utilisant la déclaration If. Elle utilise la fonction IsArray pour déterminer si x est une matrice. Si c'est le cas, SumIt parcoure deux boucles. La boucle extérieure parcourt les valeurs de ligne en ordre croissant. La boucle intérieure parcourt les valeurs croissantes des colonnes. Les limites basses sont trouvées avec la fonction Lbound et les bornes hautes avec la fonction Ubound. Ces deux fonctions prennent en référence la matrice x et la dimension de la matrice, 1 ou 2. Souvenez-vous que les valeurs sont référencées par l'intermédiaire de x(ligne, colonne). La ligne est la première valeur, la colonne la deuxième. Au cœur des deux boucles, SumIt prend la valeur de somme courante, TheSum, et lui ajoute la valeur de la cellule courante de la matrice, x(ligne, colonne). Quand la première ligne est finie et que iCol a atteint sa limite Ubound, l'index iRow s'incrémente d'un et la boucle intérieure est relancée. Ce processus continue jusqu'à ce que iRow et iCol atteignent leurs limites Ubound. Les deux déclarations Next terminent les boucles quand elles atteignent leurs limites respectives Ubound. La déclaration Else traite le case où x n'est pas une matrice mais une valeur simple. TheSum prend la valeur de l'argument unique. | Il n'y a qu'un seul argument dans la définition de la fonction, x. L'utilisateur peut envoyer, soit une simple valeur, soit la référence d'une cellule, soit une plage de cellules. La fonction fait un test en utilisant la déclaration If. Elle utilise la fonction IsArray pour déterminer si x est une matrice. Si c'est le cas, SumIt parcourt deux boucles. La boucle extérieure parcourt les valeurs de ligne en ordre croissant. La boucle intérieure parcourt les valeurs croissantes des colonnes. Les limites basses sont trouvées avec la fonction Lbound et les bornes hautes avec la fonction Ubound. Ces deux fonctions prennent en référence la matrice x et la dimension de la matrice, 1 ou 2. Souvenez-vous que les valeurs sont référencées par l'intermédiaire de x(ligne, colonne). La ligne est la première valeur, la colonne la deuxième. Au cœur des deux boucles, SumIt prend la valeur de somme courante, TheSum, et lui ajoute la valeur de la cellule courante de la matrice, x(ligne, colonne). Quand la première ligne est finie et que iCol a atteint sa limite Ubound, l'index iRow s'incrémente d'un et la boucle intérieure est relancée. Ce processus continue jusqu'à ce que iRow et iCol atteignent leurs limites Ubound. Les deux déclarations Next terminent les boucles quand elles atteignent leurs limites respectives Ubound. La déclaration Else traite le cas où x n'est pas une matrice mais une valeur simple. TheSum prend la valeur de l'argument unique. |
| |
**Finally, the function returns the value of TheSum. | **Finally, the function returns the value of TheSum. |
While Calc provides you with hundreds of functions for manipulating the data in your spreadsheets, you may occasionally need a specialized function that is not easily duplicated using the functions built into Calc. Once you create a function in Basic, you can call it from a cell using a formula. You can design your functions to accept a single value, a cell reference, or a cell range. This allows you to create very versatile functions.** | While Calc provides you with hundreds of functions for manipulating the data in your spreadsheets, you may occasionally need a specialized function that is not easily duplicated using the functions built into Calc. Once you create a function in Basic, you can call it from a cell using a formula. You can design your functions to accept a single value, a cell reference, or a cell range. This allows you to create very versatile functions.** |
| |
Finalement, la fonction retourne la valeur de TheSum. | Enfin, la fonction retourne la valeur de TheSum. |
| |
Cette fonction vous permet d'utiliser en vrai la plage de cellule comme argument. Vous pouvez aussi utiliser une simple valeur ou un cellule comme argument. De même, vous pouvez utiliser cette fonction dans une fonction plus conséquente. | Cette fonction vous permet d'utiliser une plage de cellules comme argument. Vous pouvez aussi utiliser une simple valeur ou une cellule comme argument. Vous pouvez même utiliser la fonction dans une fonction plus conséquente. |
| |
=SumIt(A3:C6) | =SumIt(A3:C6) |