Introduction

Sur cette page

Introduction

Connaissances préalables

Configurer Excel

Premier exemple

Second exemple

Troisième exemple

Quatrième exemple

Sommaire

Fichier exemples

But et limites du tutoriel

Références


Concepts de programmation

VBE: l'éditeur VBA

Déclarations, types et références

Expressions et assignations

Tests et branchements

Boucles

Gestion d'erreur

Collections et tableaux

Dialogues et formulaires

Objets et événements Excel

Conseils de programmation

Liste d'instructions

Introduction

Visual Basic for Application est un environnement de programmation qui accompagne et permet d’automatiser la plupart des applications bureautiques de Microsoft.

On peut trouver une description générale du langage sur Wikipedia.

Dans l'environnement Excel, VBA sert à programmer des macro-commandes (ou macros), ce qui est un autre nom pour des programmes. Dans le présent tutoriel, on évitera le terme macro-commandes (ou macros), sauf lorsque Microsoft utilise ce terme.

Connaissances préalables

La compréhension de ce qui suit requiert une connaissance fonctionnelle de Excel.
On peut trouver un tutoriel sur Excel ici : Le compagnon Info Excel.

 

Version pdf du présent tutoriel

VBA - par Michel Berthiaume

Configurer Excel

L'installation par défaut d'Excel ne donne pas facilement accès aux outils de développement et d'exécution de programmes VBA.

Consultez les documents ci-dessous pour configurer Excel:

Afficher l'onglet Développeur

Activer l'exécution des macros

 

De plus, le format d'enregistrement par défaut des classeurs Excel exclut les macros VBA. Il faut donc faire attention lorsqu'on enregistre un classeur Excel contenant du code VBA:

Enregistrer un classeur Excel contenant une macro VBA

 

Premier exemple:
Enregistrer une macro-commande qui affiche/masque une feuille Excel

Excel offre la possibilité d’enregistrer une macro-commande. En fait, les commandes données en Excel sont alors enregistrées en VBA dans un module VBA.
Cette possibilité est surtout utilisée pour obtenir facilement le nom des objets, propriétés et méthodes Excel utilisables en VBA.
Nous allons enregistrer une macro-commande qui affiche (ou masque) une feuille dans un classeur Excel.

Dans un nouveau classeur Excel, ajouter une feuille nommée Documentation :

1-      Clic-droit sur Feuil1

2-      Insérer…

  

 

Insérer 

Puis

1-      Feuille

2-      Cliquer
Ok

Feuille

Puis

1-      Clic-droit sur Feuil2

2-      Renommer

Puis nommer la feuille Documentation

RenommerDocumentation

Démarrer l’enregistrement

1-      Onglet Développeur

2-      Enregistrer une Macro

Enregistrer


Puis

1-      Donner un nom à l’enregistrement

2-      Assigner une touche (ici M majuscule)

3-      Documenter l’enregistrement

Cliquer
        Ok
Macro

Masquer la feuille Documentation

1-      Clic-droit sur le nom de la feuille

2- Choisir Masquer

Masquer
Arrêter l’enregistrement

    1- Onglet Développeur
    2- Arrêter l’enregistrement
Arrêter

Consulter le code VBA enregistré

1-      Onglet Développeur

2-      Visual Basic

Développeur

Puis

1-      Ouvrir le dossier Modules

2-    Double-cliquer sur Module1

VBE
Modifier le code :
- Changer le nom du Sub
- Documenter l’auteur et le but
- Ajouter la gestion d’erreur
- Simplifier le déroulement en enlevant l’étape de sélection de l’onglet
- Généraliser le code pour que la feuille s’affiche lorsque masquée
Option Explicit
Sub MaMacro()
' MaMacro Macro
' Masquer la feuille Documentation
' Touche de raccourci du clavier: Ctrl+Shift+M
'
    Sheets("Documentation").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Feuil1").Select
    Sheets("Documentation").Visible = True
End Sub
Version 1 du code:
Option Explicit
Sub MaMacro()
'Auteur : Michel Berthiaume
' Masquer/Afficher la feuille Documentation
' Touche de raccourci du clavier: Ctrl+Shift+M
'
On Error Resume Next
    If Sheets("Documentation").Visible = False Then
        Sheets("Documentation").Visible = True
    Else
        Sheets("Documentation").Visible = False
    End If
End Sub
Version 2, plus simple, mais aussi efficace :
Option Explicit
Sub MaMacro()
'Auteur : Michel Berthiaume
' Masquer/Afficher l'onglet Documentation
' Touche de raccourci du clavier: Ctrl+Shift+M
'
On Error Resume Next
    Sheets("Documentation").Visible = _
                  Not Sheets("Documentation").Visible
End Sub

 

De retour dans Excel, créer un bouton (dans un autre feuille que celle qu’on veut masquer)

0-      Dans la feuille Feuil1

1-      Onglet Développeur

2-      Groupe Contrôles, cliquer Insérer

3-    Choisir le Bouton

Bouton

Cliquer dans la Feuille1

-          Choisir MaMacro dans la liste

Cliquer
     Ok
Nommer bouton   Bouton Documentation

