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 en bref
Section intitulée « VBA en bref »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.
Structure de base
Section intitulée « Structure de base »Toute macro VBA a la même forme :
Sub NomDeLaMacro() ' Instructions ici ' Les lignes commençant par ' sont des commentaires — ignorés à l'exécutionEnd SubSubouvre la macro,End Subla 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
Instructions de base
Section intitulée « Instructions de base »Les exemples suivants utilisent un fichier d’inventaire de pharmacie. Le principe dans chaque cas : une action, une ligne.
1. Afficher un message
Section intitulée « 1. Afficher un message »Sub BonjourPharmacie() MsgBox "Bienvenue dans le système de pharmacie !"End SubMsgBox 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 Sub | Délimite toute macro |
MsgBox "texte" | Affiche un message à l’écran |
2. Sélectionner une cellule
Section intitulée « 2. Sélectionner une cellule »Sub AllerStock() Range("F2").SelectEnd SubRange("F2") désigne la cellule F2. .Select la sélectionne — comme si vous cliquiez dessus.
3. Écrire du texte automatiquement
Section intitulée « 3. Écrire du texte automatiquement »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 utilesRange("A1").Value = "Inventaire Pharmacie" ' texteRange("B2").Value = 42 ' nombreRange("C3").Value = Date ' date du jour4. Effacer des données
Section intitulée « 4. Effacer des données »Sub EffacerStock() Range("A2:A20").ClearContentsEnd Sub.ClearContents supprime les valeurs d’une plage sans toucher à la mise en forme (contrairement à Delete qui supprime tout).
| Méthode | Effet |
|---|---|
.ClearContents | Supprime les valeurs uniquement |
.ClearFormats | Supprime la mise en forme uniquement |
.Clear | Supprime valeurs et mise en forme |
5. Changer la couleur d’une cellule
Section intitulée « 5. Changer la couleur d’une cellule »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 utilesRGB(255, 0, 0) ' rouge vifRGB(255, 165, 0) ' orangeRGB(0, 176, 80) ' vert ExcelRGB(255, 255, 255) ' blanc (effacer la couleur)6. Copier une valeur
Section intitulée « 6. Copier une valeur »Sub CopierPrix() Range("E2").Value = Range("E3").ValueEnd SubEn 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.
7. Prendre une décision selon la valeur du stock
Section intitulée « 7. Prendre une décision selon la valeur du stock »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- Elle lit la valeur de la cellule F2 (le stock)
- Si cette valeur est inférieure à 20, elle écrit
"Commander"en K2 - Sinon, elle écrit
"OK" - 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.
If [condition] Then ' Instructions si la condition est vraieElse ' Instructions si la condition est fausseEnd IfLa structure If…Then…Else est un pilier de tous les langages de programmation.
En VBA, elle permet de prendre des décisions selon les données du tableur.
On pourrait étendre cette macro pour parcourir toutes les lignes du stock
plutôt qu’une seule — c’est là qu’intervient la boucle For…Next :
' Exemple (notion avancée)Dim i As IntegerFor i = 2 To 50 If Cells(i, 6).Value < 20 Then Cells(i, 11).Value = "Commander" Cells(i, 11).Interior.Color = RGB(255, 0, 0) Else Cells(i, 11).Value = "OK" Cells(i, 11).Interior.Color = RGB(255, 255, 255) End IfNext iCells(ligne, colonne) est une notation alternative à Range("A1"),
pratique quand la ligne varie dans une boucle.
Récapitulatif des instructions vues
Section intitulée « Récapitulatif des instructions vues »| Instruction | Ce qu’elle fait | Exemple |
|---|---|---|
MsgBox "texte" | Affiche un message | MsgBox "Mise à jour terminée" |
Range("A1").Select | Sélectionne une cellule | Range("F2").Select |
Range("A1").Value = … | Écrit une valeur | Range("A1").Value = "Inventaire" |
Range("A1:A20").ClearContents | Efface les valeurs | Range("A2:A20").ClearContents |
Range("A1").Interior.Color = RGB(…) | Change le fond | RGB(255, 0, 0) pour rouge |
If … Then … Else … End If | Décision conditionnelle | Si stock < 20 → “Commander” |
Et après VBA ? Office Scripts
Section intitulée « Et après VBA ? Office Scripts »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 VBAfunction 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"); }}