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.

  • (I.e. Dรฉfinition: Une fonction effectue une tรขche spรฉcifique et renvoie un rรฉsultat unique au code appelant.
  • ๐Ÿงพ syntaxe: Nom de la fonction (arguments) As Type ouvre le bloc et End Function le ferme.
  • ๐Ÿ‡ง๐Ÿ‡ท Retourner une valeur : Attribuez le rรฉsultat au nom de la fonction, comme dans ajouterNumbers = premierNombre + deuxiรจmeNombre.
  • (I.e. Type de retour : Dรฉclarer aussi long ou aussi Double รฉvite la variante par dรฉfaut, plus lente.
  • ๐Ÿ‡ง๐Ÿ‡ท Appel: Un bouton de commande permet de transmettre deux nombres et d'afficher la somme obtenue dans une boรฎte de message.
  • (I.e. Utilisation de la feuille de travail : Une fonction publique dans un module standard devient une formule dรฉfinie par l'utilisateur dans n'importe quelle cellule.

Fonction VBA Excel

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
  • ยซ Fonction privรฉe maFonction(โ€ฆ) ยป
  • Ici, le mot-clรฉ ยซ Function ยป est utilisรฉ pour dรฉclarer une fonction nommรฉe ยซ myFunction ยป et dรฉmarrer le corps de la fonction.
  • Le mot-clรฉ 'Privรฉ' est utilisรฉ pour spรฉcifier la portรฉe de la fonction
  • "ByVal arg1 comme entier, ByVal arg2 comme entier"
  • Il dรฉclare deux paramรจtres de type de donnรฉes entier nommรฉs ยซ arg1 ยป et ยซ arg2 ยป.
  • maFonction = arg1 + arg2
  • รฉvalue l'expression arg1 + arg2 et attribue le rรฉsultat au nom de la fonction.
  • "Fin de fonction"
  • La fonction ยซ End Function ยป permet de terminer le corps de la fonction.

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.

  1. Crรฉer l'interface utilisateur
  2. Ajouter la fonction
  3. ร‰crire le code du bouton de commande
  4. Tester le code

ร‰tape 1) Interface utilisateur

Ajoutez un bouton de commande ร  la feuille de calcul comme indiquรฉ ci-dessous

Fonctions et sous-programmes VBA

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

Fonctions et sous-programmes VBA

ร‰tape 2) Code de fonction.

  1. Appuyez sur Alt + F11 pour ouvrir la fenรชtre de code
  2. 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
  • ยซ Ajout de fonction privรฉeNumbers(...) "
  • Il dรฉclare une fonction privรฉe ยซ add ยปNumbersยป qui accepte deux paramรจtres entiers.
  • "ByVal firstNumber sous forme d'entier, ByVal secondNumber sous forme d'entier"
  • Il dรฉclare deux variables de paramรจtre firstNumber et secondNumber
  • "ajouterNumbers = premierNumรฉro + deuxiรจmeNumรฉro ยป
  • Il ajoute les valeurs firstNumber et secondNumber et attribue la somme ร  ajouterNumbers.

ร‰tape 3) ร‰crire Code qui appelle la fonction

  1. Faites un clic droit sur le bouton AjouterNumbers bouton de commande
  2. Sรฉlectionnez Voir Code
  3. Ajoutez le code suivant
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

ICI dans le code,

Code Action
"MessageBox +Numbers(2,3) "
  • Il appelle la fonction addNumbers et passe 2 et 3 comme paramรจtres. La fonction renvoie la somme des deux nombres cinq (5)

ร‰tape 4) Exรฉcutez le programme, vous obtiendrez les rรฉsultats suivants

Fonctions et sous-programmes VBA

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.

FAQ

Pas directement. Retournez un tableau ou un type personnalisรฉ pour contenir plusieurs valeurs dans un seul rรฉsultat, ou dรฉclarez les paramรจtres supplรฉmentaires par rรฉfรฉrence (ByRef) afin que la fonction les rรฉรฉcrive dans les variables de l'appelant.

Ajoutez le mot-clรฉ Optional avec une valeur par dรฉfaut, comme dans Optional ByVal Rate As Double = 0.05. Tout paramรจtre suivant un paramรจtre optionnel doit รฉgalement รชtre optionnel et doit figurer en dernier dans la liste.

Oui, via Application.WorksheetFunction, par exemple Application.WorksheetFunction.Sum(Range("A1:A10")). Les fonctions fournies par VBA, telles que Left ou Trim, sont appelรฉes directement sans ce prรฉfixe.

Oui. Collez la formule de la feuille de calcul et un assistant IA vous renverra une fonction publique รฉquivalente avec des arguments nommรฉs et un type de retour dรฉclarรฉ. Comparez les deux rรฉsultats sur des lignes d'exemple avant de remplacer la formule.

Oui. Indiquez la fonction et la formule, et un assistant IA vous signalera les causes possibles, comme une incompatibilitรฉ de type d'argument, une affectation de retour manquante ou une tentative de modification d'une cellule depuis l'intรฉrieur d'une fonction dรฉfinie par l'utilisateur.

Rรฉsumez cet article avec :