Renommer le bouton :

-   Clic-droit

-   Touche Echap (Esc)

-   Sélectionner le texte Bouton 1

Taper Documentation
Bouton 1 Documentation

 

Cliquer le bouton Documentation affiche ou masque la feuille documentation.

 

Le document
VBA Excel - Enregistrer une macro-commande

répète les instructions précédentes.
 

Second exemple:
Identifier par une couleur les cellules déverrouillées de la feuille de travail active

Ce second exemple illustre l'utilisation de VBA pour automatiser une tâche Excel qu'il serait fastidieux de faire manuellement:
Colorer en jaune chaque cellule déverrouillée.

Démarrez Excel avec un classeur vierge.

Déverrouillez quelques cellules (A2, B1 et D1 par exemple)

Déverrouiller des cellules Excel

Ouvrez l'onglet Développeur, puis cliquez le bouton Visual Basic:

Si l'onglet DÉVELOPPEUR n’est pas affiché, retournez consulter comment configurer Excel.


Suggestion: disposez les 2 fenêtres (Excel et VBA) côte à côte:

 


Du menu Insertion (de VBA), sélectionnez module:    
 Changez le nom du module dans la zone de texte (Name) en bas à gauche. Remplacez
Module1


 
par un nom significatif ne contenant pas d’espace
ApprentissageVBA
par exemple.
 
Tapez (ou copiez-collez!) ce code VBA: Sub ArrièrePlan()
'Auteur: Michel Berthiaume
'Mettre en jaune les cellules non protégées de la plage A1:AZ256

Dim rCellule As Range

On Error GoTo Erreur:

For Each rCellule In [A1:AZ256]
    If Not rCellule.Locked Then
        rCellule.Interior.Color = vbYellow
    End If
    Application.StatusBar = "Traitement de la cellule " & rCellule.Address
Next

Exit Sub

Erreur:
    MsgBox "Erreur d'éxécution VBA " & Err.Description
End Sub
dans la zone de texte à droite:

Notez que
Option Explicit
ne devrait apparaître qu'une seule fois. 
 
Testez votre code:
  • Placez le curseur à l'intérieur de votre programme VBA (entre Sub et End Sub).

 

  • Appuyez sur la touche .

 

  •  La ligne se colore en jaune

 

 

 

 

 

 



VBA exécute une ligne à chaque fois que vous enfoncez la touche , en répétant les instructions encadrées par For et Next pour chaque cellule de la feuille Excel active.
Vérifiez les changements dans la feuille Excel.


Remarquez que la barre d'état d'Excel indique l'adresse de la cellule traitée par VBA.

Pour terminer l'exécution du programme, cliquez sur les boutons

Continuer : le programme s'exécutera pour chaque cellule

  • Si le sablier tarde à disparaître, arrêtez le programme en enfonçant ensembles
    les touches
    et
 

OU 
Réinitialiser: le programme s'arrêtera.

ATTENTION: vous devez terminer l'exécution d'un programme VBA selon la procédure ci-dessus
avant d'en exécuter un autre. En effet, si un programme est en débogage,  VBA et Excel sont en pause.
Rendez le programme disponible en Excel:
  • Retournez dans la feuille Excel, onglet développeur.
  • Dans le ruban développeur, bloc Insérer Contrôle,
    sélectionnez le Contrôle de formulaire Bouton
  • Dessinez un bouton dans la feuille active:         
  • Choisissez ArrièrePlan dans la liste.
  • Cliquez Ok
  • Verrouillez quelques cellules jaunes, déverrouillez-en d'autres.
  • Cliquez sur le bouton pour que les cellules déverrouillées se colorent en jaune.

Quelques commentaires sur ce  programme:

Si vous voulez enregistrer ce premier programme VBA Excel, suivez les recommandations dans le document

Enregistrer un classeur Excel contenant une macro VBA

Troisième exemple:
Fonction Excel qui compte le nombre de cellules d'une couleur donnée dans une plage donnée

Dans ce troisième exemple, on veut pouvoir écrire dans une cellule Excel la formule: =fnNbCellulesCouleur(A1:D3;D1) et ainsi afficher dans cette cellule le nombre de cellules de la plage A1:D3 dont la couleur est identique à la couleur de la cellule D1. Évidemment, on veut pouvoir remplacer A1:D3 et D1 par toute autre référence à une plage ou une cellule valide.

Tapez (ou copiez-collez!) le code VBA: Function fnNbCellulesCouleur(Plage As Range, Couleur As Range)
'Auteur: Michel Berthiaume
'Compter le nombre de cellules d'une couleur donnée dans une plage donnée
'Plage: plage de cellules à inspecter
'Couleur: cellule de la couleur cherchée

Dim rCellule As Range

For Each rCellule In Plage
    If rCellule.Interior.Color = Couleur.Interior.Color Then
        fnNbCellulesCouleur = fnNbCellulesCouleur + 1
    End If
Next
End Function

Sub Test()
Dim t
t = fnNbCellulesCouleur(Range("A1:D3"), Range("D1"))
End Sub
dans la zone de texte à droite:
VBA n'offre pas de moyen de tester directement une fonction. Procédons indirectement:

 

