Vous êtes sur la page 1sur 24

EXCEL VBA

01. INTRODUCTION

Interne
OBJECTIF DU COURS

EXCEL VBA 2
Interne
AUTO-ÉVALUATION

 Quel est votre niveau actuel en Excel VBA ?

WTF?!? Notions A l’aise Geek


 A quel point êtes-vous intéressés ? (Soyez honnêtes ☺)

Pas du tout Je me forcerai Curieux(se) Excité(e) !

EXCEL VBA 3
Interne
A QUOI ÇA SERT ?

 VBA (Visual Basic for Applications) est un langage de programmation simple, intégré à tous les outils
Microsoft Office (Excel, Outlook, Powerpoint, Word…), qui permet de créer des « macros » pour :
 Ajouter des fonctionnalités à ces outils
 Automatiser des tâches récurrentes et chronophages (*)
 Télécommander d’autres applications

(*) La RPA (Robotic Process Automation), qui consiste à remplacer les humains par des robots logiciels, est en plein
essor !

 VBA existe sous Windows (complet) et sous MacOS (quelques restrictions), mais pas dans Excel Online

EXCEL VBA 4
Interne
UN CAS RÉEL (ET PERSONNEL)

 Suivi mensuel de 250 projets  Automatisation au retour:


 Intégration des classeurs reçus dans le classeur principal
 Comparaison entre données reçues et données historisées,
 Un classeur Excel principal avec toutes les données avec alertes sur différences
et plein de macros  Génération d’un rapport Powerpoint de plusieurs pages
(texte, graphiques, tableaux)
 Envoi par courriel via Outlook du rapport aux dirigeants
 Automatisation à l’aller:
 Génération des 250 classeurs de suivi, avec données  Le tout en quelques dizaines de secondes au lieu de
deux jours de travail, chaque mois !
préremplies
 Envoi par courriel via Outlook des classeurs aux chefs
de projets concernés  Ou comment être payé à ne rien faire… ☺☺☺

EXCEL VBA 5
Interne
DÉROULÉ DU COURS (BBA)

Cours Cours e-Learning Cours Cours e-Learning Atelier e-Learning Examen


• Introduction • Erreurs • Consolidation des • Conditions • Itérations • Consolidation des • Cas pratique de • « 10 exercices fun » • Examen
• Enregistrement et • Variables & Types de acquis • Messages • Boucles acquis synthèse
exécution d’une données
macro • Objets
• Les User Defined • Manipulation de
Functions (UDF) feuilles et cellules

EXCEL VBA 6
Interne
DÉROULÉ DU COURS (MSC)

Cours Cours Atelier Cours Cours Atelier Atelier Atelier Examen


• Introduction • Erreurs • Mise en pratique • Conditions • Itérations • Mise en pratique • Cas pratique de • « 10 exercices fun » • Examen
• Enregistrement et • Variables & Types de • Messages • Boucles synthèse
exécution d’une données
macro • Objets
• Les User Defined • Manipulation de
Functions (UDF) feuilles et cellules

EXCEL VBA 7
Interne
C’EST PARTI !

EXCEL VBA 8
Interne
DEUX FAÇONS DE CRÉER DES MACROS

Enregistrer une macro Coder à la main

 Une fois:  Partir de zéro et écrire la macro soi-même


 Passer en mode « enregistrement »
 Réaliser des gestes dans Excel  Permet de tout faire, y compris des trucs super puissants…
 Terminer l’enregistrement et donner un nom à la macro
 …mais nécessite une bonne connaissance de VBA !
 Ensuite:
 Relancer la macro  Astuce :
 Excel réalise les mêmes gestes que vous  Enregistrer une macro
 Regarder le résultat produit
 Simple mais extrêmement limité et code généré dégueulasse  Adapter/Compléter à la main

EXCEL VBA 9
Interne
L’ONGLET « DÉVELOPPEUR »

 L’onglet « Développeur » n’est pas disponible par défaut:


 Windows: Clic-droit sur le ruban, Personnaliser le ruban, Cocher « Développeur »
 MacOS: Excel / Préférences / Ruban & Barres d’outils / Personnaliser le ruban / Onglets principaux / Cocher
« Développeur »

Editeur Visual Enregistrer une Propriétés des contrôles (texte,


Basic complet nouvelle macro couleur…)

