Programmation VBA pour Excel
Accueil
Sommaire du cours
Sommaire des exercices
Résumé du cours
Forum
Travaux
TICE
AgroParisTech
About
©AgroParisTech
Chapitre 7 - Définir ses propres fonctions
VBA offre la possibilité de créer ses propres fonctions, qui peuvent être utilisées dans Excel comme n’importe quelle fonction intégrée.
Utiliser les fonctions intégrées d’Excel
Toutes les fonctions intégrées d’Excel utilisable depuis VBA sont en fait des méthodes d’objets. Pour utiliser une fonction intégrée d’Excel dans VBA, il faut préciser à VBA où peut être trouvée cette fonction. Pour cela, il faut donc comme indiqué dans le chapitre 3 faire précéder le nom de la fonction de l’objet sur lequel elle va s’appliquer.
Par exemple, l’objet WorkSheetFunction permet d’accéder à de nombreuses fonctions courantes telles que la fonction Min. Le code correspondant est donc :
WorkSheetFunction.Min()
Toutes les fonctions intégrées d’Excel ne sont pas disponibles dans VBA. Néanmoins, il est fortement conseillé d’utiliser une fonction intégrée d’Excel pour faire un calcul donné, si cette dernière existe, plutôt que de définir sa propre fonction, qui serait moins efficace en termes de temps de calcul.
Définition d'une fonction
Jusqu’à présent nous n’avons créé que des
procédures
sans arguments, c'est-à-dire ne nécessitant pas d’apport d’information extérieure pour réaliser leurs tâches. Cependant, lorsque l’on souhaite que l’action d’une procédure dépende d’un contexte, de l’information sur ce contexte doit être apportée en entrée de la procédure sous forme d'arguments.
Une fonction est une suite d'instructions qui retourne une valeur. Elle commence par le mot clé Function suivi du nom de la fonction et d’une liste d’arguments entre parenthèses, qui peut être vide. Elle se termine par le mot clé End Function.
Une fonction indique la valeur à retourner en initialisant son nom avec la valeur de retour.
Une fonction a donc la syntaxe suivante :

Function NomFonction([argument_1,..., argument_n])

Instructions

...

NomFonction = Expression 'valeur de retour

...

End Function

Dans les exemples, les crochets [ ] signifient que les arguments sont facultatifs.
Dans VBA, les arguments d’une fonction sont séparés par des virgules, alors que dans Excel ils sont séparés par des points-virgules.
Exercice guidé
Parce que le meilleur moyen d'apprendre est en le faisant soi-même, voici un exercice guidé sur la définition des fonctions ! Suivez le bien pas à pas et tout se passera bien.
On cherche à écrire une fonction qui calcule la surface d’un cercle à partir de son rayon.
1) Ouvrir le classeur TEST-MACRO.XLS, puis l’éditeur de Visual Basic.
2) Insérer un nouveau module de code MODULE2 et écrire la fonction suivante :

Function SurfaceCercle(Rayon As Double) As Double

SurfaceCercle = WorksheetFunction.Pi() * Rayon * Rayon

End Function

SurfaceCercle est une fonction à un argument : le rayon du cercle Rayon, qui est une variable de type réel (Double). Elle renvoie la surface du cercle de rayon Rayon, qui est de type réel (Double). Pi est une fonction intégrée d’Excel.
On peut typer les arguments d’une procédure ou d’une fonction et la valeur de retour d’une fonction.
Dans VBA les réels sont écrits avec des points, alors qu’ils sont écrits avec des virgules dans Excel.
3) Retourner dans Excel et saisir les données suivantes dans la feuille de calcul FEUIL1 :
ExGuide1
4) Si on note dans la cellule B6, la formule =SurfaceCercle(A6) et que l’on procède de manière analogue pour les cellules suivantes, on obtient le résultat suivant :
ExGuide2
Lorsqu’on écrit =SurfaceCercle(A6) dans la cellule B6 la valeur de la cellule A6 est transmise à la fonction SurfaceCercle par le biais de l’argument Rayon. La fonction SurfaceCercle initialise alors son propre nom avec le résultat calculé (WorksheetFunction.Pi() * Rayon * Rayon). Le résultat est ensuite retourné à la cellule B6.
La fonction SurfaceCercle peut être utilisée comme n’importe quelle fonction intégrée d’Excel (onglet formule - insérer une FONCTION). Par contre, elle n'apparaît pas dans la liste des macros d’Excel.
Contrairement à une procédure, une fonction retourne une valeur. Lorsqu’on utilise cette fonction dans une autre fonction ou une autre procédure, la valeur renvoyée doit être sauvegardée dans une variable. Par exemple, la fonction SurfaceCercle peut être utilisée dans la procédure MacroTestFonction dont le code est fourni ci-dessous.

Sub MacroTestFonction()

Dim valeur As Double

valeur = SurfaceCercle(1.5)

Range("B1").Value = valeur

End Sub

Ici la variable valeur reçoit le résultat de la function SurfaceCercle pour un rayon donné égal à 1.5.
L’instruction With...End With
L’instruction With...End With est utile lorsque les références à un objet sont répétées plusieurs fois dans une petite section de code.
Exemple :

Sub ModifiePolice(MaPlage As Range)

MaPlage.Select

Selection.Font.Size = 12

Selection.Font.ColorIndex = 3

Selection.Font.Italic = True

End Sub

La macro ModifiePolice peut être réécrite plus simplement comme suit :

Sub ModifiePolice(MaPlage As Range)

MaPlage.Select

With Selection.Font

.Size = 12

.ColorIndex = 3

.Italic = True

End With

End Sub

Tout ce qui commence par un point dans un bloc d’instructions With...End With est une propriété ou une méthode de l’objet qui suit l’instruction With.
Ce chapitre est terminé, à vous de jouer ! ‹ lien vers les exercices