Déclarations, types et références
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.
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.
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:
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
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… |
|
Puis
1-
Feuille
2-
Cliquer |
|
Puis
1-
Clic-droit sur Feuil2
2-
Renommer Puis nommer la feuille Documentation |
|
Démarrer l’enregistrement 1- Onglet Développeur
2-
Enregistrer une Macro |
|
Puis
1-
Donner un nom à l’enregistrement
2-
Assigner une touche (ici M majuscule)
3-
Documenter l’enregistrement |
|
Masquer la feuille Documentation 1- Clic-droit sur le nom de la feuille 2- Choisir Masquer |
|
Arrêter l’enregistrement 1- Onglet Développeur 2- Arrêter l’enregistrement |
|
Consulter le code VBA enregistré 1- Onglet Développeur
2-
Visual Basic |
|
Puis
1-
Ouvrir le dossier Modules
|
|
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
|
|
Cliquer dans la Feuille1
-
Choisir MaMacro dans la liste |
|
Renommer le bouton :
-
Clic-droit
-
Touche Echap (Esc)
-
Sélectionner le texte Bouton 1 |
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.
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:
|
|
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
OU |
|
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:
|
|
|
|
|
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
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
|
|||
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:
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 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:
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
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
Le fichier Excel Tutoriel Exemples Accueil.xlsm contient les exemples présentés dans la présente section.
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!
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