Fonction VBA - Appel, valeur de retour et paramètres

Ce tutoriel vous apprendra à créer et utiliser des fonctions avec et sans paramètres en VBA

VBA contient une grande quantité de fonctions intégrées que vous pouvez utiliser, mais vous pouvez également écrire les vôtres. Lorsque vous écrivez du code en VBA, vous pouvez l'écrire dans une sous-procédure ou une procédure de fonction. Une procédure de fonction est capable de renvoyer une valeur à votre code. Ceci est extrêmement utile si vous souhaitez que VBA effectue une tâche pour renvoyer un résultat. Les fonctions VBA peuvent également être appelées depuis Excel, tout comme les fonctions Excel intégrées d'Excel.

Créer une fonction sans arguments

Pour créer une fonction, vous devez définir la fonction en lui donnant un nom. La fonction peut alors être définie comme un type de données indiquant le type de données que vous souhaitez que la fonction renvoie.

Vous pouvez créer une fonction qui renvoie une valeur statique à chaque fois qu'elle est appelée - un peu comme une constante.

123 Fonction GetValue() en tant qu'entierObtenirValeur = 50Fonction de fin

Si vous deviez exécuter la fonction, la fonction renverrait toujours la valeur 50.

Vous pouvez également créer des fonctions qui font référence à des objets dans VBA, mais vous devez utiliser le mot-clé Set pour renvoyer la valeur de la fonction.

123 Fonction GetRange() en tant que plageDéfinir GetRange = Range("A1:G4")Fonction de fin

Si vous deviez utiliser la fonction ci-dessus dans votre code VBA, la fonction renverrait toujours la plage de cellules A1 à G4 dans la feuille sur laquelle vous travaillez.

Appel d'une fonction à partir d'une sous-procédure

Une fois que vous avez créé une fonction, vous pouvez l'appeler de n'importe où ailleurs dans votre code en utilisant une sous-procédure pour appeler la fonction.

La valeur de 50 serait toujours renvoyée.

Vous pouvez également appeler la fonction GetRange à partir d'une sous-procédure.

Dans l'exemple ci-dessus, la fonction GetRange est appelée par la procédure Sub pour mettre en gras les cellules de l'objet plage.

Création de fonctions

Argument unique

Vous pouvez également affecter un ou plusieurs paramètres à votre fonction. Ces paramètres peuvent être appelés arguments.

123 Fonction ConvertKilosToPounds (dblKilo en tant que Double) en tant que DoubleConvertKiloToPounds = dblKilo*2.2Fonction de fin

Nous pouvons ensuite appeler la fonction ci-dessus à partir d'une sous-procédure afin de déterminer le nombre de livres d'un nombre spécifique de kilos.

Une fonction peut être appelée à partir de plusieurs procédures dans votre code VBA si nécessaire. C'est très utile car cela vous évite d'avoir à écrire le même code encore et encore. Il vous permet également de diviser de longues procédures en petites fonctions gérables.

Dans l'exemple ci-dessus, nous avons 2 procédures - chacune d'entre elles utilise la fonction pour calculer la valeur en livres des kilos qui leur ont été transmis dans le dblKilo Argument de la fonction.

Arguments multiples

Vous pouvez créer une fonction avec plusieurs arguments et transmettre les valeurs à la fonction au moyen d'une sous-procédure.

