Excel · VBA · A3iformations

Variables et objets VBA : types, portée, tableaux, Set, Range, graphiques, Enum et feuilles protégées

Une variable est une case mémoire nommée qui garde une valeur pendant l’exécution ; un objet (plage, feuille, graphique) se manipule par ses propriétés et ses méthodes. Cette page montre comment déclarer et typer les variables, choisir leur portée, utiliser les tableaux, affecter un objet avec Set, piloter les plages et les graphiques, puis sécuriser une feuille de données. Chaque séquence propose un simulateur. Voir aussi la structure des macros et les modules.

Dim, As, Option ExplicitVariables
Private, Public, StaticPortée
Set, Range, ChartObjets
Const, Enum, CCurValeurs
1

La notion de variable et sa déclaration

On déclare une variable avec Dim nom As Type, en tête de procédure. Dim client As String réserve du texte ; Dim valeur As Variant (ou Dim valeur sans type) accepte n’importe quoi, au prix de plus de mémoire et d’erreurs repérées plus tard. Dans un code existant, les déclarations se reconnaissent aux mots Dim, Private, Public, Static et Const. Option Explicit en tête de module force la déclaration : une variable mal orthographiée devient une erreur au lieu d’une nouvelle variable vide.

Simulateur : repérez les déclarations, puis testez Option Explicit

Un seul As par variableDim a, b As Long déclare b en Long mais a en Variant. Écrivez Dim a As Long, b As Long.
Activer une fois pour toutesOutils › Options › Déclaration des variables obligatoire : chaque nouveau module commence par Option Explicit (les modules existants ne sont pas modifiés).
2

Les principaux types de variables

Le type fixe ce que la variable peut contenir et la place qu’elle occupe. Long pour les entiers (compteurs, numéros de ligne), Double pour les décimaux, Currency pour les montants (4 décimales exactes), String pour le texte, Boolean pour Vrai/Faux, Date pour les dates et heures, Variant quand le contenu est imprévisible, Object ou un type précis (Range, Worksheet) pour les objets.

Simulateur : affectez une valeur à une variable typée

    

