Jusqu’ici, toutes les procédures que nous avons utilisées étaient des procédures événementielles : leur nom était régi par des règles strictes, qui spécifiaient le déclenchement de leur exécution. Mais, nous l’avons dit en introduction, , VB permet comme tout langage de créer des procédures traditionnelles, baptisées selon votre bon vouloir. Leur exécution sera alors déclenchée non par une action de l’utilisateur, mais par une instruction de votre programme. C’est donc l’équivalent VB du Gosub cher aux cœurs de certains (d'ailleurs, les nostalgiques intégristes peuvent toujours utiliser Gosub, qui est une instruction reconnue en VB).
Je rappelle que de tels appels peuvent comporter des paramètres, ou non, cela ne change rien de fondamental à l’affaire.
Un cas banal d’utilisation de cette technique est celui de l’initialisation d’une Form. Pour que cette Form soit propre, on veut que toutes les zones de textes soient vierges. Pour peu qu’on ait besoin de procéder à l’initialisation à plusieurs moments différents de notre application, au lieu de répéter à chaque fois les mêmes codes, on va créer une procédure Init() qui comportera les lignes de code nécessaires :
Private Sub Init()
Nom.Text = ""
Prénom.Text = ""
Etc.
End Sub
Pour appeler cette procédure, il suffira ensuite de passer l’instruction suivante :
Call Init
Et le tour est joué. Quelques éléments supplémentaires toutefois :
Attention à la portée des procédures. Une procédure Private n’est disponible que si l’appel se situe dans la Form qui la contient. Pour qu’une procédure puisse être appelée de n’importe quelle Form, il faut qu’elle porte comme nom Public. Dans ce cas, lors de l'appel, la procédure désignée doit être désignée comme faisant partie d'une autre Form. Si l'on souhaite appeler dans Form1 une procédure appelée Truc est qui est déclarée dans Form2, il faudra écrire :
Call Form2.Truc
Au passage, j'en profite pour signaler que cette règle vaut pour désigner n'importe quel objet qui ne se trouve pas sur la Form à partir de laquelle on le désigne.
Si l'on veut passer des paramètres à une procédure, on aura recours à deux instructions : ByVal pour le passage par valeur(paramètre en entrée), et ByRef pour le passage par référence. La déclaration d'une procédure Toto avec un paramètre numérique X en entrée et un paramètre Y en sortie donnera ainsi :
Private Sub Toto(ByVal X as Integer, ByRef Y as Integer)
Pour déclarer une Fonction, on aura recours aux instructions Function et End Function. Voici une fonction pas très utile, qui retourne bêtement le carré d'un nombre :
Private Function Carre(X as Double)
Carre = X * X
End Function