Instruction de la fonction

Déclare le nom, les arguments et le code qui forment le corps d’une procédureFonction.

Syntaxe

[Public | Private | Friend] [ Static ] Functionname [ ( arglist ) ] [ Astype ]
[ statements ]
[ nom=expression ]
[ Fonction quitter ]
[ statements ]
[ nom=expression ]
Fonction fin

L’instruction Fonction est composée des éléments suivants :

Élément Description
Public Optional. Indique que la procédure Function est accessible à toutes les autres procédures dans tous les modules. Si elle est utilisée dans un module contenant une Option Private, la procédure n’est pas disponible en dehors du projet.
Private Optional. Indique que la procédure Function est uniquement accessible aux autres procédures du module dans lequel elle est déclarée.
Friend Optional. Utilisé uniquement dans un module de classe. Indique que la procédure Function est visible dans l’ensemble du projet, mais qu’elle n’est pas visible par un contrôleur d’une instance d’un objet.
Static Optional. Indique que les variables locales de la procédure Function sont conservées entre les appels. L’attribut Static n’affecte pas les variables déclarées en dehors de la procédure Function, même si elles sont utilisées dans la procédure.
name Obligatoire. Nom de la procédure Function ; respecte les conventions d’affectation des noms de variables standard.
arglist Optional. Liste des variables représentant des arguments qui sont transmis à la procédure Function lorsqu’elle est appelée. Les variables sont séparées par des virgules.
type Optional. Type de données de la valeur renvoyée par la procédure fonction ; peut être octets, booléenne, entier, Long, devise, unique, Double, décimal (actuellement pas pris en charge), Date, chaîne (à l’exception de longueur fixe) objet, variante, ou n’importe quel type défini par l’utilisateur.
statements Optional. Tous les groupes d’instructions à exécuter dans la procédure Function.
expression Optional. Valeur de retour de la procédure Function.

La syntaxe et les éléments de l'argument arglist sont les suivants :

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]

Élément Description
Optional Optional. Indique qu’un argument n’est pas nécessaire. Si utilisé, tous les arguments suivants dans arglist doivent également être facultatifs et déclarés à l’aide du mot clé Optional. Optional ne peut pas être utilisé pour un argument si ParamArray est utilisé.
ByVal Optional. Indique que l’argument est transféré par valeur.
ByRef Optional. Indique que l’argument est transféré par référence. ByRef est la valeur par défaut dans Visual Basic.
ParamArray Optional. Utilisé uniquement en tant que dernier argument dans arglist pour indiquer que l’argument final est un tableau Optional contenant des éléments Variant. Le mot clé ParamArray vous permet de donner un nombre d’arguments arbitraire. Vous ne pouvez pas l'utiliser avec ByVal, ByRef ou Optional.
varname Obligatoire. Nom de la variable représentant l'argument qui respecte les conventions standard d'affectation de noms de variables.
type Optional. Type de données de l’argument transmis à la procédure ; peut être Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (actuellement non pris en charge) Date, String (longueur de variable uniquement), Object, Variant ou un type d’objet spécifique. Si le paramètre n’a pas la valeur Optional, un type de données défini par l’utilisateur peut également être spécifié.
defaultvalue Optional. Toute constante ou expression constante. Valide pour les paramètres Optional uniquement. Si le type est un objet, une valeur par défaut explicite peut seulement être rien.

Remarques

Si pas explicitement spécifié à l’aide dePublic, Private, ou Friend, les procéduresFunction sont publiques par défaut.

Si Static n’est pas utilisé, la valeur de variables locales n’est pas conservée entre les appels.

Le mot cléFriend peut être utilisé uniquement dans les modules de classe. Toutefois, les procéduresFriend sont accessibles par les procédures dans n’importe quel module d’un projet. Une procédure Friend n’apparaît pas dans la type library de son parent classe, et une procédure Friendne peut être liée plus tard.

Les procédures Fonction peuvent être récursives ; autrement dit, elles peuvent s’appeler elles-mêmes pour effectuer une tâche donnée. Toutefois, la récursivité peut entraîner le dépassement de la pile. En règle générale, le mot clé Static n'est pas utilisé avec les procédures Function récursives.

Tout code exécutable doit être inclus dans une procédure. Vous ne pouvez pas définir une procédure fonction dans une autre procédurefonction, Sub, ou propriété.

L’instruction de la fonction quitter provoque la sortie immédiate d’une procédure fonction. L’exécution du programme se poursuit avec l’instruction suivant l’instruction qui a appelé la procédure fonction. Un nombre d’instructions Exit Function peuvent apparaître n’importe où dans une procédure Function.

