L'utilisation de la fonction dans VBA

Glen Alfaro 30 janvier 2023
  1. Utilisation du type de fonction non-objet dans VBA
  2. Utilisation du type de fonction object dans VBA
  3. Utilisation de la commande Exit Function pour un retour forcé au sous-programme
L'utilisation de la fonction dans VBA

Cet article montrera comment créer et utiliser une fonction lorsqu’il s’agit de VBA.

Les fonctions sont utilisées pour renvoyer un résultat là où un sous-programme ne le peut pas. Lorsque le programme devient plus long et plus complexe, les fonctions sont un outil utile pour faciliter l’organisation des blocs de code, le débogage et la révision du script.

Les fonctions peuvent être classées en deux sous-ensembles :

non-object-type fonction qui renverra des chaînes, des entiers, des booléens, etc.
object-type fonction qui renverra un objet comme des plages, des listes de tableaux, etc.

Syntaxe:

[Public | Private] [ Static ] Function name [ ( argumentlist ) ] [ As retType ]
[ statements ]
[ name = expression ]
[ Exit Function ]
End Function

Définition:

Public Optionnel. indique que d’autres procédures de tous les modules peuvent accéder à la fonction
Private Optionnel. indique que la fonction n’est accessible que par les procédures du module en cours
Static Optionnel. indique que la variable de procédure est conservée entre les appels de fonction
name Obligatoire. Nom de la fonction
argumentlist Optionnel. Liste des variables transmises une fois la fonction appelée.
retType Optionnel. Type de retour de la fonction
statements Bloc de code à exécuter
expression Valeur de retour de la fonction

Utilisation du type de fonction non-objet dans VBA

Le bloc de code ci-dessous calculera l’aire d’un triangle en fonction de sa base et de sa hauteur comme arguments à l’aide d’un type de fonction non-objet.

Public Function GetTriangleArea(b, h) as Double
Dim area as Double
area= (b*h)/2
GetTriangleArea= area
End Function
Sub TestFunction()
Debug.print("The area of the triangle is " & GetTriangleArea(10,8) & " square meters.")
End Sub

Production :

The area of the triangle is 40 square meters.

Utilisation du type de fonction object dans VBA

Le bloc de code ci-dessous montrera comment utiliser un type de fonction object pour calculer la somme de tous les nombres entre deux nombres.

Public Function GetCollection(numStr, numEnd) As Object
'Declaring variable for the counter
Dim i As Integer
'Creating a new Arraylist named coll
Dim coll As Object
Set coll = CreateObject("System.Collections.ArrayList")

'Add all number from numStr to numEnd to the arraylist named coll using a for loop
For i = numStr To numEnd
    coll.Add (i)
Next i

'Returning the arraylist named coll to the subroutine
    Set GetCollection = coll
End Function
Sub testFunction()

'Declaring collForSum as an Object
'collForSum object will be the placeholder object where the coll arraylist will be in placed
Dim collForSum As Object
'Setting up a counter named j
Dim j As Integer
'Sum variable will hold the running sum of the elements in collForSum
Dim sum As Double
'Calling the GetCollection Function to fill collForSUm Object
    Set collForSum = GetCollection(10, 20)
'For loop to iterate on all element of collForSum arraylist
For j = 0 To collForSum.Count - 1
    'Add all the elements inside the collForSum arraylist.
    sum = sum + collForSum(j)
Next j
Debug.Print ("The total sum is " & sum & ".")
End Sub

Production :

The total sum is 165.

Utilisation de la commande Exit Function pour un retour forcé au sous-programme

Renvoyer une valeur à un sous-programme ou à une fonction ne signifie pas nécessairement que l’exécution du code dans la fonction en cours s’arrêtera. Nous devons déclarer explicitement pour arrêter l’exécution du code sur la fonction. La commande à utiliser est Exit Function.

L’appel d’une fonction sans la commande Exit Function peut renvoyer des valeurs erronées.

Public Function PositiveOrNegative(num) as String 
If num >= 0 Then
    PositiveOrNegative = "Positive"
End If
PositiveOrNegative = "Negative"
End Function

Sub TestFunction()
   Debug.Print (PositiveOrNegative(5))   
End Sub

Sortie TestFunction :

Negative

La sortie est Negative même si l’entrée TestFunction est 5, car l’exécution du code ne s’est pas arrêtée lorsqu’elle a atteint la ligne de code PositiveOrNegative = "Positive".

Nous devons utiliser la commande Exit Function pour résoudre ce problème.

Public Function PositiveOrNegative(num) as String 
If num >= 0 Then
    PositiveOrNegative = "Positive"
    'Exit Function will force the code execution in the current function to stop and return the current value of PositiveOrNegative
    Exit Function
End If
PositiveOrNegative = "Negative"
End Function

Sub TestFunction()
   Debug.Print (PositiveOrNegative(5))   
End Sub

Production :

Positive

Article connexe - VBA Function