Éléments du langage de programmation


Note importante

Utilisez ce document comme bon vous semble; mais soyez prudent(e)s, et consultez aussi les normes acceptées de programmation VB dans ce cours.


Introduction

Comme tout langage de haut niveau, les programmes écrits en VB doivent respecter des règles. Ce langage comprend tout d'abord des objets possédant leurs propriétés et méthodes auxquelles viennent se greffer les instructions spécifiques du Basic. La syntaxe de VB permet d'écrire des programmes structurés et modulaires. Ce chapitre a pour objet de faire un survol rapide des différents groupes d'instructions composant le langage hôte VB. Vous verrez que ce langage possède de grandes similitudes avec d'autres dialectes du Basic.

Commentaires

Les commentaires sont inscrits directement dans le code pour en faciliter la lecture. Ils sont ignorés par le compilateur et n'affectent pas le fonctionnement du programme. Un commentaire est précédé d'une apostrophe («'») ou du mot réservé «Rem».

Il est conseillé d'ajouter des commentaires à vos programmes, en particulier dans les sections plus complexes. Cela permettra de mieux comprendre le code et surtout de pouvoir le réutiliser efficacement.

Types de données, variables, constantes

Les variables de VB doivent avoir un type. Vous pouvez déclarer ce type de façon explicite ou laisser le soin à VB de le définir.

Chaque variable a un nom qui lui est propre, d'une longueur maximale de 256 caractères, commençant par une lettre et n'étant pas identique aux mots réservés du langage.

Les constantes sont initialisées avec une valeur qui ne varie pas durant l'exécution du programme. Il y a les constantes "systèmes" appartenant à VB, et celles définies par l'utilisateur.

Les types de données fondamentaux

Les entiers (Integer), réels (Real), chiffres monétaires (Currency) et les chaînes de caractères (String) sont géré(e)s dans des variables de types biens définis. Chaque type peut couvrir une échelle de valeurs qui lui est propre. Les débordements des limites de valeur causent des erreurs durant l'exécution du programme. Ces limites sont imposées par le nombre d'octets utilisés pour représenter la variable. Les entiers occupent de 2 à 4 octets, les réels de 4 à 8.

Les calculs sur les entiers sont les plus rapides, et ce type occupe moins de mémoire que d'autres. Il est donc conseillé de privilégier le type de données Integer quand la situation le permet.

Si vous utilisez une variable en omettant de la déclarer, Visual Basic lui affectera automatiquement le type Variant. L'instruction Option Explicit impose la déclaration par Dim avant toute utilisation de la variable. Le tableau ci-après montre les types de données fondamentaux et donne pour chacun d'eux la taille d'enregistrement et la plage de valeurs correspondantes.

Les déclarations sont des instructions de code non exécutables qui identifient des procédures externes, des constantes ou des variables et qui définissent leurs attributs (tels que le type de données).

Vous pouvez écrire des déclarations pour des modules de feuille, des modules standard ou des modules de classe. Pour saisir des déclarations de niveau module, placez-vous dans la section des déclarations d'un module. Pour taper des déclarations globales, ouvrez la section des déclarations d'un module et utilisez l'instruction Public pour les constantes et les variables. Vous pouvez également effectuer des déclarations à l'aide des mots clés Dim, Static et Private.

Vous avez également la possibilité de saisir des déclarations de niveau procédure. Quel que soit le niveau de code ou la technique que vous utilisez pour déclarer une variable ou une constante, vous devez respecter des règles de portée bien définies.

Le type Variant

Ce type est spécifique à Visual Basic et n'est pas reconnu par les autres dialectes Basic. Sa taille dépend des données stockées par la variable. Il gère les valeurs allant jusqu'au type Double et aux chaînes de caractères. Les conversions sont effectuées à l'interne, ce qui est agréable pour le concepteur mais prend du temps de calcul et ralentit l'exécution du programme.

La fonction VarType renvoie le type interne d'une variable Variant.

Type de données
Taille
Plage
Byte
1 octet
0 à 255
Boolean
2 octets
True ou False
Integer
2 octets
-32768 à 32767
Long
(entier long)
4 octets
-2147483648 à 2147483647
Decimal
(Ce type n'est pas disponible directement pour une déclaration de variable, mais il peut servir de sous-type à un Variant)
12 octets
+/-79228162514264337593543950335pour les nombres sans décimales. La plage de valeurs des nombres à 28 décimales est +/-7,9228162514264337593543950335. Le plus petit nombre différent de zéro est 0,0000000000000000000000000001.
Single
(valeur à virgule flottante en simple précision)
4 octets
-3,402823E38 à -1,401298E-45 pour les valeurs négatives; 1,401298E-45 à 3,402823E38 pour les valeurs positives.
Double
(valeur à virgule flottante en double précision)
8 octets
-1,79769313486232E308 à -4,94065645841247E-324 pour les valeurs négatives; 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives.
Currency
(entier à l'échelle)
8 octets
-922337203685477,5808 à 922 337 203 685 477,5807
Date
8 octets
1er janvier 100 au 31 décembre 9999.
Object
4 octets
Toute référence à des données de type Object.
String
(longueur variable)
10 octets + longueur de chaîne
De 0 à environ 2 milliards de caractères.
String
(longueur fixe)
Longueur de chaîne
De 1 à environ 65536 caractères.
Variant
(avec nombres)
16 octets
Toute valeur numérique jusqu'aux limites du type Double.
Variant
(avec caractères)
22 octets + longueur de chaîne
Même étendue que pour un String de longueur variable.
Les types de données fondamentaux

En plus des types de données fondamentaux, Visual Basic connaît les types tableaux, à une ou à plusieurs dimensions.

Le tableau de données

Les tableaux permettent de manipuler des listes ou des matrices identifiées par une seule variable. Le type d'un tableau est affecté par un mot réservé (exemples : Integer, Long, Single ou Double). Visual Basic vous permet d'utiliser deux types de tableaux : les tableaux de taille fixe, dont la taille ne change pas, et les tableaux dynamiques, dont la taille peut être modifiée au moment de l'exécution.

Les tableaux dynamiques peuvent être "redimensionnés" sans perte de données à l'aide des instructions ReDim et Preserve.

En VB, tous les tableaux doivent être déclarés. Pour cela, on utilise les instructions Dim, Private, Public, Static ou ReDim. La ou les dimensions du tableau sont ajoutées entre parenthèses au nom de la variable.

Déclaration de tableaux de taille fixe

Vous pouvez déclarer un tableau de taille fixe de trois (3) manières différentes, selon la portée que vous souhaitez conférer à votre tableau:

  • Pour créer un tableau public, déclarez-le à l'aide de l'instruction Public dans la section Déclarations d'un module.
  • Pour créer un tableau de niveau module, déclarez-le à l'aide de l'instruction Private dans la section Déclarations d'un module.
  • Pour créer un tableau local, déclarez-le à l'aide de l'instruction Private dans une procédure.
  • Par exemple, pour déclarer un tableau de 20 entiers, nous devrions utiliser l'instruction suivante: Dim Toto(19) As Integer. Par défaut, la valeur entre parenthèses indique la borne maximale de la dimension. La borne minimale par défaut est 0.

    Remarques

    Quel que soit le type de données, les tableaux nécessitent 20 octets de mémoire, auxquels viennent s'ajouter quatre (4) octets pour chaque dimension et le nombre d'octets occupés par les données proprement dites.

    L'espace occupé en mémoire par les données peut être calculé en multipliant le nombre d'éléments par la taille de chacun d'eux. Par exemple, les données stockées dans un tableau unidimensionnel constitué de quatre (4) éléments de type Integer de deux octets chacun occupent huit (8) octets. Ajoutés aux 24 octets d'espace mémoire de base, ces huit (8) octets de données portent le total à 32 octets de mémoire requis.

    Un Variant contenant un tableau nécessite 12 octets de plus qu'un tableau seul.

    L'instruction Option Base numéro, où numéro est une expression numérique valant 0 ou 1, permet de fixer la borne par défaut à 0 ou 1.

    Vous pouvez également définir la valeur de la borne inférieure directement lors de la déclaration du tableau. Par exemple, pour déclarer un tableau de 20 entiers dont la borne inférieure est fixée à 10 et la borne supérieure à 29, nous devrions utiliser l'instruction suivante: Dim Toto(10 to 29) As Integer.

    Les tableaux de Visual Basic peuvent avoir jusqu'à 60 dimensions, mais il est très rare que l'on utilise un tableau ayant plus de trois (3) dimensions.

    Structures de données

    Elles permettent d'allier des types fondamentaux variés. Elles sont déclarées dans des modules de code source et peuvent être locales ou globales.

    Définition
    
    Type StructureUtilisateur
       Élément [ (Indice) ] As TypeDonnée
       [ Élément [ (Indice) ] As TypeDonnée ]
       ...
    End Type

    Un type défini par l'utilisateur est encadré par les mots réservés Type et End Type. Il peut regrouper divers types fondamentaux. Chaque type est déclaré par la clause As, et l'usage des préfixes est interdit.

    Exemple
    
    Type StructureUtilisateur
       Entree As Integer
       Valeur As Double
       Description As String *30
       Donnee (-50 To 30) As Long
       Supplement As Variant
       Identification As String
    End Type
    ' ...
    Dim VariableEssai As StructureUtilisateur
    ' ...
    Texte1.Text = Str$(VariableEssai.Entree)
    Texte2.Text = Str$(VariableEssai.Valeur)

    Domaine de validité des variables

    Visual Basic gère les variables globales (à l'échelle du programme ou de la feuille), locales et statiques. Le domaine de validité d'une variable est défini par sa déclaration et par son emplacement.

    Les variables globales

    Si elles sont déclarées par l'instruction Public dans la partie générale d'un module de code, elles sont accessibles depuis la totalité du programme. Cela interdit l'utilisation de variables homonymiques, même si elles sont de type différent, dans un même domaine de validité.

    Les variables locales

    Elles ne sont connues que dans la procédure où elles ont été déclarées. Des variables homonymiques et de type identique déclarées dans des modules différents sont considérées comme des variables distinctes. Notez que leurs valeurs sont perdues entre les appels de leurs procédures.

    Les variables statiques

    Elles ne sont connues que dans la procédure où elles ont été déclarées par l'instruction Static. Des variables homonymiques et de type identique déclarées dans des modules différents sont considérées comme des variables distinctes. Leurs valeurs sont conservées entre les appels de leurs procédures pendant toute la durée du programme.

    Les constantes symboliques

    L'emploi de constantes symboliques est encouragé car il améliore la clarté des programmes. Par convention, on utilise des majuscules pour les noms de constantes, ce qui permet de les identifier d'un coup d'œil.

    Les constantes définies par l'utilisateur sont déclarées par l'expression suivante:

    
    [ Public ] Const NomDeLaConstante = expression

    Une instruction Const a une portée et obéit aux mêmes règles qu'une déclaration de variable:

  • pour créer une constante qui existe uniquement à l'intérieur d'une procédure, déclarez-la à l'intérieur de cette procédure;
  • pour créer une constante accessible à toutes les procédures à l'intérieur d'un module, mais à aucun code en dehors de ce module, déclarez la constante dans la section Déclarations du module;
  • pour créer une constante accessible à toute l'application, déclarez-la dans la section Déclarations d'un module standard, et placez le mot clé Public avant Const. Les constantes publiques ne peuvent être déclarées dans un module de classe ou de feuille.
  • Opérateurs arithmétiques, relationnels et logiques

    Les opérateurs arithmétiques

    Les opérateurs arithmétiques listés dans le tableau suivant se chargent des opérations de base. Les rangs de priorité doivent être pris en considération dans l'écriture de vos expressions arithmétiques. Les parenthèses permettent de modifier l'ordre d'exécution des opérateurs.

    Priorité
    Opérateur
    Description
    1
    ^
    Exposant
    2
    -
    Négation
    3
    * /
    Multiplication, Division
    4
    \
    Division entière
    5
    Mod
    Reste d'une division entière
    6
    + -
    Addition, Soustraction
    7
    & ou +
    Concaténation
    Table des opérateurs arithmétiques

    Les opérateurs relationnels

    Les opérateurs relationnels se chargent des opérations de comparaison. Ils renvoient toujours une valeur logique (vrai ou faux). Leurs principaux domaines d'application sont les structures de contrôles des programmes (tests, boucles). Notez l'absence de priorité entre les opérateurs relationnels.

    Opérateur
    Description
    =
    Égal
    >
    Supérieur à
    <
    Inférieur à
    >=
    Supérieur ou égal à
    <=
    Inférieur ou égal à
    <>
    Différent de
    Like
    Comparaison de chaînes
    Table des opérateurs relationnels

    Les opérateurs logiques

    Les opérateurs logiques fournissent le résultat d'une opération logique et d'opérations sur les champs de bits. Ils sont représentés dans le tableau suivant. Notez leur priorité.

    Priorité
    Opérateur
    Description
    1
    Not
    Négation logique
    2
    And
    ET logique
    3
    Or
    OU logique
    4
    XOr
    OU exclusif
    5
    Eqv
    Équivalence logique
    6
    Imp
    Implication logique
    7
    Is
    Comparaison de deux variables objets
    Table des opérateurs logiques

    Les tables de vérités suivantes donnent les résultats des diverses opérations logiques.


    Valeur
    Résultat
    0
    1
    1
    0
    Table de vérité de l'opérateur NOT

    Valeur 1
    Valeur 2
    Résultat
    0
    0
    0
    0
    1
    0
    1
    0
    0
    1
    1
    1
    Table de vérité de l'opérateur AND

    Valeur 1
    Valeur 2
    Résultat
    0
    0
    0
    0
    1
    1
    1
    0
    1
    1
    1
    1
    Table de vérité de l'opérateur OR

    Valeur 1
    Valeur 2
    Résultat
    0
    0
    0
    0
    1
    1
    1
    0
    1
    1
    1
    0
    Table de vérité de l'opérateur XOR

    Valeur 1
    Valeur 2
    Résultat
    0
    0
    1
    0
    1
    0
    1
    0
    0
    1
    1
    1
    Table de vérité de l'opérateur EQV

    Valeur 1
    Valeur 2
    Résultat
    0
    0
    1
    0
    1
    1
    1
    0
    0
    1
    1
    1
    Table de vérité de l'opérateur IMP

    Structures de contrôle

    Les boucles

    VB vous propose trois boucles, For ... Next, While ... Wend et Do ... Loop qui permettent de gérer le déroulement du programme à l'intérieur des procédures. Notez que la répétitive While ... Wend est considérée obsolète, et peut en tout temps être remplacée par une boucle de type Do ... Loop.

    For ... Next

    Cette instruction définit une valeur initiale, une valeur finale et un pas. Elle convient parfaitement à l'initialisation de tableaux ou de listes, ou encore à l'échange de données. Sa syntaxe est décrite ci-dessous.

    
    For Variable_compteur = Valeur_initiale To Valeur_finale [ Step Pas ]
       'instructions
       [ Exit For ]
    Next [ Variable_compteur, ... ]

    Variable_compteur est toujours un entier pour des raisons de rapidité, sauf cas particuliers.

    L'étendue du domaine Valeur_finale - Valeur_initiale est limitée par le type de données choisi pour ces deux valeurs.

    Si aucune valeur n'est définie pour le Pas, la valeur 1 est utilisée. Si le Pas est négatif, la valeur initiale doit être supérieure à la valeur finale.

    Les boucles For ... Next peuvent être imbriquées. L'instruction Exit For permet de quitter prématurément la boucle For.

    Do ... Loop

    Le critère de décision d'itération d'une boucle Do ... Loop est également une valeur logique. Par contre, il est possible de l'écrire de manière parcourue au moins une fois.

    
    Do [ {While | Until} condition ]
       'instructions
       [ Exit Do ]
    Loop [ {While | Until} condition ]

    Avec l'option While, la condition doit être vraie pour que la boucle s'exécute, tandis qu'avec l'option Until la condition doit être fausse. Si vous n'utilisez aucune de ces deux options, il vous faudra prévoir une "sortie de secours" à l'aide de l'instruction Exit Do.

    Les instructions de saut (ou de sot)

    Les instructions GoTo, GoSub, On ... GoTo et On ... GoSub sont des instructions qui nuisent à votre programme. Elles sont génératrices d'erreurs et rendent votre programme tout à fait illisible. Il est fortement conseillé de bannir ces instructions de vos programmes.

    Dans les faits, nous retrouverons l'instruction GoTo lorsque nous verrons le traitement des erreurs d'exécution.

    Les tests

    Visual Basic vous propose deux structures de test, If et Select Case, qui permettent de gérer facilement le déroulement du programme à l'intérieur des procédures.

    La structure alternative If .. Then ... Else ...

    Cette structure décisionnelle doit être utilisée selon la syntaxe suivante:

    
    If expression_relationnelle_ou_logique_1 Then
      Instruction_1
      [ .
        .
      Instruction_m ]
    [ ElseIf expression_relationnelle_ou_logique_2 Then
      Instruction_m+1
      [ .
        .
      Instruction_n ] ]
    [ ElseIf ... Then ... ]
    [ Else
      Instruction_n+1
      [ .
        .
      Instruction_o ] ]
    End If

    Ici, expression_relationnelle_ou_logique_... représente soit une expression logique, soit un test de la forme TypeOf objet Is type_objet.

    Select Case

    Dans certains cas la structure Select Case permet une structure plus claire qu'une longue liste de If imbriqués. Elle permet de définir des blocs clairement délimités, qui seront exécutés selon la valeur prise par une variable. La syntaxe de cette instruction est:

    
    Select Case Expression_test
    [ Case Liste_expressions_1
        Bloc_Instructions_1 ]
    [ Case Liste_expressions_2
        Bloc_Instructions_2 ]
    ...
    [ Case Else
        Bloc_Instructions_n ]
    End Select

    Expression_test est une expression numérique ou de type chaîne de caractères. Liste_expressions est une séquence d'une ou plusieurs valeurs possibles, d'intervalle de valeurs et de test à l'aide de l'instruction Is.

    La ligne décrite ci-dessous représente une Liste_expression valide.

    
    Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

    Fonctions et procédures

    En Visual Basic, nous devons distinguer plusieurs types de regroupement algorithmiques. Nous parlerons ici des fonctions internes, des procédures d'événement ainsi que des fonctions et procédures définies par le développeur.

    Les fonctions internes

    Visual Basic possède une importante bibliothèque de fonctions internes. Il existe environ 130 fonctions différentes, réparties dans les catégories suivantes:

  • fonctions de conversion d'information;
  • fonctions de vérification;
  • fonctions financières;
  • fonctions mathématiques et trigonométriques;
  • fonctions de gestion des dates et des heures;
  • fonctions de traitement des chaînes de caractères;
  • fonctions de gestion des fichiers et des répertoires;
  • fonctions de gestion de la base de registre;
  • etc.
  • Les fonctions de conversion

    Les fonctions de cette catégorie permettent de convertir des données de type quelconque dans un type précis. Le type de la valeur retournée par chacune de ces fonctions dépend du rôle de la fonction. Ces fonctions se présentent habituellement sous la forme C... où les points représentent un acronyme du nom du type.

    Les fonctions de conversion les plus utilisées sont:

    Fonction
    Description
    Cbool Convertit une expression en Boolean
    Cbyte Convertit une expression en Byte
    Ccur Convertit une expression en Currency
    Cdate Convertit une expression en Date
    CDbl Convertit une expression en Double
    Cdec Convertit une expression en Decimal
    CInt Convertit une expression en Integer
    CLng Convertit une expression en Long
    CSng Convertit une expression en Single
    CStr Convertit une expression en String
    CVar Convertit une expression en Variant
    Les fonctions de conversion

    Les fonctions de vérification ou de validation

    Les fonctions de cette catégorie permettent d'effectuer des vérifications sur le contenu de différents types de variables. Ces fonctions retournent généralement une valeur de type Boolean.

    Les fonctions de vérification les plus utilisées sont:

    Fonction
    Description
    IsArray Indique si une variable est un tableau
    IsDate Indique si une expression peut être convertie en date
    IsEmpty Indique si une variable a été initialisée
    IsMissing Indique si un paramètre facultatif est absent
    IsError Indique si une expression est une valeur d'erreur
    IsNull Indique si une expression ne contient aucune donnée valide (Null)
    IsNumeric Indique si une expression peut être interprétée comme un nombre
    IsObject Indique si un identificateur représente une variable objet
    TypeName Fournit des informations sur une variable
    VarType Indique le sous-type d'une variable de type Variant
    Les fonctions de vérification

    Les fonctions de traitement des chaînes de caractères

    Les fonctions de cette catégorie permettent d'effectuer des traitements sur des variables de type String.

    Les fonctions de traitement des chaînes de caractères les plus utilisées sont:

    Fonction
    Description
    Asc Renvoie le code de caractère ANSI ou DBCS du premier caractère d'une chaîne
    AscB Renvoie la valeur du premier octet d'une chaîne donnée contenant des données binaires
    AscW Renvoie le code de caractère Unicode du premier caractère d'une chaîne
    Chr Renvoie une chaîne contenant un code de caractère ANSI ou DBCS spécifique
    ChrB Renvoie une chaîne binaire contenant un octet spécifique
    ChrW Renvoie une chaîne contenant un code de caractère Unicode spécifique
    Input Renvoie le nombre de caractères ANSI ou DBCS indiqué d'un fichier
    InputB Renvoie le nombre d'octets indiqué d'un fichier
    InStr Renvoie la première occurrence d'une chaîne au sein d'une autre chaîne
    InStrB Renvoie la première occurrence d'un octet dans une chaîne binaire
    Left Renvoie le nombre de caractères indiqué en partant de la gauche d'une chaîne
    Right Renvoie le nombre de caractères indiqué en partant de la droite d'une chaîne
    LeftB Renvoie le nombre d'octets indiqué en partant de la gauche d'une chaîne binaire
    RightB Renvoie le nombre d'octets indiqué en partant de la droite d'une chaîne binaire
    Len Renvoie la longueur de la chaîne en nombre de caractères
    LenB Renvoie la longueur de la chaîne en nombre d'octets
    Mid Renvoie le nombre de caractères indiqué d'une chaîne
    MidB Renvoie le nombre d'octets indiqué d'une chaîne
    Les fonctions de traitement des chaînes de caractères

    Les procédures d'événement

    Lorsqu'un événement se produit dans votre application, Visual Basic reconnaît automatiquement l'événement et exécute le code que vous avez écrit en conséquence. Ce code est appelé une procédure d'événement (voir schéma ci-dessous).


    Exemple de procédure d'événement

    Syntaxe des procédures d'événement

    Le nom d'une procédure d'événement est composé d'un nom d'objet et d'un nom d'événement. C'est la propriété Name de la feuille ou du contrôle qui définit le nom de l'objet. Dans une procédure d'événement, il peut y avoir une ou plusieurs instructions (voir schéma ci-dessous).


    Exemple de procédure d'événement

    Les fonctions définies par l'utilisateur

    Comme les fonctions internes de Visual Basic, les fonctions définies par l'utilisateur renvoient une valeur exploitable par l'application. Une fonction définie dans un module source peut être locale au module ou encore globale au programme. Une fonction définie dans une feuille est obligatoirement locale à la feuille.

    Une fonction renvoie la valeur d'une variable dont vous devez définir le type. Le résultat doit être affecté au nom de la fonction pour être exploitable dans la procédure appelante.

    Des valeurs peuvent également être échangées à l'aide de paramètres, passés par la procédure d'appel avant d'être renvoyé par la fonction.

    La syntaxe d'une fonction est:

    
    [ Static ] [ Private ] Function Nom_de_la_fonction ( [ Liste des paramètres ] ) [ As Type ]
       'Instructions
       [ Exit function ]
       Nom_de_la_fonction = expression
    End Function

    Le mot réservé Static commande le verrouillage des valeurs de toutes les variables locales entre les appels de la fonction. Private déclare une procédure connue exclusivement du module où elle est déclarée.

    Les paramètres sont passés à la fonction par valeur ou par référence. Le passage par valeur ne modifie pas le contenu de la variable pendant ou après le traitement de cette valeur dans la fonction. Par contre, avec le passage par référence, toute action sur la valeur est opérée directement à l'adresse de la variable, dont le contenu est ainsi modifié.

    L'exemple suivant illustre le passage des paramètres:

    Exemple
    
    Function Addition (Val1 As Integer, Val2 As Integer) As Integer
      Addition = Val1 + Val2
    End Function
    .
    .
    Resultat = Addition(125, 75)
    toto = 24
    titi = 32
    Resultat = Addition(toto, titi)

    Les procédures

    Les procédures définies par l'utilisateur fonctionnent comme les procédures d'événements ou comme les instructions internes de Visual Basic. Contrairement aux procédures d'événements, les procédures définies par l'utilisateur disposent d'une liste de paramètres librement définie.

    Une procédure définie dans un module source peut être locale au module ou encore globale au programme. Une procédure définie dans une feuille est obligatoirement locale à la feuille.

    La syntaxe d'une procédure est:

    
    [ Static ] [ Private ] Sub Nom_de_la_procédure ( [ Liste des paramètres ] )
       'Instructions
       [ Exit Sub ]
       'Instructions
    End Sub

    Le mot réservé Static commande le verrouillage des valeurs de toutes les variables locales entre les appels de la fonction. Private déclare une procédure connue exclusivement du module où elle est déclarée. Les paramètres sont passés comme pour la fonction par valeur ou par référence.