123 Fonction CalculateDayDiff(Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Fonction de fin

On peut alors appeler la fonction pour calculer le nombre de jours entre 2 dates.

Arguments facultatifs

Vous pouvez également passer des arguments optionnels à une fonction. En d'autres termes, vous pouvez parfois avoir besoin de l'argument, et parfois non, selon le code avec lequel vous utilisez la fonction .

123456 Fonction CalculateDayDiff(Date1 as Date, optionnel Date2 as Date) as Double'vérifiez la deuxième date et si ce n'est pas le cas, rendez Date2 égal à la date d'aujourd'hui.Si Date2=0 alors Date2 = Date'calculer la différenceCalculateDayDiff = Date2-Date1Fonction de fin

Valeur d'argument par défaut

Vous pouvez également définir la valeur par défaut des arguments facultatifs lorsque vous créez la fonction afin que si l'utilisateur omet l'argument, la valeur que vous avez définie par défaut soit utilisée à la place.

1234 Fonction CalculateDayDiff(Date1 as Date, optionnel Date2 as Date="06/02/2020") as Double'calculer la différenceCalculateDayDiff = Date2-Date1Fonction de fin

ByVal et ByRef

Lorsque vous passez des valeurs à une fonction, vous pouvez utiliser le ParVal ou ParRéf mots clés. Si vous omettez l'un de ces éléments, le ParRéf est utilisé par défaut.

ParVal signifie que vous passez une copie de la variable à la fonction, alors que ParRéf signifie que vous faites référence à la valeur d'origine de la variable. Lorsque vous passez une copie de la variable (ParVal), la valeur d'origine de la variable est NE PAS changé, mais lorsque vous référencez la variable, la valeur d'origine de la variable est modifiée par la fonction.

1234 Fonction GetValue(ByRef intA As Integer) As IntegerintA = intA * 4ObtenirValeur = intAFonction de fin

Dans la fonction ci-dessus, ByRef pourrait être omis et la fonction fonctionnerait de la même manière.

1234 Fonction GetValue(intA As Integer) As IntegerintA = intA * 4ObtenirValeur = intAFonction de fin

Pour appeler cette fonction, nous pouvons exécuter une sous-procédure.

123456789 Valeurs de sous-test()Dim intVal en tant qu'entier'remplir la variable avec la valeur 10intVal = 10'exécute la fonction GetValue et affiche la valeur dans la fenêtre immédiateDebug.Print GetValue(intVal)'afficher la valeur de la variable intVal dans la fenêtre immédiateDebug.Print intValFin du sous-marin

Notez que les fenêtres de débogage affichent la valeur 40 les deux fois. Lorsque vous passez la variable IntVal à la fonction - la valeur de 10 est transmise à la fonction et multipliée par 4. L'utilisation du mot clé ByRef (ou son omission totale) MODIFIE la valeur de la variable IntVal. Cela s'affiche lorsque vous affichez d'abord le résultat de la fonction dans la fenêtre immédiate (40), puis la valeur de la variable IntVal dans la fenêtre de débogage (également 40).

Si nous ne voulons PAS changer la valeur de la variable d'origine, nous devons utiliser ByVal dans la fonction.

1234 Fonction GetValue(ByVal intA As Integer) As IntegerintA = intA * 4ObtenirValeur = intAFonction de fin

Maintenant, si nous appelons la fonction depuis une sous-procédure, la valeur de la variable IntVal restera à 10.

Fonction de sortie

Si vous créez une fonction qui teste une certaine condition et qu'une fois la condition vérifiée, vous souhaitez renvoyer la valeur de la fonction, vous devrez peut-être ajouter une instruction Exit Function dans votre Function afin de quitter la fonction avant vous avez parcouru tout le code de cette fonction.

12345678910111213 Fonction FindNumber (strSearch As String) As IntegerDiminuer en tant qu'entier'boucle à travers chaque lettre de la chaînePour i = 1 To Len(strSearch)'si la lettre est numérique, renvoie la valeur à la fonctionSi IsNumeric(Mid(strSearch, i, 1)) ThenFindNumber= Mid(strSearch, i, 1)'puis quitter la fonctionFonction de sortieFin siProchainFindNumber= 0Fonction de fin

La fonction ci-dessus parcourt la chaîne fournie jusqu'à ce qu'elle trouve un nombre, puis renvoie ce nombre à partir de la chaîne. Il ne trouvera que le premier nombre de la chaîne car il Sortir la fonction.

La fonction ci-dessus peut être appelée par une sous-routine telle que celle ci-dessous.

1234567 Sous-CheckForNumber()Dim NumIs en tant qu'entier'passe une chaîne de texte à la fonction de recherche de nombreNumIs = FindNumber ("Étage supérieur, 8 Oak Lane, Texas")'afficher le résultat dans la fenêtre immédiateDebug.Print NumIsFin du sous-marin

Utilisation d'une fonction à partir d'une feuille Excel

En plus d'appeler une fonction à partir de votre code VBA à l'aide d'une sous-procédure, vous pouvez également appeler la fonction à partir de votre feuille Excel. Les fonctions que vous avez créées doivent par défaut apparaître dans votre liste de fonctions dans la section Défini par l'utilisateur de la liste de fonctions.

Clique sur le fx pour afficher la boîte de dialogue Insérer une fonction.

Sélectionner Défini par l'utilisateur de la liste des catégories

Sélectionnez la fonction dont vous avez besoin parmi les Fonctions définies par l'utilisateur (FDU).

Alternativement, lorsque vous commencez à écrire votre fonction dans Excel, la fonction doit apparaître dans la liste déroulante des fonctions.

Si vous ne souhaitez pas que la fonction soit disponible dans une feuille Excel, vous devez mettre le mot Privé devant le mot Fonction lorsque vous créez la fonction dans votre code VBA.

123 Fonction privée CalculateDayDiff(Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Fonction de fin

Il n'apparaîtra plus dans la liste déroulante affichant les fonctions Excel disponibles.

Chose intéressante, cependant, vous pouvez toujours utiliser la fonction - elle n'apparaîtra tout simplement pas dans la liste lorsque vous la chercherez !

Si vous avez déclaré le deuxième argument comme Optionnel, vous pouvez l'omettre dans la feuille Excel ainsi que dans le code VBA.

Vous pouvez également utiliser la fonction a que vous avez créée sans arguments dans votre feuille Excel.

wave wave wave wave wave