# Macros-commandes VBA/Création de Graphique
## Définitions
### Qu’est-ce qu’un graphique ?

Un graphique permet de représenter des données chiffrées pour qu’elles soient plus lisibles. Il s'agit d'une "représentation visuelle".
Ainsi, un graphique permet de mieux comprendre les chiffres et de mieux les analyser. Cela permet également d'expliquer certains phénomènes. On voit plus facilement les relations entres plusieurs données.
Excel donne la possibilité à ses utilisateurs de créer un graphique à partir d'une base de données.
Excel permet à ses utilisateurs d’avoir un large choix dans les types de graphiques :
* Histogramme
* Courbes
* Secteurs
* Barres
* Aires
* Nuage de points
* Boursier
* Surface
* Anneau
* Bulles
* Radar
Sous Excel, une représentation graphique est issue d'un tableau réalisé au préalable.

### Qu’est-ce qu’une macro ?

Une macro ou macro-commande permet d'enregistrer une suite d'instructions écrites les unes après les autres. L'enregistrement d'une macro donne naissance à un code qui se fait en langage VBA (Visual Basic for Applications). Le langage VBA est un dérivé du langage Visual Basic, spécialement développé pour les applications du pack Office (Word, Excel, PowerPoint).
Lorsque l’on exécute la macro, le tableur va interpréter les différentes instructions sauvegardées dans le code de la macro à exécuter. Cette exécution permettra de reproduire l'intégralité des commandes enregistrées. Chaque étape sera répétée à l'identique à chaque exécution de la macro.
La macro a pour finalité d'automatiser des tâches afin de les rendre beaucoup plus rapides que si elles avaient été effectuées manuellement.
Dans le cadre d'un projet d'entreprise, elles peuvent aussi avoir un intérêt lors de tests répétitifs de contrôle de qualité des données et/ou de tests de non-régression.
Son rôle est aussi de simplifier la vie de l'utilisateur. La macro est souvent utilisée lorsqu'une tâche est répétitive, ce qui permet à l'utilisateur de travailler beaucoup plus rapidement et efficacement sans erreurs manuelles.

## Comment créer un graphique à partir d’un tableau créé manuellement ?
### Créer une base de données

Pour créer un graphique, il faut dans un premier temps créer une base de données dans un tableur pouvant faire appel aux graphiques.
Cette base de données devra alors contenir des titres en colonnes et/ou en lignes, puis devra être alimentée selon les besoins de l’utilisateur qui crée le tableau.
Les titres présents en colonnes ou en lignes sont utilisés afin d’avoir une légende claire et précise.
Prenons l'exemple d'une entreprise X, admettons que celle-ci souhaite étudier l'évolution de son chiffre d'affaires sur 5 ans.

### Création manuelle du graphique

