Concepts de programmation
Qualités d'un bon programme
Types de programme
Composition d'un module VBA
Sub ou Function?
Composantes d'une procédure
Documentation
Sommaire
VBE: l'éditeur VBA
Déclarations, types et références
Expressions et assignations
Tests et branchements
Boucles
Gestion d'erreur
Collections et tableaux
Dialogues et formulaires
Objets et événements Excel
Conseils de programmation
Liste d'instructions
Un programme informatique est un peu comme une recette de cuisine. Il requiert
des ingrédients (données, variables, objets), contient une série de
manipulations à faire avec ces ingrédients (instructions VBA) en utilisant des
outils plus ou moins performants (VBE, Excel, Windows) et donne un résultat quelquefois plus
intéressant que les ingrédients pris séparément.
De plus, l'ordre dans lequel les opérations sont faites est très important.
Il y a de bonnes recettes, et de moins bonnes recettes. Il en est de même pour les
programmes.
Un bon programme:
- Fait toujours ce qui est prévu.
- Ne fait jamais ce qui n'est pas prévu.
- Est facile à utiliser.
- Est facile (peu coûteux) à modifier.
Très peu de programmes disponibles sur le marché actuel répondent à ces
critères.
Lorsque vous aurez terminé l'écriture d'un programme, demandez-vous s'il répond
aux quatre critères de façon satisfaisante pour l'usage prévu.
Une suggestion dès le départ: gardez vos programmes simples.
Types de programme
Du point de vue de l'utilisation (et donc de la programmation), un programme VBA
Excel peut être:
- L'automatisation d'une série d'opérations qu'on peut faire manuellement
dans Excel: la procédure SUB.
- Une fonction Excel que les programmeurs Microsoft n'ont pas prévue: la procédure
Function (fonction personnalisée).
- Une boîte de dialogue qui permet des échanges avec l'utilisateur
autrement que par les moyens prévus par les programmeurs Microsoft: le
formulaire.
- La création d'une classe.
On trouve un exemple de chacun (sauf la création de classe) dans la page
Introduction du présent tutoriel.
Une module VBA se compose des trois éléments
suivants:
- L'instruction Option Explicit, qui force la déclaration explicite des
variables.
- Des déclarations de
variables de niveau module.
- Une ou des procédures (programmes):
Une procédure doit toujours être encadrée par les instructions Sub...End Sub ou
Function ... End Function.
[Private | Public] [Static] Sub nom
[(liste de paramètres)]
[instructions]
[Exit Sub]
[instructions]
End SubOù:
- Public Indique que la procédure Sub est accessible à
toutes les autres procédures dans l'ensemble des modules. Valeur par
défaut.
- Private Indique que la procédure Sub n'est accessible
qu'aux autres procédures du module dans lequel elle a été déclarée.
- Static Indique que les valeurs des variables locales de la procédure Sub sont conservées entre les appels.En
l'absence de Static, les variables sont réinitialisées à
chaque exécution de la procédure. Static est très rarement
nécessaire.
- nom Nom de la procédure Sub. Doit especter les
règles des noms de variables.
- Liste de paramètres Liste de variables représentant des
paramètres qui sont passés à la procédure Sub lorsqu'elle est
appelée. Les variables multiples sont séparées par des virgules.
Chaque paramètre doit être déclaré dans la forme suivante:
[Optional] [ByVal | ByRef] [ParamArray] nom[(
)] [As type] [=défaut]
où:
- Optional indique que ce paramètre n'est pas
obligatoire. S'il est utilisé, tous les paramètres suivants
doivent l'être aussi.
- ByRef indique que si la valeur du paramètre est
modifiée dans la procédure, elle le sera aussi dans la procédure
appelante. ATTENTION, en VBA ByrRef est la valeur par défaut,
au contraire de la plupart des langages de programmation.
- ByVal indique que si la valeur du paramètre est
modifiée dans la procédure, cela n'affecte pas sa valeur dans la
procédure appelante.
- ParamArray Indique que le paramètre suivant est un tableau. ParamArray
ne peut précéder que le dernier paramètre de la liste.
- Nom nom du paramètre, doit respecter les
règles des noms de variables.
- type type
du paramètre.
- défaut constante initialisant un paramètre optionnel
(Optional)
- instructions Tout groupe d'instructions à exécuter dans
la procédure Sub.
- Exit Sub Instruction VBA permettant de terminer
l'exécution de la procédure avant la fin.
- End Sub Instruction délimitant la fin de la procédure
Sub.
|
[Private | Public] [Static] Function nom
[(liste de paramètres)] [AS type]
[instructions]
[nom= expression]
[Exit Function]
[instructions]
[nom= expression]
End FunctionOù:
- Public Indique que la procédure Function est accessible à
toutes les autres procédures dans l'ensemble des modules.
- Private Indique que la procédure Function n'est
accessible qu'à d'autres procédures du module dans lequel elle a été
déclarée.
- Static Indique que les valeurs des variables locales de la procédure Sub sont conservées entre les appels.En
l'absence de Static, les variables sont réinitialisées à
chaque exécution de la procédure. Static est très rarement
nécessaire.
- nom Nom de la procédure Function. Respecte les
règles des noms de variables.
- Liste de paramètres Liste de variables représentant des
paramètres qui sont passés à la procédure Sub lorsqu'elle est
appelée. Les variables multiples sont séparées par des virgules.
Chaque paramètre doit être déclaré dans la forme suivante:
[Optional] [ByVal | ByRef] [ParamArray] nom[(
)] [As type] [=défaut]
où:
- Optional indique que ce paramètre n'est pas
obligatoire. S'il est utilisé, tous les paramètres suivants
doivent l'être aussi.
- ByRef indique que si la valeur du paramètre est
modifiée dans la procédure, elle le sera aussi dans la procédure
appelante. ATTENTION, en VBA ByRef est la valeur par défaut,
au contraire de la plupart des langages de programmation.
- ByVal indique que si la valeur du paramètre est
modifiée dans la procédure, cela n'affecte pas sa valeur dans la
procédure appelante.
- ParamArray Indique que le paramètre suivant est un tableau. ParamArray
ne peut précéder que le dernier paramètre de la liste.
- Nom nom du paramètre, respectant les
règles des noms de variables.
- type type
du paramètre.
- défaut constante initialisant un paramètre optionnel
(Optional)
- Type Type de la
valeur retournée par la procédure Function.
- instructions Tout groupe d'instructions à exécuter dans
la procédure Function
- expression Valeur retournée par la procédure
Function.
- Exit
Function Instruction VBA permettant de terminer
l'exécution de la procédure avant la fin.
- End
Function Instruction délimitant la fin de la procédure
Function.
|
Une procédure Sub sans paramètre obligatoire:
- Ne retourne pas de valeur.
- Peut modifier le contenu de la feuille Excel.
- Peut être associée à un objet (bouton, graphique) dans la feuille Excel
et exécutée lorsque l'objet est cliqué.
Une procédure Sub avec paramètre obligatoire:
- Ne retourne pas de valeur.
- Peut être exécutée lorsqu'un événement Excel se produit (ouverture,
fermeture, modification de cellule...).
Une procédure Function:
- Retourne une valeur.
- Ne doit pas modifier la feuille de travail.
- Ne doit pas afficher de boîte de dialogue.
- Ne peut être utilisée que dans une formule Excel ou une procédure VBA.
Une procédure VBA comporte un nom, de la documentation, des objets, des
instructions et une gestion des erreurs:
- Un nom: Assignez toujours un nom qui décrit la nature de votre
procédure. Ça la rend plus facile à modifier.
- De la documentation: au minimum, indiquez dès la 2e ligne le nom de
l'auteur et dès la 3e ligne le but de la procédure. N'hésitez pas à la parsemer
de commentaires qui vous permettront de mieux comprendre ce
qu'elle fait (et comment elle le fait) quand vous voudrez la modifier dans un ou dix ans.
- Des objets: une recette contient des ingrédients, une procédure contient
des objets. Ces objets peuvent être:
- Des cellules Excel (leur contenu. leur couleur, leur format, ...).
- D'autres objets apparaissant à l'écran (graphique, feuille, onglet,
imprimante, ...).
- Des valeurs variables (compteurs, accumulateurs, ...).
- Des valeurs constantes (Pi, code de couleur, ...).
- Des instructions:
- Assignation, conversion.
- Action.
- Contrôle.
- Une gestion des erreurs: des instructions à exécuter lors que
l'inattendu se produit.
Une boîte de dialogue contient des contrôles. Ce sont les
objets de formulaire qui apparaissent à l'écran (boutons, zones de
texte, cases, ...).
Pour développer une procédure, on utilise un environnement de développement.
Cet environnement est
le même pour tous les programmes de la suite Office:
VBE (Visual Basic
Editor).
Le code d'une procédure VBA est enregistré dans un classeur, dans une feuille,
dans un module ou dans un
formulaire. Le tout est enregistré à l'intérieur du
document Office. Depuis Office 2007, les noms des documents contenant du code VBA
doivent avoir une extension spécifique (.xlsm au lieu de .xlsx).
Pour sauvegarder un programme VBA, il faut sauvegarder le
fichier Excel qui le contient.
Voir le document
Enregistrer
un classeur Excel contenant une macro VBA
On documente une procédure VBA à l'aide de commentaires. Chaque commentaire
doit être précédé d'une apostrophe. Tout ce qui est à droite d'une apostrophe
sera ignoré lors de l'exécution de la procédure.
S'il y a du code VBA à gauche de la première apostrophe d'une ligne, il sera
exécuté.
VBE rend en vert les parties identifiées comme commentaires.
Ci-dessous un exemple de procédure Sub documentée:
La présentation du code contribue aussi à la documentation.
Remarquez l'utilisation de lignes vides et de tabulations (retraits) pour marquer les
différents blocs de code.
L'instruction For est alignée avec le
Next correspondant et le contenu de la boucle
est décalé.
Il en est de même avec l'instruction If et son
End If. Le contenu est aussi décalé.
Dans cette section, nous avons vu
- Ce qui permet de mesurer la qualité d'un programme VBA
- La différence entre Sub et Function,
- Les composantes d'un programme VBA
- Comment documenter un programme VBA
Suite: VBE: l'éditeur VBA