Listes des Insérer un « contrôle » (bouton


macros créées à cliquer, case à cocher…)
EXCEL VBA 10
Interne
VOTRE TOUTE PREMIÈRE MACRO, YIPPEE !

 Taper un peu de contenu quelconque dans un classeur  Réutiliser la macro


Excel
 Sélectionnez d’autres cases
 Onglet Développeur, Macros, Sélectionner la macro
 Créer la macro: juste créée, Exécuter
 Se positionner sur une cellule non vide, Onglet
Développeur, Enregistrer une macro
 Excel refait tout ce que vous avez fait précédemment !

 Donner un nom (sans espaces ni accents) puis OK


 A partir de maintenant, tout ce que vous faites (y compris  C’était donc votre toute première macro ! ☺
des bêtises/erreurs) est enregistré par Excel
 Modifiez la mise en forme (couleur, couleur de fond, police,
taille, alignement…)
 Onglet Développeur, Arrêter l’enregistrement

EXCEL VBA 11
Interne
UN PEU DE CYBERSÉCURITÉ

 Les macros VBA, c’est du code informatique exécutable…

 …donc elle peuvent contenir des virus ou des programmes malveillants !

 Pour les repérer, les fichiers doivent être enregistrées dans un format particulier: *.xlsm (« m » pour macros)

 A l’ouverture, une confirmation d’activation des macros est demandée

 D’ailleurs, enregistrez votre classeur (Enregistrer sous, Type = « Classeur Excel prenant en charge les macros »)

 N’activez jamais les macros d’un classeur provenant d’un inconnu, y compris les exemples sur Internet !!!

EXCEL VBA 12
Interne
LE CODE VBA DE VOTRE PREMIÈRE MACRO

 Onglet Développeur, Macros, Sélectionner votre macro, Modifier (votre exemple sera forcément un peu différent)
 C’est beaucoup trop compliqué pour l’instant mais voici quelques clés de compréhension:
Code tapé
directement « Sub » + Nom
à la main, de votre macro
Code généré plus court
automatiquement, et plus clair
On prend des
incompréhensible et « propriétés » et
plein de lignes inutiles on leur affecte
une valeur

Des espaces en début


de ligne (indentation)
pour plus de clarté « Selection »: On travaille sur
les cases sélectionnées
EXCEL VBA 13
Interne
PREMIERS ENSEIGNEMENTS SUR VBA

 Une macro VBA, c’est du texte, avec des instructions qui sont exécutées les unes à la suite des autres

 Une macro est déclarée par Sub Nom_de_la_Macro puis terminée par End Sub (de l’anglais subroutine)

 Le nom d’une macro est limité à l’alphabet anglais (ni accents ni caractères spéciaux) sans espaces (mais on peut utiliser le « blanc
souligné » _ pour séparer les mots)

 Le nom de la macro est suivi de parenthèses (comme toutes les fonctions Excel)

 L’indentation (retrait en début de ligne) n’est pas obligatoire mais c’est plus lisible

 Les textes (= chaînes de caractères) sont entre guillemets pour ne pas les confondre avec une instruction VBA: "Courier New"

EXCEL VBA 14
Interne
UNE LOGIQUE ARBORESCENTE

 Le point permet de partir de quelque chose de grand/global puis de « zoomer » vers des éléments plus
petits/spécifiques. Par exemple pour Selection.Font.Bold = True:
 On commence par la sélection (Selection)
 Sur cette sélection, on zoome sur la police (Font)
 Sur cette police, on zoome sur la propriété Gras (Bold)

 On retrouvera cela tout le temps en VBA. Par exemple:


 ActiveWorkbook.Worksheets("Ma feuille").Range("A1").Interior.Color
 On part du classeur actif (ActiveWorkbook), on zoome sur la feuille « Ma feuille » (Worksheets), on zoome sur la cellule A1
(Range), on zoome sur l’intérieur de cette cellule (Interior), on zoome sur la couleur de cet intérieur (Color)

EXCEL VBA 15
Interne
DIY: MACRO À LA MAIN

 Vous pouvez (= devez) chercher sur Internet si vous


ne savez pas (tout le monde le fait, y compris moi)

 Onglet Développeur, Visual Basic puis créez de