Après avoir créé une base de données, il devient alors facile de lui associer un graphique. Pour ce faire, il suffit de :
* Sélectionner la base de données
* Cliquer sur la rubrique "Insertion"
* Cliquer sur "Graphiques"
* Choisir le type de graphique le plus adapté
Lors de la sélection des données, il est conseillé de sélectionner la totalité des colonnes (jusqu'en bas de la feuille). Cela évite de devoir redéfinir la source du graphique à chaque nouvelle saisie dans la base de données.

### Configurer le graphique

Pour configurer le graphique, il suffit d'aller dans les différentes rubriques :
* Création : elle a pour but de modifier le type de graphique ; de changer la source des données ; de configurer la disposition du graphique ; de modifier les couleurs du graphique etc.
* Disposition : elle a pour but d'insérer des objets ; d'ajouter des étiquettes de données ; d'ajouter des titres, etc.
* Mise en forme : elle a pour but de modifier la mise en forme

## Comment créer automatiquement un graphique à l’aide d’une macro ?
### Test avec enregistrement
#### Démarche

Pour automatiser la création d'un graphique, on peut utiliser la méthode de l’enregistreur.
La démarche est la suivante :
1ère étape : Création de la macro
* Activation de l’enregistreur
* Dénomination de la macro : « CREERGRAPHIQUE » ; « OK »
* Sélection des données : sélectionner les colonnes afin que cela prenne en compte toutes les lignes en cas d’ajout de données
* Insertion du graphique : « Insertion » ; « graphique »
* Choix du type de graphique
* Choix de la mise en forme
* Ajout des étiquettes de données
* Arrêt de l’enregistreur
2ème étape : Exécution de la macro
Lors de l'exécution de la macro, il peut se produire deux choses :
* Soit la macro s'exécute parfaitement
* Soit une boîte de dialogue s’ouvre pour indiquer une erreur (Annexe 2)
Dans ce cas présent, la macro s'effectue correctement.
3ème étape : Analyse de l’écriture dans Visual Basic
Il est intéressant d'analyser l'écriture Visal Basic, surtout en cas d'erreur. La méthode de l'enregistreur pour créer un graphique ne génère pas d'erreur contrairement à d'autres créations. Il n'y a donc pas besoin de retoucher l'écriture.
Lorsqu’il y a une erreur dans la macro, une boîte de dialogue apparaît pour nous l'indiquer (Annexe 2). Il est alors facile de localiser la partie du code incorrecte car celle-ci est surlignée en jaune.
En reprenant l'exemple de l'entreprise X, suite à l'enregistrement, nous obtenons l'écriture suivant sous Visual Basic :
4ème étape : Masquer les étapes de l'exécution de la macro
Afin de ne pas voir les différentes étapes et d'améliorer les performances de la macro lors de son exécution, il est possible de les masquer (désactiver la carte vidéo de l'ordinateur) :
* Ajouter au début de la macro :
* Ajouter à la fin de la macro :
5ème étape : L'écriture finale pour créer un graphique automatiquement
En reprenant l’exemple de l’entreprise X, l'écriture finale qui apparaît sous Visual Basic est :
6ème étape : Création d'un bouton
* Créer un bouton : Insertion d'une forme
* Ajouter un texte : clic droit ; "modifier le texte" ; exemple : "CREER UN GRAPHIQUE"
* Affecter la macro : clic droit ; "affecter une macro" ; choisir la macro "CREERGRAPHIQUE" ; "OK"
Pour pouvoir comprendre les étapes de la macro, il est possible de suivre l'écriture Visual Basic en utilisant la touche F8.

#### Avantages

Les avantages de la création d'un graphique automatique avec l'enregistreur :
* Macro générée automatiquement par l’enregistreur
* Méthode simple lorsque l’on ne connaît pas le langage VBA pour créer un graphique
* Permet de se familiariser avec le langage VBA

#### Inconvénients

Les inconvénients de la création d'un graphique automatique avec l'enregistreur :
* Méthode peu souple
* Restreint les utilisateurs
* Source d'erreur
* La macro peut seulement faire les actions que l’on a enregistré
* De ce fait, elle ne laisse pas le choix du type de graphiques
De manière générale :
* Lorsqu’il y a une erreur, la macro ne fonctionne pas du tout
* Il faut parfois revenir sur le code
* Il n’est pas évident de comprendre les erreurs de programmation

### Test avec langage Visual Basic
#### Démarches

Notre objectif est ici de créer un graphique via le code VBA.
Nous avons deux possibilités :
* Créer un graphique sur une nouvelle feuille (feuille de graphique)
* Créer un graphique sur notre feuille de calcul (feuille des données)
Nous allons expliquer les deux démarches ci-dessous.
Nous remplissons un tableau de base avec toutes les données.
Par exemple le tableau ci-contre concernant l'évolution des ventes de noël de 2012 à 2015 :
* 1ère possibilité : Créer un graphique sur une nouvelle feuille (feuille de graphique) :
La démarche de notre programmation est la suivante :
1. Dimensionner les variables utilisées dans le code (phase facultative mais recommandée pour limiter les erreurs) 2. Définir la plage des données sources du graphique
3. Supprimer le graphique si déjà existant afin de rafraîchir proprement notre graphique 4. Créer le graphique en indiquant le type de graphique (ici histogramme), la plage du graphique, le titre, l'intitulé du titre s'il y a et enfin le nom de la feuille qui recevra le graphique
5. Afficher la feuille où se situe le graphique (facultatif mais pratique afin de voir directement le résultat de notre graphique) Ci-dessous le code utilisé :
* 2ème possibilité : Créer un graphique sur notre feuille de calcul (feuille des données) :
La démarche de notre programmation est la suivante :
1. Dimensionner les variables utilisées dans le code 2. Dans la feuille de donnée (avec "With"), définir la plage accueillant le graphique, créer le graphique et mettre la source des données du graphique 3. Dans le graphique (avec "With"), définir le type de graphique (ici barre empilée), la source du graphique, la présence ou non de titre avec l'intitulé et enfin la position de la légende
5. Afficher la feuille où se situe le graphique Ci-dessous le code utilisé :

