Aller au contenu

Introduction à VBA

Quand vous enregistrez une macro, Excel ne mémorise pas vos clics — il les traduit en code. Ce code s’appelle du VBA (Visual Basic for Applications). Vous n’avez pas à l’écrire pour utiliser des macros simples, mais savoir le lire et en modifier quelques lignes change complètement ce que vous pouvez faire.

Cette page vous montre les instructions VBA les plus utiles, illustrées dans un contexte de gestion de pharmacie.


VBA est le langage de programmation embarqué dans toute la suite Microsoft Office depuis 1993. Il vous donne accès à tout ce qu’Excel peut faire, mais par le code plutôt que par la souris.

Toute macro VBA a la même forme :

Sub NomDeLaMacro()
' Instructions ici
' Les lignes commençant par ' sont des commentaires — ignorés à l'exécution
End Sub
  • Sub ouvre la macro, End Sub la ferme
  • Le nom ne peut pas contenir d’espaces ni d’accents
  • Tout ce qui est entre les deux s’exécute dans l’ordre, ligne par ligne

Les exemples suivants utilisent un fichier d’inventaire de pharmacie. Le principe dans chaque cas : une action, une ligne.


Sub BonjourPharmacie()
MsgBox "Bienvenue dans le système de pharmacie !"
End Sub

MsgBox affiche une boîte de dialogue avec le texte fourni. Utile pour confirmer qu’une macro s’est exécutée, avertir l’utilisateur, ou afficher un résultat.

Ce qu’on apprend
Sub … End SubDélimite toute macro
MsgBox "texte"Affiche un message à l’écran

Sub AllerStock()
Range("F2").Select
End Sub

Range("F2") désigne la cellule F2. .Select la sélectionne — comme si vous cliquiez dessus.


Sub EcrireTitre()
Range("A1").Value = "Inventaire Pharmacie"
End Sub

.Value est la propriété qui contient la valeur d’une cellule. Écrire Range("A1").Value = "quelque chose" place ce texte dans la cellule — sans clic, sans curseur.

' Variantes utiles
Range("A1").Value = "Inventaire Pharmacie" ' texte
Range("B2").Value = 42 ' nombre
Range("C3").Value = Date ' date du jour

Sub EffacerStock()
Range("A2:A20").ClearContents
End Sub

.ClearContents supprime les valeurs d’une plage sans toucher à la mise en forme (contrairement à Delete qui supprime tout).

MéthodeEffet
.ClearContentsSupprime les valeurs uniquement
.ClearFormatsSupprime la mise en forme uniquement
.ClearSupprime valeurs et mise en forme

Sub ColorerAlerte()
Range("F2").Interior.Color = RGB(255, 0, 0)
End Sub

.Interior.Color accède au fond de la cellule. RGB(rouge, vert, bleu) définit une couleur par ses composantes, chacune entre 0 et 255.

' Couleurs utiles
RGB(255, 0, 0) ' rouge vif
RGB(255, 165, 0) ' orange
RGB(0, 176, 80) ' vert Excel
RGB(255, 255, 255) ' blanc (effacer la couleur)

Sub CopierPrix()
Range("E2").Value = Range("E3").Value
End Sub

En lisant Range("E3").Value et en l’assignant à Range("E2").Value, on transfère la valeur d’une cellule à une autre — sans passer par le presse-papier.


Voici une macro un peu plus complète qui combine plusieurs instructions vues précédemment :

Sub VerifierStockSimple()
' Étape 1 : écrire "Commander" ou "OK" selon le stock
If Range("F2").Value < 20 Then
Range("K2").Value = "Commander"
Else
Range("K2").Value = "OK"
End If
' Étape 2 : colorier la cellule si le stock est faible
If Range("F2").Value < 20 Then
Range("K2").Interior.Color = RGB(255, 0, 0)
End If
End Sub
  1. Elle lit la valeur de la cellule F2 (le stock)
  2. Si cette valeur est inférieure à 20, elle écrit "Commander" en K2
  3. Sinon, elle écrit "OK"
  4. Elle colorie K2 en rouge si le stock est faible

Résultat : en un clic, toutes les colonnes de statut et de couleur sont mises à jour.


InstructionCe qu’elle faitExemple
MsgBox "texte"Affiche un messageMsgBox "Mise à jour terminée"
Range("A1").SelectSélectionne une celluleRange("F2").Select
Range("A1").Value = …Écrit une valeurRange("A1").Value = "Inventaire"
Range("A1:A20").ClearContentsEfface les valeursRange("A2:A20").ClearContents
Range("A1").Interior.Color = RGB(…)Change le fondRGB(255, 0, 0) pour rouge
If … Then … Else … End IfDécision conditionnelleSi stock < 20 → “Commander”

VBA fonctionne très bien pour Excel de bureau. Mais si vous travaillez dans Excel 365 en ligne (navigateur ou SharePoint), VBA n’est pas disponible.

Microsoft propose une alternative moderne : Office Scripts.

// Équivalent Office Scripts de notre macro VBA
function main(workbook: ExcelScript.Workbook) {
const feuille = workbook.getActiveWorksheet();
const stock = feuille.getRange("F2").getValue() as number;
if (stock < 20) {
feuille.getRange("K2").setValue("Commander");
feuille.getRange("K2").getFormat().getFill().setColor("#FF0000");
} else {
feuille.getRange("K2").setValue("OK");
feuille.getRange("K2").getFormat().getFill().setColor("#FFFFFF");
}
}