Tutoriel sur les fonctions Excel VBA : retour, appel, exemples
โก Rรฉsumรฉ intelligent
Une fonction VBA Excel est un bloc de code qui effectue une tรขche et renvoie un rรฉsultat ร l'appelant. Cette page aborde la syntaxe de dรฉclaration, le renvoi d'une valeur, un exemple d'addition et l'utilisation d'une fonction dans une cellule de feuille de calcul.

Qu'est-ce qu'une fonction ?
Une fonction est un morceau de code qui exรฉcute une tรขche spรฉcifique et renvoie un rรฉsultat. Les fonctions sont principalement utilisรฉes pour effectuer des tรขches rรฉpรฉtitives telles que le formatage des donnรฉes pour la sortie, l'exรฉcution de calculs, etc.
Supposons que vous soyez dรฉveloppeurping Un programme qui calcule les intรฉrรชts d'un prรชt. Vous pouvez crรฉer une fonction qui prend en entrรฉe le montant du prรชt et la durรฉe de remboursement. Cette fonction calculera ensuite les intรฉrรชts et renverra le rรฉsultat.
Pourquoi utiliser des fonctions
Les avantages de l'utilisation des fonctions sont les mรชmes que ceux รฉnumรฉrรฉs pour les sous-programmes : elles divisent un long programme en parties gรฉrables, elles peuvent รชtre rรฉutilisรฉes n'importe oรน dans le projet, et un nom descriptif documente ce que fait le code. Tutoriel sur les sous-routines VBA Excel couvre intรฉgralement ces prestations.
Rรจgles de dรฉnomination des fonctions
Les rรจgles de dรฉnomination sont รฉgalement identiques ร celles des sous-programmes. Un nom de fonction ne peut pas contenir d'espace, doit commencer par une lettre ou un trait de soulignement, et ne peut pas รชtre un nom rรฉservรฉ. VBA mots-clรฉs tels que Function, Private ou End.
Syntaxe VBA pour dรฉclarer une fonction
Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer) myFunction = arg1 + arg2 End Function
ICI dans la syntaxe,
| Code | Action |
|---|---|
|
|
|
|
|
|
|
|
Comment renvoyer une valeur et dรฉfinir le type de donnรฉes de la fonction
Une fonction a une particularitรฉ qu'une sous-routine n'a pas : elle renvoie une valeur. Deux dรฉtails dรฉterminent cette valeur, et tous deux sont faciles ร nรฉgliger.
La premiรจre chose ร noter est l'affectation. VBA ne possรจde pas d'instruction Return. ร la place, vous affectez le rรฉsultat au nom mรชme de la fonction, ce qui explique pourquoi la ligne se prรฉsente ainsi : maFonction = arg1 + arg2Si cette affectation n'est jamais exรฉcutรฉe, la fonction renvoie silencieusement une valeur vide au lieu de gรฉnรฉrer une erreur ; par consรฉquent, chaque branche du code doit la dรฉfinir.
Le second point concerne le type de retour. La dรฉclaration ci-dessus s'arrรชte ร l'accolade fermante ; la fonction renvoie donc un Variant. L'ajout d'une clause As aprรจs les accolades corrige le type, ce qui est plus rapide, consomme moins de mรฉmoire et permet au compilateur de dรฉtecter une รฉventuelle incompatibilitรฉ.
| Dรฉclaration | Retours de produits | Quand l'utiliser |
|---|---|---|
| Fonction f(x As Long) | Variante | Uniquement lorsque le type de rรฉsultat varie rรฉellement |
| Fonction f(x As Long) As Long | Long | Les nombres entiers tels que les comptes et les numรฉros de ligne |
| Fonction f(x As Long) As Double | Double | Tout calcul produisant des dรฉcimales |
| Fonction f(x As Long) As String | Chaรฎne | Texte formatรฉ renvoyรฉ pour affichage |
| Fonction f(x As Long) As Boolean | Boolean | Un contrรดle de validation rรฉpondant vrai ou faux |
Astuce : Utilisez la fonction Exit pour quitter prรฉmaturรฉment une fois la valeur de retour dรฉfinie, de la mรชme maniรจre que Exit Sub quitte une sous-routine.
Fonction dรฉmontrรฉe avec exemple :
Les fonctions sont trรจs similaires ร celles du sous-programme. La principale diffรฉrence entre un sous-programme et une fonction est que la fonction renvoie une valeur lorsqu'elle est appelรฉe. Alors qu'un sous-programme ne renvoie pas de valeur lorsqu'il est appelรฉ. Disons que vous souhaitez ajouter deux nombres. Vous pouvez crรฉer une fonction qui accepte deux nombres et renvoie la somme des nombres.
- Crรฉer l'interface utilisateur
- Ajouter la fonction
- รcrire le code du bouton de commande
- Tester le code
รtape 1) Interface utilisateur
Ajoutez un bouton de commande ร la feuille de calcul comme indiquรฉ ci-dessous
Dรฉfinissez les propriรฉtรฉs suivantes de CommandButton1 comme suit.
| Ratio S / N | Contrรดle | Propriรฉtรฉs | Valeur |
|---|---|---|---|
| 1 | Bouton de commande1 | Nom | btnAjouterNumbers |
| 2 | Lรฉgende | Ajouter Numbers Fonction |
Votre interface devrait maintenant apparaรฎtre comme suit
รtape 2) Code de fonction.
- Appuyez sur Alt + F11 pour ouvrir la fenรชtre de code
- Ajoutez le code suivant
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
ICI dans le code,
| Code | Action |
|---|---|
|
|
|
|
|
|
รtape 3) รcrire Code qui appelle la fonction
- Faites un clic droit sur le bouton AjouterNumbers bouton de commande
- Sรฉlectionnez Voir Code
- Ajoutez le code suivant
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
ICI dans le code,
| Code | Action |
|---|---|
| "MessageBox +Numbers(2,3) " |
|
รtape 4) Exรฉcutez le programme, vous obtiendrez les rรฉsultats suivants
Tรฉlรฉchargez Excel contenant le code ci-dessus
Tรฉlรฉchargez le fichier Excel ci-dessus. Code
Le bouton ci-dessus appelle la fonction depuis le code VBA. Il est รฉgalement possible d'appeler une fonction directement depuis la feuille de calcul, sans aucun bouton.
Comment utiliser une fonction VBA dans une cellule de feuille de calcul
Une fonction รฉcrite en VBA peut รชtre saisie dans une cellule exactement comme SOMME ou RECHERCHEV. Excel appelle cela une fonction dรฉfinie par l'utilisateur (FDU), et c'est pourquoi beaucoup apprennent les fonctions avant les sous-routines. Trois conditions doivent รชtre remplies.
- Placez-le dans un module standard : Insรฉrez un module dans l'รฉditeur. Une fonction stockรฉe derriรจre une feuille de calcul ou dans ThisWorkbook n'est pas visible dans la barre de formule.
- Dรฉclarez-le public : L'exemple ci-dessus utilise le niveau de confidentialitรฉ ยซ Privรฉ ยป, ce qui le masque ร Excel. Le niveau de confidentialitรฉ ยซ Public ยป est le niveau par dรฉfaut ; il suffit donc de supprimer le mot-clรฉ.
- Renvoie une valeur, ne modifie rien : Une fonction personnalisรฉe ne peut pas formater les cellules, supprimer des lignes ni รฉcrire dans une autre cellule. Excel bloque ces actions et la cellule affiche #VALEUR!.
La fonction ci-dessous convertit une tempรฉrature et peut รชtre utilisรฉe n'importe oรน sur la feuille de calcul.
Public Function CelsiusToF(ByVal Celsius As Double) As Double CelsiusToF = (Celsius * 9 / 5) + 32 End Function
Enregistrez le classeur au format .xlsm avec macros, puis saisissez le texte. =CelsiusToF(A1) insรฉrez la formule dans n'importe quelle cellule. Le rรฉsultat s'actualise ร chaque modification de la cellule A1 et le nom apparaรฎt dans la liste de saisie semi-automatique des formules, sous la catรฉgorie ยซ Dรฉfinies par l'utilisateur ยป. Le classeur contenant dรฉsormais des macros, toute personne l'ouvrant doit activer le contenu pour que la formule renvoie une valeur plutรดt que #NOM?.
Erreurs courantes des fonctions VBA et comment les corriger
Quatre problรจmes expliquent la plupart des fonctions qui compilent mais renvoient une rรฉponse incorrecte.
- La fonction renvoie une valeur vide ou 0 : Le rรฉsultat n'a jamais รฉtรฉ affectรฉ au nom de la fonction, ou bien une branche d'une instruction if ignore l'affectation. Dรฉfinissez la valeur de retour pour chaque chemin d'exรฉcution.
- #NOM ? dans une cellule de feuille de calcul : La fonction est privรฉe, elle se trouve dans un module de feuille au lieu d'un module standard, ou le classeur a รฉtรฉ enregistrรฉ sans que les macros soient activรฉes.
- Dรฉpassement de capacitรฉ avec des arguments entiers : L'exemple utilise le type As Integer, qui s'arrรชte ร 32 767. Modifiez les deux paramรจtres et le type de retour en Long pour des donnรฉes rรฉelles.
- Un changement d'argument surprend l'appelant : Omettre ByVal permet ร VBA de transmettre la variable elle-mรชme, ce qui autorise la fonction ร modifier la valeur de l'appelant. Utilisez ByVal sauf si vous souhaitez obtenir ce rรฉsultat.



