Fonctions, procédures et types personnalisées
Function Fois2 (Param) As Variant
Fois2 = Param * 2
End Function
Nous appelons cette fonction depuis n'importe ou, par exemple depuis l'événement CLICK d'un bouton de commande BTCEssai :
Sub BTCEssai_Click ()
VariableQuelconque = Fois2(VariableQuelconque)
End Sub
Si on fait précéder SUB ou FUNCTION de STATIC, les valeurs des variables contenues dedans sont conservées
Si c'est le mot PRIVATE qui précède, la fonction ou procédure ne pourra être appelée que par une autre fonction ou procédure du module courant.
Lorsqu'on attribue au sein d'une fonction sa valeur de retour, la fonction ne se termine pas à ce moment-là, mais elle continue à fonctionner jusqu'a l'Exit Function. Ce qui fait qu'on peut successivement lui attribuer différentes valeurs, la valeur renvoyée sera la dernière à être lue.
Fonctions et procédures attachées à un formulaire
Si je crois la doc, une procédure ou fonction existant dans un formulaire, non précédée du mot clé Private devrait être appelable depuis un autre formulaire. Or il n'en est rien. Même si les 2 formulaires sont ouverts, Access accepte bien de compiler, mais lors de l'exécution depuis le formulaire A, il refuse obsinément de se brancher sur une function du formulaire B, même s'il est ouvert, et même s'il y a le mot clé Public devant.
Si on utilise le mot-clé Static avant une fonction, toutes les variables déclarées dans ce module seront des variables Static
Les paramètres optionnels doivent se trouver à la fin de la fonction
Function Ajouter (Chiffre1, Chiffre2, Optional Chiffre3)
If ismissing(Chiffre3) then
Ajouter = Chiffre1 + Chiffre2
Else
Ajouter = Chiffre1 + chiffre2 + Chiffre3)
End function
Il est possible de créer une fonction qui accepte un nombre indétermminé de paramètres. Admettons la fonction Concat qui lie entre elles les différentes chaînes de caractères qui sont passées en paramètres, autant qu'elles soient :
Function Concat(ParamArray ChainesDeCaracteres() as variant)
Dim Element as string, Temp as string
Temp = " "
For Each Element in ChainesDeCaracteres
Temp = Temp + Element
Next
Concat = Temp
End Function
ATTENTION : Il ne faut pas utiliser Optional, ByRef et ByVal avec des paramètres dont le nombre est indéfini
Pour appeler une procédure SUB qui existe déjà, sans paramètre, on peut marquer : CALL NomProcedure (et ne pas mettre de parenthèses vides après)
Types des paramètres et retours de fonctions
Par défaut, une fonction accepte un ou plusieurs paramètres de type Variant, et renvoie un résultat de type variant. Pour forcer un autre type de retour :
Exemple :
Function NomFonction (Param AS TYPEVARIABLE) AS TYPEVARIABLE
Définition de Types de données personnalisés
Il est possible de créer, comme en Pascal, des types structurés de données.
La définition du type doit obligatoirement se faire dans la partie déclarative d'un module n'appartenant pas à un formulaire
Voici un exemple de déclaration d'un type TypeClient, composé de 2 éléments (Age et Nom)
Type TypeClient
Age As Integer
Nom As String * 30
End Type
A partir de maintenant, on peut, même dans un formulaire, déclarer des variables de type TypeClient
Exemple simple : (Une seule variable)
Dim Client As TypeClient
Client.Age = 20
Client.Nom = "Defawes"
MsgBox Client.Nom ' Renvoie Defawes
Exemple complexe : (Un ensemble de variables en tableau : 10 clients)
Dim Client(1 To 10) As TypeClient
Client(1).Age = 20
Client(1).Nom = "Defawes"
Client(5).Age = 22
Client(7).Nom = "Pochon"
MsgBox Client(1).Age ' Renvoie 20
MsgBox Client(7).Nom ' Renvoie Pochon