Par exemple, comme une procédure Sub, une procédure Function est une procédure distincte qui peut prendre des arguments, effectuer une série d’instructions et modifier les valeurs de ses arguments. Toutefois, contrairement à une procédureSub, vous pouvez utiliser une procédure fonction sur le côté droit d’une expression, de la même façon que vous utilisez n’importe quelle fonction intrinsèque, par exemple, Sqr, Cos, ou Chr, lorsque vous voulez utilisez la valeur renvoyée par la fonction.

Vous appelez une procédure fonction en utilisant le nom de fonction, suivi de la liste d’arguments entre parenthèses dans une expression. Voir la déclarationappeler pour des informations spécifiques sur comment appeler les procéduresfonction.

Pour renvoyer une valeur à partir d’une fonction, attribuer la valeur sur le nom de fonction. N’importe quel nombre de ce type d’affectation peut figurer n’importe où dans la procédure. Si aucune valeur n’est affectée au nom, la procédure renvoie une valeur par défaut : une fonction numérique renvoie 0, une fonction de chaîne renvoie une chaîne vide ("") et une fonction Variant renvoie Empty. Une fonction qui renvoie une référence d’objet rien si aucune référence d’objet n’est affectée à nom (à l’aide de définir) au sein de la fonction.

L’exemple suivant montre comment attribuer une valeur de retour à une fonction. Dans ce cas, faux est affecté au nom pour indiquer qu’une valeur n’a pas été trouvée.

Function BinarySearch(. . .) As Boolean 
'. . . 
 ' Value not found. Return a value of False. 
 If lower > upper Then 
  BinarySearch = False 
  Exit Function 
 End If 
'. . . 
End Function

Les variables utilisées dans la procédurefonction répondent à deux catégories : celles qui sont déclarées explicitement au sein de la procédure et celles qui ne le sont pas.

Les variables explicitement déclarées dans une procédure (à l’aide de Dim ou de l’élément équivalent) sont toujours locales à la procédure. Les variables utilisées mais pas explicitement déclarées dans une procédure sont également locales, sauf si elles sont déclarées explicitement au niveau supérieur en dehors de la procédure.

Une procédure peut utiliser une variable qui n'est pas explicitement déclarée dans la procédure, mais un conflit d'attribution de nom peut se produire si avez défini un élément qui porte le même nom au niveau du module. Si votre procédure se rapporte à une variable non déclarée qui porte le même nom qu’une autre procédure, constante ou variable, il est supposé que votre procédure se rapporte à ce nom situé au niveau du module. Déclarez explicitement les variables pour éviter ce type de conflit. Utilisez une instruction Option Explicit pour forcer la déclaration explicite des variables.

Visual Basic peut réorganiser les expressions arithmétiques pour améliorer les performances internes. Évitez d’utiliser une procédurefonction dans une expression arithmétique lorsque la fonction remplace la valeur des variables dans la même expression. Pour plus d’informations sur les opérateurs arithmétiques, voir opérateurs.

Exemple

Cet exemple utilise l'instruction Fonction pour définir le nom, les arguments et le code qui constituent le corps d'une procédure Fonction. Le dernier exemple utilise des arguments définitifs initialisés Optional.

' The following user-defined function returns the square root of the 
' argument passed to it. 
Function CalculateSquareRoot(NumberArg As Double) As Double 
 If NumberArg < 0 Then ' Evaluate argument. 
  Exit Function ' Exit to calling procedure. 
 Else 
  CalculateSquareRoot = Sqr(NumberArg) ' Return square root. 
 End If 
End Function

Utiliser le mot-clé ParamArray permet à une fonction d’accepter un nombre variable d’arguments. Dans la définition suivante, il est passé par valeur.

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs()) 
Dim ReturnValue 
' If the function is invoked as follows: 
ReturnValue = CalcSum(4, 3, 2, 1) 
' Local variables are assigned the following values: FirstArg = 4, 
' OtherArgs(1) = 3, OtherArgs(2) = 2, and so on, assuming default 
' lower bound for arrays = 1. 

Les argumentsOptional peuvent avoir des valeurs par défaut et des types autres que Variant.

' If a function's arguments are defined as follows: 
Function MyFunc(MyStr As String,Optional MyArg1 As _
 Integer = 5,Optional MyArg2 = "Dolly") 
Dim RetVal 
' The function can be invoked as follows: 
RetVal = MyFunc("Hello", 2, "World") ' All 3 arguments supplied. 
RetVal = MyFunc("Test", , 5) ' Second argument omitted. 
' Arguments one and three using named-arguments. 
RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7) 

Voir aussi

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.