Une procédure Sub est une macro au sens Excel. Elle exécute des actions (instructions), peut recevoir des arguments, mais ne retourne pas de valeur. On voit ces procédures dans la fenêtre Macros (ALT + F8).
Function
Une Function, à la différence d’un Sub, peut retourner une valeur, sur le même principe que les fonctions Excel : la fonction SOMME retourne une… somme. Par exemple :
c = Left("maison", 3)
retourne "mai" (les 3 caractères à gauche de maison) et stocke cette valeur dans la variable c. Left est une fonction intrinsèque (intégrée à Excel). Vous pouvez créer vos propres fonctions :
Function MaFonction1(Argument1, Argument2…)
MaFonction1 = Argument1 + Argument2
End Function
Arguments nommés
La syntaxe suivante…
ActiveWorkbook.Close True
… indique de fermer en classeur (méthode Close) en enregistrant les modifications (argument SaveChanges sur True).
En utilisant cette autre syntaxe…
ActiveWorkbook.Close SaveChanges:=True
… on obtient une ligne de code plus facilement lisible.
Les arguments nommés permettent également de les mettre dans n’importe quel ordre et d’en omettre certains. Par exemple, pour ouvrir un classeur en lecture seule, on peut écrire :
Feuil1, Feuil2… : module de feuille. Le code de ce module ne peut être appelé que depuis la feuille.
ThisWorkbook : module de classeur. Le code de ce module ne peut être appelé que depuis le classeur
Modules : module. Le code de ce module peut être appelé de n’importe où : feuille, classeur, autre module.
Options d’un module
En haut de chaque module, vous devez écrire (si vous n’avez coché l’option dans Visual Basic Editor) :
Option Explicit
De cette façon, vous serez obligé de déclarer toutes vos variables, ce qui est un moyen de sécuriser son code contre les erreurs.
Notez que vous avez aussi intérêt à ajouter l’instruction suivante :
Option Compare Text
Également à placer en haut de chaque module, elle facilite les comparaisons de chaînes : les lettres en majuscules seront égales aux mêmes lettres en minuscule (data et Data seront considérés comme identiques).