#### Avantages

Les avantages de la création d'un graphique automatique avec le langage Visual Basic :
* Suppression des erreurs humaines dès lors que le programme est débogué et qu’il n'y a pas de modification de la structure des données de base
* Automatisation des tâches répétitives
* Une fois créé, c’est un gain de temps pour l'utilisateur
* Simplification de la transmission des connaissances à d'autres utilisateurs
* Choix de n’importe quel type de graphique présent dans Excel
* Harmonisation de la structure d'un graphique pour un ensemble d'utilisateurs. Le graphique "officiel" ne pourra pas prendre une autre forme que celui programmé

#### Inconvénients

Les inconvénients de la création d'un graphique automatique avec le langage Visual Basic :
* Nécessite une connaissance technique d'Excel et VBA pour développer le programme et le déboguer
* Demande un investissement en temps au départ pour mettre en œuvre la solution finalisée
* Demande une transmission des savoirs lors des changements d'organisation du travail

## Comment personnaliser son graphique via le langage VBA ?
### Les constantes utilisées pour choisir un type de graphique

Lorsque nous créons un graphique il faut indiquer "ChartType= XXX"
"XXX" étant l'une des constante ci-dessous (principaux types de graphiques) :
* xlArea - Aires
* xlAreaStacked - Aires empilées
* xl3DArea - Aires 3D
* xlBarOfPie - Barres de secteurs
* xlBarStacked - Barres empilées
* xl3DBarStacked - Barres 3D empilées
* xlBubble - Bulles
* xlBubble3DEffect - Bulles 3D
* xlLine - Courbes
* xlLineMarkersStacked - Courbes empilées avec marqueurs
* xl3DLine - Courbes 3D
* xlColumnClustered - Histogramme en cluster
* xlColumnStacked - Histogramme empilé
* xl3DColumn - Histogramme 3D
* xl3DColumnClustered - Histogramme 3D en cluster
* xl3DColumnStacked - Histogramme 3D empilé
* xlXYScatter - Nuages de points
* xlXYScatterLines - Nuages de points avec courbes
* xlRadar - Radar
* xlPie - Secteurs
* xl3DPie - Secteurs 3D
* xlSurface - Surface 3D
Par exemple si nous utilisons le type de graphique "secteur" correspondant à la constante xlPie, nous obtenons (en reprenant notre exemple du dessus) :

### Manipuler la taille du graphique

Il vous est possible de changer la taille du graphique, pour cela, il faut utiliser ce langage :
Ce code va vous permettre d'agrandir votre graphique.
ScaleHeigt va être la mesure pour redimensionner la hauteur du graphique et ScaleWidth la largeur.

### Manipuler les couleurs d'un graphique

Il est possible de changer les couleurs des courbes d'un graphique, pour cela il faut utiliser le code suivant (mettre la courbe en rouge par exemple) :
Voici en langage VBA, les codes couleurs pour les principales couleurs utilisées :

### Manipuler les axes d'un graphique

Il est possible via le langage VBA de manipuler les axes d'un graphique :
En reprenant l'exemple ci-dessus de la macro "CreerGraphiqueFeuilleDonnees" :
On peux rajouter au code du dessus ce code :
Ce code permet :
* D'inverser l'axe xlCategory
* De classer les catégories par grandeur
* De donner un titre à l'axe "Produits"
* De mettre en gras et de colorier les étiquettes
Ce qui donne :
Voici ce que nous obtenons en manipulant le graphique :

### Ajouter un texte sur le graphique

Pour ajouter un texte sur le graphique, il faut utiliser le langage suivant :

### Modifier le nom du graphique

Pour modifier le nom du graphique, il faut utiliser le langage suivant :

### Remplacer le graphique par une image

Il est possible de remplacer le graphique par une image.
Voici le code nécessaire ci-dessous :