Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

Création de fonctions, procédures et types personnalisés

Fonctions, procédures et types personnalisées

Fonction simple

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.

Sortie d'une fonction

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.

Préservation des variables

Si on utilise le mot-clé Static avant une fonction, toutes les variables déclarées dans ce module seront des variables Static

Paramètres optionnels

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

Nombre d'arguments variables

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

Utilisation optionnelle de Call

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