Sub BonjourMonde()
' Ceci est un commentaire, il n'est pas exécuté
MsgBox "Bonjour le monde du VBA !"
End Sub
**Explication :**
* `Sub BonjourMonde()` : Déclare le début de votre procédure (votre macro).
* `MsgBox` : Est une instruction qui affiche une boîte de message à l'écran.
* `End Sub` : Indique la fin de la procédure.
Pour l'exécuter, placez votre curseur n'importe où dans la macro et appuyez sur **F5** ou cliquez sur le bouton **Exécuter** (le triangle vert).
---
Partie 2 : Les Bases du Langage VBA
↑ Retour en haut
### 2.1 Les Variables : Des Boîtes pour Stocker l'Information
Une variable est un espace nommé dans la mémoire de l'ordinateur pour stocker une valeur. C'est comme une boîte étiquetée.
**Déclaration :** On utilise le mot-clé `Dim` (Dimension).
Dim nomDeMaVariable As TypeDeDonnee
**Types de Données Courants :**
| Type de Donnée | Description | Exemple de Valeur |
| :--- | :--- | :--- |
| `Long` | Nombres entiers (grands) | 150000 |
| `Integer` | Nombres entiers (petits) | 42 |
| `String` | Texte | "Mon texte" |
| `Double` | Nombres décimaux | 3.14159 |
| `Boolean` | Vrai ou Faux | True ou False |
| `Date` | Dates et heures | #11/11/2025# |
| `Variant` | Peut contenir n'importe quel type (à éviter si possible) | |
**Exemple Précis :**
Sub DeclarationEtUtilisation()
' 1. Déclaration des variables
Dim ageUtilisateur As Integer
Dim nomProduit As String
Dim prixUnitaire As Double
' 2. Affectation des valeurs
ageUtilisateur = 35
nomProduit = "Clavier Ergonomique"
prixUnitaire = 49.99
' 3. Utilisation des variables
MsgBox "Le produit " & nomProduit & " coûte " & prixUnitaire & " €."
End Sub
### 2.2 Les Constantes : Des Valeurs Immuables
Une constante est une variable dont la valeur ne peut pas changer pendant l'exécution du code.
Const TauxTVA As Double = 0.20
---
Partie 3 : Les Objets Fondamentaux d'Excel
↑ Retour en haut
Le VBA fonctionne en manipulant des **objets**. Un objet est un élément d'Excel (un classeur, une feuille, une cellule, etc.) qui possède des **propriétés** (ses caractéristiques) et des **méthodes** (les actions qu'il peut effectuer).
### 3.1 L'Objet `Range` : La Cellule, le Cœur d'Excel
L'objet `Range` représente une ou plusieurs cellules. C'est l'objet le plus utilisé.
**Syntaxe pour cibler une cellule :**
' 1. Par son adresse (le plus courant)
Range("A1").Value = "Titre"
' 2. Par la méthode Cells(ligne, colonne)
Cells(2, 1).Value = 100 ' Équivalent à Range("A2")
**Exemple Précis : Manipulation de Cellules**
Sub ManipulationCellules()
' Écrire une valeur dans la cellule B5
Range("B5").Value = "Total Ventes"
' Lire la valeur de A1 et l'afficher
Dim valeurA1 As Variant
valeurA1 = Range("A1").Value
MsgBox "La valeur de A1 est : " & valeurA1
' Changer la couleur de fond de la cellule C1
Range("C1").Interior.Color = RGB(255, 0, 0) ' Rouge
' Sélectionner une plage de cellules (A1 à D10)
Range("A1:D10").Select
End Sub
### 3.2 Les Objets `Worksheet` et `Workbook`
* **`Worksheet` (Feuille de calcul) :** Représente une feuille.
* **`Workbook` (Classeur) :** Représente le fichier Excel entier.
**Exemple Précis :**
Sub GestionFeuillesEtClasseurs()
' Cibler la feuille nommée "Données"
Worksheets("Données").Activate
' Ajouter une nouvelle feuille et la renommer
Worksheets.Add.Name = "Rapport"
' Sauvegarder le classeur actif
ActiveWorkbook.Save
' Fermer le classeur (sans sauvegarder)
ThisWorkbook.Close SaveChanges:=False
End Sub
---
Partie 4 : Les Structures de Contrôle
↑ Retour en haut
Ces structures permettent à votre code de prendre des décisions et de s'adapter aux données.
### 4.1 La Condition `If...Then...Else`
Elle permet d'exécuter un bloc de code si une condition est VRAIE.
**Syntaxe :**
If condition Then
' Code à exécuter si la condition est VRAIE
ElseIf autre_condition Then
' Code si la première est FAUSSE et la seconde VRAIE
Else
' Code à exécuter si toutes les conditions sont FAUSSES
End If
**Exemple Précis : Vérification de Stock**
Sub VerifierStock()
Dim stock As Integer
stock = Range("A1").Value
If stock > 100 Then
MsgBox "Stock suffisant."
ElseIf stock > 0 Then
MsgBox "Stock faible, commander rapidement."
Else
MsgBox "RUPTURE DE STOCK !"
End If
End Sub
### 4.2 La Condition `Select Case`
Idéale pour tester une variable contre plusieurs valeurs possibles. C'est plus propre qu'une longue série de `ElseIf`.
**Exemple Précis : Attribuer une Mention**
Sub AttribuerMention()
Dim note As Integer
note = Range("B2").Value
Dim mention As String
Select Case note
Case 0 To 9
mention = "Échec"
Case 10 To 13
mention = "Passable"
Case 14 To 16
mention = "Bien"
Case Is >= 17
mention = "Très Bien"
Case Else
mention = "Note Invalide"
End Select
Range("C2").Value = mention
End Sub
---
Partie 5 : Les Boucles : Répéter sans se Répéter
↑ Retour en haut
Les boucles sont essentielles pour traiter de grandes quantités de données. Elles permettent d'exécuter le même bloc de code plusieurs fois.
### 5.1 La Boucle `For...Next` : Répéter un Nombre Fixe de Fois
Utilisée lorsque vous savez exactement combien de fois vous devez répéter l'action.
**Syntaxe :**
For compteur = debut To fin [Step pas]
' Code à répéter
Next compteur
**Exemple Précis : Remplir une Colonne**
Sub RemplirColonne()
Dim i As Integer
' Remplir les 10 premières lignes de la colonne A
For i = 1 To 10
Cells(i, 1).Value = "Ligne n° " & i
Next i
End Sub
### 5.2 La Boucle `For Each...Next` : Parcourir une Collection d'Objets
La plus pratique pour parcourir toutes les feuilles, toutes les cellules d'une plage, ou tous les objets d'une collection.
**Exemple Précis : Masquer toutes les Feuilles Vides**
Sub MasquerFeuillesVides()
Dim ws As Worksheet
' Parcourir chaque feuille du classeur actif
For Each ws In ThisWorkbook.Worksheets
' Si la feuille a moins de 5 cellules utilisées, on la considère vide
If Application.CountA(ws.Cells) < 5 Then
ws.Visible = xlSheetHidden ' Masquer la feuille
End If
Next ws
End Sub
### 5.3 La Boucle `Do While...Loop` : Répéter Tant qu'une Condition est Vraie
Utilisée lorsque vous ne savez pas à l'avance combien de fois la boucle doit s'exécuter.
**Exemple Précis : Trouver la Première Cellule Vide**
Sub TrouverPremiereLigneVide()
Dim ligne As Long
ligne = 1
' Tant que la cellule de la colonne A n'est PAS vide
Do While Cells(ligne, 1).Value <> ""
ligne = ligne + 1 ' Passer à la ligne suivante
Loop
' Écrire le résultat dans la première ligne vide trouvée
Cells(ligne, 1).Value = "Nouvelle Entrée"
End Sub
---
Partie 6 : Les Procédures et Fonctions
↑ Retour en haut
### 6.1 Les Procédures (`Sub`)
C'est ce que nous avons utilisé jusqu'à présent. Une procédure exécute une série d'actions mais ne renvoie pas de valeur.
### 6.2 Les Fonctions (`Function`)
Une fonction est similaire à une procédure, mais elle est conçue pour **calculer et renvoyer une seule valeur**. Elles sont utilisées comme les fonctions intégrées d'Excel.
**Syntaxe :**
Function NomDeMaFonction(argument1 As Type, argument2 As Type) As TypeDeRetour
' Code de calcul
NomDeMaFonction = resultat
End Function
**Exemple Précis : Calculer le Prix TTC**
Créons une fonction personnalisée pour calculer le prix toutes taxes comprises (TTC).
Function CalculerTTC(prixHT As Double, Optional taux As Double = 0.2) As Double
' Le type de retour est Double
' Calcul
Dim prixTTC As Double
prixTTC = prixHT * (1 + taux)
' La fonction renvoie la valeur en affectant le résultat à son nom
CalculerTTC = prixTTC
End Function
**Utilisation :**
Dans Excel, vous pouvez maintenant taper `=CalculerTTC(A1)` dans une cellule.
---
Partie 7 : Gestion des Erreurs
↑ Retour en haut
Le code VBA peut planter si, par exemple, il essaie de diviser par zéro ou de cibler une feuille qui n'existe pas. La gestion des erreurs permet d'éviter ces plantages.
### 7.1 L'Instruction `On Error`
L'instruction la plus courante est `On Error GoTo`.
**Syntaxe :**
Sub MaMacroSecurisee()
' 1. Activer la gestion d'erreur
On Error GoTo GestionErreur
' Code normal
Worksheets("FeuilleInexistante").Activate ' Cette ligne va générer une erreur
MsgBox "Ceci ne s'affichera pas si l'erreur survient."
' 2. Sortir de la procédure si tout va bien
Exit Sub
' 3. Étiquette de gestion d'erreur
GestionErreur:
' Code à exécuter en cas d'erreur
MsgBox "Une erreur est survenue : " & Err.Description
' Réinitialiser la gestion d'erreur
On Error GoTo 0
End Sub
**Explication :**
* `On Error GoTo GestionErreur` : Si une erreur survient, le code saute immédiatement à l'étiquette `GestionErreur:`.
* `Exit Sub` : Empêche le code de la gestion d'erreur de s'exécuter si la macro se termine normalement.
* `Err.Description` : Propriété de l'objet `Err` qui donne la description de l'erreur.
---
Partie 8 : Interaction avec l'Utilisateur
↑ Retour en haut
Le VBA permet de communiquer avec l'utilisateur via des boîtes de dialogue.
### 8.1 La Boîte de Message (`MsgBox`)
Nous l'avons déjà vue. Elle affiche une information et attend que l'utilisateur clique sur OK.
### 8.2 La Boîte de Saisie (`InputBox`)
Elle permet de demander une information à l'utilisateur.
**Syntaxe :**
variable = InputBox(prompt, [title], [default])
**Exemple Précis : Demander un Nom de Fichier**
Sub DemanderNom()
Dim nomFichier As String
nomFichier = InputBox("Quel nom voulez-vous donner au nouveau rapport ?", "Saisie Utilisateur", "Rapport_Mensuel")
If nomFichier <> "" Then
MsgBox "Le fichier sera nommé : " & nomFichier
Else
MsgBox "Opération annulée."
End If
End Sub
---
Partie 9 : Optimisation et Bonnes Pratiques
↑ Retour en haut
Pour que vos macros soient rapides et fiables, quelques astuces de pro :
### 9.1 Accélérer l'Exécution
Le VBA est ralenti par les mises à jour de l'écran et les calculs automatiques d'Excel. Désactivez-les temporairement !
Sub MacroRapide()
' Désactiver les mises à jour d'écran et les événements
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual ' Désactiver le recalcul
' Votre code très long ici...
' Rétablir les paramètres à la fin (TRÈS IMPORTANT !)
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
### 9.2 Utiliser les Variables Objets (`Set`)
Pour manipuler des objets complexes (comme une feuille ou une plage), il est plus efficace de les stocker dans une variable objet.
Sub UtiliserVariablesObjets()
' Déclaration de la variable objet
Dim ws As Worksheet
' Affectation de l'objet à la variable (mot-clé SET obligatoire)
Set ws = ThisWorkbook.Worksheets("Feuille1")
' Utilisation de la variable (plus rapide et plus lisible)
ws.Range("A1").Value = "OK"
ws.Range("B1").Value = "Terminé"
' Libérer la mémoire (bonne pratique)
Set ws = Nothing
End Sub
### 9.3 Utiliser `With...End With`
Pour éviter de répéter le nom d'un objet plusieurs fois, utilisez `With`.
' Au lieu de :
' Range("A1").Font.Bold = True
' Range("A1").Font.Italic = True
' Range("A1").Interior.Color = vbYellow
' Utilisez :
With Range("A1")
.Font.Bold = True
.Font.Italic = True
.Interior.Color = vbYellow
End With
---
Partie 10 : Exemple Pratique Complet : Le Nettoyeur de Données
↑ Retour en haut
Cet exemple combine plusieurs notions vues pour créer une macro utile : elle nettoie une colonne de données en supprimant les doublons et en triant le résultat.
Sub NettoyeurDeDonnees()
' 1. Optimisation pour la vitesse
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Déclaration des variables objets
Dim ws As Worksheet
Dim derniereLigne As Long
Dim plageDonnees As Range
' Cibler la feuille active
Set ws = ActiveSheet
' 2. Déterminer la plage de données (colonne A)
' Trouver la dernière ligne non vide de la colonne A
derniereLigne = ws.Cells(Rows.Count, "A").End(xlUp).Row
' Définir la plage de A1 jusqu'à la dernière ligne
Set plageDonnees = ws.Range("A1:A" & derniereLigne)
' 3. Supprimer les doublons
plageDonnees.RemoveDuplicates Columns:=1, Header:=xlYes
' 4. Trier les données restantes
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange plageDonnees
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' 5. Rétablir les paramètres
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
' Message de confirmation
MsgBox "Nettoyage de la colonne A terminé : doublons supprimés et données triées.", vbInformation
' Libérer la mémoire
Set ws = Nothing
Set plageDonnees = Nothing
End Sub
Ce cours vous donne les bases solides pour commencer à automatiser vos tâches. La clé est la pratique : essayez de réécrire ces exemples et de les adapter à vos propres besoins !