# Macros-commandes VBA/Les Macros Excel

Sur les autres projets Wikimedia :
* « Microsoft Excel » sur Wikipédia
* « Raccourcis Excel » sur Wikibooks

## Introduction

La Macro-commande, le langage VBA, ces termes vous font peur ? Oui ? Et bien… Cette leçon est faite pour vous !!! Nous allons vous porter et vous encourager à vous servir de l’un des outils les plus intéressants développés depuis bien longtemps par Microsoft : la programmation VBA.
Une macro-commande, au sens informatique, est une série d'instructions qui sont exécutées les unes après les autres (toujours dans l’ordre séquentiel correspondant au rang de leur ligne de texte). La macro possède en général de nombreuses propriétés dont
* un nom qui permet sa réutilisation
* un commentaire qui permet sa compréhension
* plusieurs lignes de code informatique qui permettent chacune une action
Les lignes de texte contenant des ensembles cohérents d’instructions VBA (Visual Basic Application) sont appelées code du programme. Le codage (ou la programmation) désigne le fait de fabriquer ces lignes de texte de 2 manières complètement différentes :
* L’utilisateur béotien (en général non informaticien enregistre les lignes de code voulues via un système de magnétophone qui traduit en lignes d'instructions (plus exactement en code VBA) toutes ses interactions avec le logiciel grâce à un outil unique et magique : l’enregistreur de macros. En effet, la majorité des utilisateurs du tableur EXCEL redoute la complexité relative du langage VBA et tarde à se lancer dans la programmation, pensant devoir apprendre au préalable les fondamentaux prérequis pour le développement de logiciel.
* Le concepteur (en général programmeur confirmé VBA) crée et édite directement les lignes de code voulues à l'aide d'un outil de traitement de texte spécialisé
Cette leçon a été réalisée pour expliquer l’utilité de la Macro-commande sur tableur de la façon la plus ludique et compréhensible possible. Ainsi, le fil conducteur de ce cours sera d’expliquer graduellement comment utiliser les Macro-commandes de votre tableur favori.

## Historique

La Macro-commande pour tableur, exploitant le langage VBA a été créé en 1995 par Microsoft sous la version Excel 5, sa finalité : transformer les actions effectuées par l’utilisateur ou le logiciel en instructions informatiques VISUAL BASIC.
Exemple :
* Phase 1 : l'utilisateur démarre un enregistrement de la macro nommée macroQuiSouligne puis sélectionne des cellules, les souligne, arrête l'enregistrement
* Phase 2 : l'utilisateur sélectionne d'autres cellules puis appelle la macro nommée macroQuiSouligne, puis l'exécute, les nouvelles cellules sélectionnées seront alors soulignées

## Utilité des macros VBA

Les macros VBA dédiées à Excel (ou la programmation VBA) permettent de compléter des outils bureautiques déjà très performants et puissants (EXCEL, WORD, ACCESS, POWERPOINT, OUTLOOK, PROJECT, VISIO,...). Ci-dessous quelques exemples de ces compléments :
* Enregistrer des actions répétitives (une suite de tâches toujours effectuées automatiquement ou manuellement dans le même ordre)
* Mémoriser ces processus opératoires d'utilisations complexes, longues et répétitives
* Répéter ce qui a été enregistré précédemment (grâce au rappel du nom dédié à la macro)
* Améliorer ou créer de nouvelles commandes pour l’application hôte
* Améliorer ou créer de nouvelles fonctions inexistantes dans l’application hôte
* Créer des interfaces spécialisées (formulaires d'affichage ou de saisie)
* Personnaliser un logiciel (ruban ou options EXCEL)
* Faire interagir plusieurs documents bureautiques entre eux (par exemple : plusieurs classeurs EXCEL)
* Faire interagir plusieurs applications bureautiques entre elles (par exemple : piloter EXCEL avec POWERPOINT)
** WORD
** POWERPOINT
** OUTLOOK
** ACCESS
** PROJECT
** VISIO
* Ordonner, organiser les commandes entre elles

## Un heureux mariage
### Un Langage VISUAL BASIC

Visual Basic est le langage informatique développé dans les années 1980 par Microsoft pour banaliser la programmation. Les informaticiens puristes trouvent à VB un défaut majeur, il n’est pas un langage de programmation orienté objet. Cette affirmation est fausse, VBA comme la plupart des langages modernes ou WEB (PHP, RUBY, PHP, …) permet de créer ses propres objets (données, méthodes et instances) et donc de programmer des actions sur tout objet informatique accessible. Il permet aussi de manipuler des variables programmes non objets, ce qui en fait un langage de programmation à la fois procédural et à la fois orienté objet. L'intérêt majeur de la programmation Objet est qu’il n’est pas utile de connaître la composition et le fonctionnement d'un objet pour l’utiliser, seul son interface utilisateur (en général ses propriétés modifiables via VBA) doit être maîtrisée. Par analogie, lors de l’utilisation d'un téléviseur, il n’est pas nécessaire d’en connaître les composants et leur fonctionnement, seule son interface utilisateur (en général la télécommande) doit pouvoir être maniée.

### Un Logiciel EXCEL

Excel est le logiciel tableur développé dans les années 1980 par Microsoft pour effectuer tout type de calcul et afficher tout type de graphique. Ce logiciel, à ses débuts, était souvent cité comme le plus mauvais des logiciels de type Tableurs ; après quelques années seulement et un travail d'amélioration gigantesque, il est devenu le logiciel de référence des tableurs. Tant et si bien que l’on peut parler de situation de monopole, vu son taux de couverture de marché avoisinant les 100%. Le logiciel Excel est également l'hôte dont le VBA a besoin pour pouvoir être embarqué.

### Un Langage VB + Un Logiciel Excel = Une Visual Basic Application

Si vous utilisez le VBA, vous travaillez avec des objets. Le modèle Excel (comme le modèle Word ainsi que tous les autres modèles des logiciels MICROSOFT) possède des collections, des objets, des méthodes, des propriétés et réagit aux événements déclenchés par l'utilisateur.
Si vous vous servez directement d’Excel comme application hôte, vous ne devez pas déclarer d'objet Application dans le code VBA, vous ne devrez le faire que si vous utilisez une autre application hôte qu'Excel.
Certaines instructions VBA sont donc spécifiques à Excel, celles qui manipulent des objets EXCEL telles que l’affectation de formule à une cellule, l’ouverture de classeur, …

### Le développeur communique avec Excel via la bibliothèque d'objets

La bibliothèque d'objet contient tous les objets utilisés par le tableur : classeur, feuille, colonne, cellule … ainsi que toutes les opérations possibles sur ces objets. Par exemple : Application, Worksheets, Workbooks, Selection, Range, …

### Le développeur communique avec Excel via les macros

Les modules de code contiennent toutes les macros utilisés par le tableur : déclarations, procédures et fonctions

## Présentation du langage

L'objectif de ce cours est d'enseigner la programmation d’applications en Visual Basic (alias "la suite VB"), en réalisant des programmes qui fonctionnent sous Microsoft Windows.
En effet ce langage est considéré comme simple et rapide, avec un débogueur pas à pas (F8) permettant de suivre le programme au plus près pendant son exécution.
Certains autres langages s'en sont d'ailleurs inspirés et assurent dans la plupart des cas une compatibilité minimum avec VBA, comme OOo basic et Gambas. Les macros de chacun de ces langages sont stockées dans le document et peuvent être copiées dans d'autres, et même parfois converties en OpenOffice basic.
Visual Basic for Applications (VBA) est une implémentation de Microsoft Visual Basic qui est intégrée dans toutes les applications de Microsoft Office (ex : Microsoft Word, Microsoft Excel, ...), dans quelques autres applications Microsoft comme Visio et au moins partiellement dans quelques autres applications non Microsoft comme AutoCAD et WordPerfect. VBA, de plus, remplace et étend les capacités des langages macro spécifiques aux plus anciennes applications comme le langage WordBasic intégré à une ancienne version du logiciel Word. VBA peut aussi être utilisé pour contrôler la quasi-totalité de l'IHM des applications hôtes, ce qui inclut la possibilité de manipuler les fonctionnalités de l'interface utilisateur comme les menus, les barres d’outils et le fait de pouvoir personnaliser les boîtes de dialogue et les formulaires utilisateurs.

## Installation

Visual Basic est fourni avec le pack Microsoft Office, ce qui a le mérite de fournir des interfaces graphiques compatibles. Il est alors stocké dans différents types de fichiers .bas, .cls, .xls, .xlsm, .doc, .docm, .ppt, .pptm, .mdb, .mde. Il est recommandé de configurer ces logiciels en y ajoutant l'onglet "Développeur" dans le menu Fichier\Options\Personnaliser le ruban, et d'activer toutes les macros par défaut dans Fichier\Options\Centre de gestion de la confidentialité\Paramètres du Centre de gestion de la confidentialité\Paramètres des macros. Cet onglet permet par exemple d'enregistrer une macro reproduisant les opérations effectuées manuellement.
Il est toutefois également disponible gratuitement avec le compilateur Visual Studio express. Dans ce cas il sera présent dans les fichiers .vb, .sln, .dsw, .vcw, .vbproj. Une fois ce dernier installé il est recommandé d'afficher les numéros de ligne pour pouvoir se repérer plus facilement, dans le menu Tools\Options\Text Editor\All Languages\Line numbers.

### Chargement automatique de modules

Le format .xlsb sert à stocker des scripts VBA sans afficher de feuilles. Il peut ainsi être chargé silencieusement automatiquement à chaque ouverture de fichiers Excel. Pour ce faire, il suffit de :
* Enregistrer des macros dans les modules d'un .xlsb.
* Le placer dans C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Excel\XLSTART\.
* Cliquer dans l'onglet "Affichage" sur "Masquer".

### Chargement automatique de bibliothèques

Pour charger une bibliothèque de scripts .xla, .xlam ou .xll, il faut :
* Copier le fichier dans C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns\. Son code peut être protégé par un mot de passe, mais il s'exécutera quand même si on l'appelle.
* Dans l'éditeur de macros, Outils, Références, cliquer sur Parcourir pour accéder au fichier, et ainsi le faire apparaitre coché en haut de la liste.