Concepts de programmation

Sur cette page

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

Qualités d'un bon programme

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:

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:

On trouve un exemple de chacun (sauf la création de classe) dans la page Introduction du présent tutoriel.

Composition d'un module VBA

Une module VBA se compose des trois éléments suivants:

  1. L'instruction Option Explicit, qui force la déclaration explicite des variables.
  2. Des déclarations de variables de niveau module.
  3. 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 Sub

Où:

  • 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 Function

Où:

  • 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.

Sub ou Function?

Une procédure Sub sans paramètre obligatoire:

Une procédure Sub avec paramètre obligatoire:

Une procédure Function:

Composantes d'une procédure

Une procédure VBA comporte un nom, de la documentation, des objets, des instructions et une gestion des erreurs:

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

Documentation

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é.

 

Sommaire

Dans cette section, nous avons vu

Suite: VBE: l'éditeur VBA