Procédures, fonctions et macros
Objectifs du chapitre
Avant d’aller plus loin dans cet ouvrage, vous devez avoir quelques notions de vocabulaire pour comprendre de quoi il sera question dans les chapitres suivants. Ce chapitre vise à vous permettre de vous y retrouver, et savoir de quoi il est question plus facilement.
En programmation VBA, vous pourrez utiliser plusieurs mots pour définir les programmes que vous rédigerez. Vous verrez pêle-mêle les mots procédure, fonction et macro concernant le nom de vos programmes. Vous y lirez également la notion de portée et enfin seront abordés les paramètres, des données fournies en entrée de vos programmes.
Procédures, fonctions et macros
Les programmes que vous créez passeront par deux types de blocs d’instructions, les procédures ou les fonctions. Le nom macro est celui qui est entré dans le vocabulaire des développeurs. Vous découvrirez ce qui se cache derrière ce mot.
Les procédures
Les procédures que vous avez pu voir dans les chapitres précédents sont des blocs d’instructions qui pourront s’exécuter, par exemple lorsque vous colorez une cellule en jaune. Les procédures ne retournent aucune valeur, contrairement aux fonctions. Ce paragraphe va vous permettre de savoir comment les déclarer et les utiliser.
Déclaration d’une procédure
De la même façon que pour une variable, vous devez déclarer une procédure avant de pouvoir l’utiliser. Elles sont définies par le mot-clé Sub et se terminent par l’instruction End Sub.
Entre ces deux lignes, vous coderez vos instructions qui seront exécutées lorsque la procédure sera appelée depuis un autre endroit du programme.
La syntaxe de déclaration d’une procédure est la suivante :
[Private ou Public] Sub NomDeVotreProcedure([param_1
As TypeDeParametre],...)
Instructions
End Sub
Le nom de la procédure doit respecter la nomenclature de nommage (voir chapitre Les variables, les constantes), et être le plus explicite possible pour rendre son usage le plus facile, comme dans l’exemple suivant.
Public Sub AjoutNumeroDevisEnB2(iNumeroDevis As Integer)
'cette procédure affecte la valeur de la variable iNumero
à la cellule B2
Range("B2").Value = iNumeroDevis
End Sub
Exemple 1 : déclaration d’une procédure
Le code de l’exemple...
Public ou Private, tout est question de portée
Avant les termes Sub et Function, vous pouvez voir apparaître les mots-clés Public ou Private. L’usage du mot-clé permet de définir la portée du programme sur l’ensemble de votre application.
Dans les sections suivantes, dans un effort de lisibilité, le terme variable sera utilisé, mais les informations sont identiques pour les constantes. De la même façon, le terme procédure sera utilisé, mais les informations correspondantes sont également vraies pour les fonctions.
La notion de portée
Lorsque vous déclarez et utilisez des variables dans un programme, la question de l’accessibilité de ces variables dans l’ensemble du programme se pose. Selon la façon dont vous définissez vos variables, elles seront accessibles seulement depuis certains points de votre programme.
Portée des variables
Pour les variables que vous utilisez, il existe trois niveaux d’accès possibles en VBA :
-
Au niveau de la procédure : lorsque les variables sont déclarées à l’intérieur d’une procédure, elles ne sont utilisables que par les instructions de la procédure. Les variables n’existent pas « en dehors » des procédures dans lesquelles elles sont déclarées. Le mot-clé de définition est Dim, mais vous pouvez également utiliser Static.
Sub MacroExemple()
Dim bOK As Boolean
Static strExemple...
Les paramètres
Lorsque vous déclarez une procédure ou une fonction, elle peut nécessiter des informations qui lui seront utiles (par exemple pour calculer l’âge d’une personne, il faut sa date de naissance). Ces informations sont donc appelées des paramètres ; cette section vous apporte les informations dont vous avez besoin pour les comprendre et les maîtriser.
Syntaxe générale
Les paramètres apparaissent lors de la déclaration d’une procédure ou d’une fonction (et pas une macro qui, par définition, n’a pas de paramètre).
La syntaxe générale des paramètres est la suivante :
Sub ExempleDeProcedure ([ByRef ou ByVal] NomParametre1
As TypeDuParametre1, NomParametre2 As TypeDuParametre2)
Instructions
End Sub
Exemple 11 : déclaration d’une procédure et de ses paramètres.
Les paramètres sont déclarés à l’intérieur des parenthèses qui suivent le nom de la procédure ou la fonction. Dans le cas où plusieurs paramètres sont nécessaires, ils sont séparés par une virgule.
Le nom des paramètres suit la même nomenclature que celle des variables. Ils peuvent être précédés des mots-clés ByRef ou ByVal, évoqués dans le paragraphe suivant.
Lorsque le paramètre est déclaré de la façon suivante dans une procédure :
Sub ExempleProcedure (ByVal NomDuParametre As TypeDuParametre)
Instructions
End Sub
Exemple 12 : déclaration d’un paramètre obligatoire
Il est obligatoire pour le programme qui appelle la fonction ou procédure de fournir une valeur à ce paramètre. Il est impossible de déterminer l’âge exact d’une personne sans sa date de naissance.
Différences entre ByRef ou ByVal
Lorsque les paramètres sont fournis à la procédure, vous avez la possibilité de permettre à la procédure de modifier la variable elle-même, ou de simplement lui fournir sa valeur.
Passage par référence ByRef
En utilisant le mot-clé ByRef, la fonction ou la procédure à laquelle le paramètre est passé reçoit « réellement » la variable et, si celle-ci est modifiée à l’intérieur de la fonction ou de la procédure, sa valeur sera également modifiée en retour de la procédure appelante. Ce mode de passage est celui par défaut.
Pour faire un parallèle avec la « vraie vie », si vous fournissez un document original à un collègue qui le déchire, votre document d’origine...
Exercices
Écriture de macros
Macro privée
Écrivez une macro MacroPrivee, de portée privée.
Cette macro affichera à l’utilisateur la valeur 42.
Exécutez la macro MacroPrivee (42).
Macro publique
Écrivez une macro MacroPublique, de portée publique.
Cette macro fera appel à la macro MacroPrivee créée précédemment.
Exécutez la macro MacroPublique (42).
Écriture de procédures
Procédure d’affichage
Écrivez une procédure AfficheDouble de portée publique, qui prend en paramètre une valeur numérique entier long, nommée Valeur.
Cette procédure affichera le double de la valeur passée en paramètre.
Créez une macro ProcedureAffichage qui exécutera la procédure AfficheDouble, en lui passant la valeur 15.
Exécutez la macro ProcedureAffichage (30).
Partage de variables publiques
Créez une variable de type Date, nommée DatePartagee de portée publique.
Cette déclaration de variable sera placée en haut du module.
Écrivez une procédure, nommée ProcedureDateDebut de portée publique qui prendra en paramètre une date nommée DateDebut.
Cette procédure mettra à jour la variable DatePartagee en lui affectant la valeur...