Arrondi du banquierDans le code, un décimal s’écrit avec un point (2.5) et une date entre dièses au format américain (#12/25/2026#). Un décimal affecté à un Integer ou un Long est arrondi à l’entier pair le plus proche en cas d’égalité : 2,5 donne 2, 3,5 donne 4.
Integer ou Long ?Integer s’arrête à 32 767 : une feuille dépasse vite ce nombre de lignes. Préférez Long pour tous les entiers.
3

La portée des variables

La portée dit qui voit la variable, et sa durée de vie combien de temps elle garde sa valeur. Dim dans une procédure : variable locale, remise à zéro à chaque appel. Static dans une procédure : locale mais conservée entre les appels. Private (ou Dim) en tête de module : visible par toutes les procédures du module. Public en tête d’un module standard : visible dans tout le projet. Les variables de module et publiques vivent tant que le classeur est ouvert et que le code n’est pas réinitialisé.

Simulateur : où déclarer le compteur ?
Exécution

La plus petite portée possibleDéclarez dans la procédure tant que c’est suffisant. Les variables publiques se modifient de partout : un bogue devient difficile à localiser.
Perte des valeursLe bouton Réinitialiser, un End ou une erreur non gérée suivie de Fin vident toutes les variables de module et publiques.
4

Les tableaux

Un tableau (array) range plusieurs valeurs sous un même nom, repérées par un indice : Dim mois(1 To 12) As String. Un tableau dynamique se déclare sans taille, Dim t() As Double, puis se dimensionne avec ReDim ; ReDim Preserve agrandit sans perdre le contenu. LBound et UBound donnent les bornes. t = Range("A2:C8").Value charge une plage dans un tableau à deux dimensions en une seule instruction : c’est bien plus rapide qu’une boucle sur les cellules.

Simulateur : instructions sur le tableau t

    

Array commence à 0Array(...) et Split(...) renvoient un tableau d’indice 0, alors qu’un tableau issu d’une plage commence à 1. Utilisez toujours LBound et UBound dans vos boucles.
Écrire d’un coupL’inverse fonctionne aussi : Range("E2:E8").Value = t écrit tout le tableau en une instruction (tableau à 2 dimensions de même taille).
5

L’instruction Set et l’objet Range

Une variable objet reçoit sa valeur avec Set : Dim r As Range puis Set r = Range("A1").CurrentRegion. Sans Set, VBA essaie d’affecter la valeur de la plage et renvoie l’erreur 91. L’objet Range désigne une ou plusieurs cellules ; on s’y déplace avec Offset, on le redimensionne avec Resize, CurrentRegion prend le bloc de données autour d’une cellule et End(xlUp) trouve la dernière cellule remplie. Set r = Nothing libère la variable.

Simulateur : quelle plage désigne l’expression ?

    

Dernière ligne rempliederniere = Cells(Rows.Count, "A").End(xlUp).Row part du bas de la colonne et remonte : fiable même si le tableau contient des cellules vides.
With … End WithWith r … .Font.Bold = True … End With évite de répéter le nom de l’objet et accélère le code.
6

Manipuler les graphiques

Un graphique incorporé est un ChartObject (le cadre sur la feuille) qui contient un Chart (le graphique lui-même). ActiveSheet.ChartObjects.Add(Left, Top, Width, Height) crée le cadre, .Chart.SetSourceData fixe les données, .Chart.ChartType le type (xlColumnClustered, xlBarClustered, xlPie, xlLine), .Chart.HasTitle et .Chart.ChartTitle.Text le titre. Chaque série se pilote par SeriesCollection(1).

Simulateur : générez le code et le graphique

    

Nommer le graphiqueco.Name = "grStagiaires" permet ensuite de le retrouver avec ChartObjects("grStagiaires") au lieu d’un numéro qui change.
Supprimer avant de recréerUne macro relancée empile les graphiques. Commencez par For Each co In ActiveSheet.ChartObjects : co.Delete : Next, ou mettez à jour le graphique existant.
7

Les constantes et les énumérations

Une constante garde la même valeur pendant toute l’exécution : Const TAUX_TVA As Double = 0.2. Elle rend le code lisible et se modifie en un seul endroit. VBA et Excel fournissent déjà des centaines de constantes : vbYes, vbCrLf, xlUp, xlColumnClustered. Une énumération (Enum, en tête de module) regroupe des constantes entières liées ; sans valeur explicite, chaque membre vaut le précédent + 1, en partant de 0. IntelliSense propose ensuite les membres.

Simulateur : valeurs des membres d’une énumération

    

Une constante ne se modifie pasTAUX_TVA = 0.055 dans le code provoque « Affectation à une constante non autorisée ». Pour une valeur qui change, utilisez une cellule nommée ou une variable.
Enum en paramètreSub Tarifer(m As ModeFormation) : à l’appel, IntelliSense liste Inter, Intra, Distanciel. Le code se lit sans chiffres magiques.
8

Conversions de type et fonctions de date

Les fonctions de conversion transforment une valeur dans un type précis : CCur (Currency), CDbl, CLng, CInt, CStr, CDate. Elles suivent les paramètres régionaux de Windows (virgule décimale, date jj/mm/aaaa) et déclenchent l’erreur 13 si la conversion est impossible. D’où l’intérêt des fonctions de test : IsDate vérifie qu’un texte est une date valide, IsNumeric qu’il est un nombre. Attention, Val ne lit que le point décimal.

Simulateur : convertir un texte saisi dans une cellule

    
Exécution

Tester avant de convertirIf IsDate(s) Then d = CDate(s) Else … : la macro signale la cellule fautive au lieu de s’arrêter sur une erreur 13.
Fonctions de date utilesDate, Now, DateSerial(2026, 12, 25), DateAdd("m", 1, d), DateDiff("d", d1, d2), Format(d, "dddd d mmmm yyyy").
9

Feuilles de données sécurisées

Une feuille de données protège ses formules et sa structure tout en laissant saisir dans les cellules déverrouillées. En VBA : ws.Protect Password:="…", UserInterfaceOnly:=True protège contre l’utilisateur mais laisse les macros écrire. Ce réglage n’est pas enregistré avec le fichier : on le réapplique dans Workbook_Open. D’autres arguments autorisent le filtre ou la mise en forme ; EnableSelection = xlUnlockedCells limite la sélection aux cellules de saisie, et une feuille de paramètres peut passer en xlSheetVeryHidden.

Simulateur : ws.Protect et ses arguments

    

Mot de passe dans le codeLe mot de passe écrit dans la macro est lisible par qui ouvre l’éditeur : protégez aussi le projet VBA. Cette protection évite les erreurs de saisie, elle ne chiffre pas les données.
Déverrouiller d’abordFormat de cellule › Protection : décochez Verrouillée sur les cellules de saisie avant de protéger, ou en VBA Range("B2:D50").Locked = False.
Exercice : fiabiliser une liste de stock

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm, insérez un module modStock et collez le code de la feuille « Code VBA » (Option Explicit, Enum et constante en tête).
  2. Repérez les déclarations : types, portée, tableau dynamique, variable objet déclarée avec Set.
  3. Exécutez ControlerStock : la macro convertit les prix avec CCur, teste les dates avec IsDate, écrit la valeur et le statut en F et G.
  4. Vérifiez le graphique créé par la macro et la protection de la feuille Stock (saisie refusée en F, macro autorisée).
  5. Contrôle : 1 prix invalide (A005), 1 date invalide (A003), valeur totale du stock 2 500,70 €.
  6. Répondez aux questions de la feuille Contrôle.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français