toutes pièces votre propre macro qui agit sur la
sélection:
 Mettre le texte en couleur rouge (vbRed), italique,
taille 32, police Arial
 Mettre le fond en couleur verte (vbGreen)
 Centrer le texte

EXCEL VBA 16
Interne
LES « USER-DEFINED FUNCTIONS » (UDF)

EXCEL VBA 17
Interne
PRINCIPE DES UDF

 Excel propose par défaut de nombreuses fonctions à utiliser dans vos formules :
 Certaines sont très simples: SOMME, MOYENNE, MAX …
 D’autres sont assez évoluées: SI, RECHERCHEV, NB.SI.ENS …
 Voire carrément plus complexes: LOI.KHIDEUX.INVERSE.DROITE, RENDEMENT.BON.TRESOR …

 Et pourtant:
 Certaines formules manquent parfois
 Ou elles doivent être remplacées par des formules super compliquées et interminables

 Les UDF (User-Defined Functions) sont des formules créées par vos soins, selon vos propres besoins

EXCEL VBA 18
Interne
EXEMPLE 1: MA_FONCTION_ZERO()

 Nous allons créer une formule qui renvoie toujours


zéro (c’est simple, bête et inutile mais très
formateur)

 Onglet Développeur, Visual Basic

 Clic-droit sur VBAProject, Insertion, Module puis


sélectionner le module si ce n’est pas automatique

 Un « module » est un endroit où on stocke notre


code VBA (un seul suffira pour nos besoins)

EXCEL VBA 19
Interne
EXEMPLE 1: CODE À TAPER

Function Option Explicit


Nom de la fonction
Pour dire qu’on On en parlera plus tard (ni espaces ni accents)
crée une fonction

()
Parenthèses pour
les paramètres
(il n’y en a pas ici)
End Function
Pour dire que la Pour retourner une valeur,
fonction est finie on dit que la fonction (son
nom) est égale à cette valeur

EXCEL VBA 20
Interne
DIFFÉRENCE ENTRE ROUTINE (SUB) ET FONCTION (FUNCTION)

 Une routine:  Une fonction:


 Est introduite par Sub  Est introduite par Function
 Ne retourne aucune valeur  Retourne toujours une valeur
 Peut prendre des paramètres (valeurs fournies en  Peut prendre des paramètres ou pas
entrée) ou pas
 N’apparaît pas dans la liste des macros
 Apparaît dans la liste des macros (uniquement si elle ne
 Apparaît dans la liste des fonctions Excel
prend pas de paramètres, donc qu’elle est autonome)
 N’apparaît pas dans la liste des fonctions Excel

EXCEL VBA 21
Interne
EXEMPLE 2: MULTIPLIER(…)

 Notre première formule ne prend aucune paramètre (= on ne lui passe aucune valeur)

 Il y en a plein dans Excel et elles sont suivies de parenthèses vides : =ALEA(), =AUJOURDHUI(), =PI()…

 Certaines formules nécessitent un ou plusieurs paramètres :


 =RACINE(nombre) calcule la racine carrée de nombre
 =MAX(nombre1;nombre2) renvoie le maximum entre nombre1 et nombre2
 =SI(condition;valeur1;valeur2) renvoie valeur1 si la condition est vraie, valeur2 sinon
 =SOMME(début:fin) pour faire la somme de toute les valeurs sur une plage allant de début à fin

 Créons une fonction MULTIPLIER(nombre1;nombre2) qui multiplie deux nombres et renvoie le résultat

EXCEL VBA 22
Interne
EXEMPLE 2: CODE À TAPER

On liste nos paramètres,


entre les parenthèses et
séparés par une virgule

Signe *
pour Multiplier

EXCEL VBA 23
Interne
DIY: LA FONCTION MA_COMMANDE()

 On commande un produit et on veut savoir combien


cela va nous coûter, en fonction du nombre d’articles
commandés, du prix unitaire et des frais de port

 Créez de toutes pièces votre propre fonction qui :


 S’appelle MA_COMMANDE()
 Prend trois valeurs en paramètre
 Multiplie les deux premières puis ajoute la troisième

 Vérifiez qu’elle renvoie bien 568,77 € quand on


commande 123 articles à 4,56 € avec des frais de port
de 7,89 €

EXCEL VBA 24
Interne

Vous aimerez peut-être aussi