Placez le curseur sur la ligne SUB TEST.

 

Appuyez sur la touche .

 

La ligne se colore en jaune.

 

 






VBA exécute une ligne à chaque fois que vous enfoncez la touche
D'abord la 3e ligne de SUB TEST.    
Puis en exécutant les lignes de la fonction.
Appuyez sur la touche pour exécuter chaque ligne de la fonction.  
Pour terminer l'exécution de la fonction, cliquez sur les boutons

Continuer : la fonction s'exécutera pour chaque cellule

  • Si le sablier tarde à disparaître, arrêtez le programme en enfonçant ensembles
    les touches
    et
 

OU 
Réinitialiser: le programme s'arrêtera.

 

 

ATTENTION: vous devez terminer l'exécution d'une fonction VBA selon la procédure ci-dessus
avant d'exécuter un autre programme VBA. En effet, si un programme est en débogage,  VBA est en pause.

 

Utilisez la nouvelle fonction dans Excel.

Quelques commentaires sur le programme:

Quatrième exemple:
Boîte de dialogue d'accueil

Dans ce quatrième exemple, on veut qu'une fenêtre d'accueil s'affiche automatiquement lors de l'ouverture d'un classeur Excel.

Créez un formulaire:

Du menu Insertion, sélectionnez UserForm:
Changez le nom du formulaire dans la zone de texte (Name) en bas à gauche. Remplacez
UserForm1
par un nom significatif ne contenant pas d’espace
frmAccueil
par exemple.
Changez aussi le titre du formulaire, inscrit dans la zone de texte Caption, un peu plus bas
Du menu Affichage, sélectionnez :
Dans la boîte à outils, sélectionnez un intitulé:

Dessinez un libellé sur le formulaire.
Cliquez dans le libellé et changez son contenu
Dans la Boîte à outils, sélectionnez un bouton:

Dessinez un bouton sur le formulaire.
Cliquez dans le bouton et changez son libellé
Changez le nom du bouton dans la zone de texte (Name) en bas à gauche. Remplacez
CommandButton1
par
btnOk.
Double-cliquez sur le bouton Ok. Une fenêtre VBE s'ouvre
Tapez (ou copiez-collez!) le code VBA:
    Unload Me
dans la zone de texte à droite:

 

Testez le formulaire:

Double-cliquez sur frmAccueil pour vous assurer
que le formulaire est affiché en mode création:

Appuyez sur la touche computer key F5

pour exécuter la boîte de dialogue.

Appuyez sur le bouton
pour la fermer.

 

Associez l'ouverture du formulaire à l'ouverture du classeur Excel:

Dans l'explorateur de projet, double-cliquez sur ThisWorkbook
Dans la liste déroulante (général), choisir Workbook:
La seconde liste déroulante affiche Open
Dans la zone de texte, inscrire frmAccueil.Show 
entre les lignes Private Sub ... et End Sub:

Fermez Visual Basic ,

Sauvegardez le classeur Excel

Et fermez-le

 

Ouvrez à nouveau le classeur. Il est probable que vous devrez activer les macros.
L'écran d'accueil s'affichera alors automatiquement.
Vous pouvez le fermer en appuyant sur

 

Quelques commentaires sur le programme:

Sommaire

Dans la présente section, nous avons vus 4 sortes de programmes VBA Excel

Nous avons aussi présenté plusieurs modes d'emploi en format pdf:

 

Utiliser l'enregistreuse de macro-commandes

Afficher l'onglet DÉVELOPPEUR

Activer l'exécution des macros

Enregistrer un classeur Excel contenant une macro VBA

Déverrouiller des cellules Excel

Enregistrer un classeur Excel contenant une macro VBA

 

 

Fichier exemple

Le fichier Excel Tutoriel Exemples Accueil.xlsm contient les exemples présentés dans la présente section.

But et limites du tutoriel

Ce tutoriel est destiné à des étudiants de niveau universitaire en administration, n'ayant pas de connaissance en programmation, mais maîtrisant Excel.

Certains aspects de VBA ont été volontairement omis parce que jugés inutiles à cet auditoire.

Pour une description complète du langage, consultez un bon livre!

Références

VBA:

https://msdn.microsoft.com/fr-fr/VBA/VBA-Excel Référence VBA Excel de Microsoft

http://ericrenaud.fr/ Astuces et code VBA pour Excel
http://www.vbfrance.com/ Visual Basic Codes Sources. Les pages sont longues à charger.

 

Excel:
http://www.cathyastuce.com Cathy Astuces: astuces, cours, exercices sur Office et Windows.
http://www.admexcel.com Excel par l'exemple
http://www.misfu.com/cours-et-tutoriaux-tableur-excel.html Cours / Formation Excel
http://www.excel-online.net Le site pour maitriser le tableur Excel
 

Livres:

VB & VBA in a Nutshell: The Language, par Paul Lomax: Un des meilleurs livres de référence VBA. Pour programmeurs.

 

Aides-Mémoire:

Par Michel Cartereau, mai 2010

 

Suite: Concepts de programmation