100% ont trouvé ce document utile (1 vote)
267 vues77 pages

Cours VBA

Ce document décrit les fonctionnalités du langage VBA pour Excel, notamment la création de macros, de procédures et de fonctions, ainsi que la manipulation d'objets et de variables.

Transféré par

Steve Fotso
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
267 vues77 pages

Cours VBA

Ce document décrit les fonctionnalités du langage VBA pour Excel, notamment la création de macros, de procédures et de fonctions, ainsi que la manipulation d'objets et de variables.

Transféré par

Steve Fotso
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 77

Programmation VBA, dveloppement

rapide dinterfaces
Herv Hocquard
Sommaire
Introduction
VBA et Excel
Lditeur (VBE)
Modle objet de VBA
Procdures Sub
Procdure Function
Enregistrer des Macros
Programmation en VBA
Variables, instructions
Objets Range
VBA et fonctions
Droulement dun programme

2 Master IREF-Universit de Bordeaux


Introduction (1)
VBA: Visual Basic pour Application
Langage Visual Basic fortement associ la suite bureautique
MS Office : Word, Powerpoint Excel.

VBA et Excel:
Automatiser certaines tches
Excuter des actions en srie (traitement par lot ou batch
processing)
Commandes et boutons personnalises
Ajouter des boutons dans le ruban
Crer des interfaces graphiques et des applications avec Excel

3 Master IREF-Universit de Bordeaux


Avantages / inconvnients du VBA

Avantages Inconvnients

Automatisation dune Ncessite Excel


excution Prennit du code?
Rapidit Limit: difficile de produire
Rgularit de grosses applications
Sans erreurs (mais ce nest pas ce quon
Apprentissage facile lui demande)
permettant dtendre les
fonctionnalits dExcel
Fortement li Office

4 Master IREF-Universit de Bordeaux


But du module
Augmenter les capacits des applications bureautiques
(Excel) en proposant vos propres programmes, adapts
aux besoins

Dvelopper rapidement des interfaces sur un diteur


ddi afin de faciliter la prise en main de vos programmes
par dautres dans lentreprise

5 Master IREF-Universit de Bordeaux


Partie 1 : VBA et Excel
Lditeur (VBE)
Modle objet de VBA
Procdures Sub et Function

6 Master IREF-Universit de Bordeaux


Lditeur (Visual Basic Editor)

Alt + F11

7 Master IREF-Universit de Bordeaux


Insertion dun module dans lditeur

8 Master IREF-Universit de Bordeaux


Enregistrer une macro

9 Master IREF-Universit de Bordeaux


Enregistrer une macro

10 Master IREF-Universit de Bordeaux


Impact dans lditeur

11 Master IREF-Universit de Bordeaux


Le modle objet dans VBA
Un objet est constitu dattributs (ou proprits) et de
mthodes qui lui sont associes
Les objets existants sont constitus en hirarchie
(relation de composition)
Application

Addin CommandBar Workbook Window

Chart Name Worksheet

Comment Range Hyperlink

12 Master IREF-Universit de Bordeaux


Les collections
Concept cl
On rajoute un s !
Workbooks : collection des objets Workbook
Worksheets : collection des objets Worksheet
etc.

Faire appel un lment dune collection: 2 mthodes:


Appel par le nom de llment
Ex: Worksheets("Feuil1")
Appel par l'indice
Ex: Worksheets(1)

13 Master IREF-Universit de Bordeaux


Hirarchie: Accder aux objets
Oprateur point ( . )

Ex:
Application.Workbooks("Classeur1.xlsx").Wo
rksheets(1).Range("A1").Value=934

Simplification: par exemple si Classeur1.xlsx est le


classeur actif:
Worksheets(1).Range("A1").Value=934

14 Master IREF-Universit de Bordeaux


Proprits d'un objet

15 Master IREF-Universit de Bordeaux


Mthode d'un objet
Action relative un objet

Exemples:
Worksheets("Feuil1").Activate
Range("A1").Copy Range("B1")

Une mthode prend en compte 0, 1 ou plusieurs


arguments.
Le premier argument est spar de la mthode par un espace,
les arguments sont spars entre eux par des virgules
OU utilisation des parenthses

16 Master IREF-Universit de Bordeaux


Procdures
2 Types: Sub et Function
Une procdure Sub est un groupe d'instructions VBA qui
excute une ou plusieurs actions avec Excel.
Une procdure Function est un groupe d'instruction VBA qui
excute un calcul et retourne une seule valeur.
L'enregistreur de macros produit toujours une procdure
Sub.
Possibilit de lancer une procdure Sub via des raccourcis
clavier / des boutons personnaliss
Mais une procdure Function n'est appele que dans une
cellule ou dans une autre procdure.

17 Master IREF-Universit de Bordeaux


Syntaxe de base Sub

Il faut toujours indiquer o se trouve le dbut et la fin


du programme que lon crit.
Indique le dbut

Public Sub nom_du_programme(on peut mettre des


arguments ou pas)

squences dinstructions
End Sub

Indique la fin
18 Master IREF-Universit de Bordeaux
Syntaxe de base Function
Une fonction encapsule aussi un ensemble d'instructions, mais
retourne une valeur (dsigne par le nom mme de la
fonction).
Cette valeur doit tre affecte au nom de la fonction avant
la fin du bloc d'instructions.
Syntaxe :
Function nom(arg1 As type, ) As Type
Instructions
nom = exp_du_bon_type
Instructions
End Function

Il faut prciser le type de la valeur retourne.


19 Master IREF-Universit de Bordeaux
Partie 2 : Programmation en VBA
Variables, instructions
Objets Range
VBA et fonctions
Droulement dun programme
Evnements automatiques
Grer les erreurs
20 Master IREF-Universit de Bordeaux
Premiers pas
Pas de point virgule la fin d'une instruction
Une instruction par ligne
Espace + underscore (" _") pour crire une instruction sur
plusieurs lignes

Commentaires: commencer la ligne par une apostrophe

21 Master IREF-Universit de Bordeaux


Les Variables
Nommage:
Doit commencer par une lettre, puis lettres, chiffres et
quelques caractres spciaux
Pas de diffrence de casse
Caractres invalides: #, $, %, &, !
Maximum 254 caractres

Typage des donnes


Donnes peuvent tre non types explicitement: type Variant

22 Master IREF-Universit de Bordeaux


Typage des donnes

Type Valeurs
Boolean Vrai, faux
Integer Entiers
Long Entiers
Single Rels
Double Rels
Currency 4 chiffres aprs la ,
Date 1/1/100 31/12/9999
String Chaines de caractres
Object Tout objet
Variant N'importe quel type

23 Master IREF-Universit de Bordeaux


Dclarer des variables, porte
Forcer la dclaration: ajouter en dbut de module
Option Explicit

Porte: procdure courante:


Dim ou Static dans la procdure
Dim nomVariable As type

Porte: module:
Dim hors d'une procdure

Porte : toutes les procdures, tous les modules:


Public au tout dbut du module

24 Master IREF-Universit de Bordeaux


Variables particulires
Les variables Statiques
Ne sont pas rinitialises la sortie de la procdure (ex, pour des
compteurs)
Static Compteur As Integer

Les Constantes
la valeur est donne et ne peut changer
Const Pi As Double = 3.1415

Les dates
Doivent tre mises entre dises sous la forme:

25 Master IREF-Universit de Bordeaux


Instructions
Affectation : =
Oprateurs: +, *, /, -, ^, &, \, Mod
Oprateur logique: Not, And, Or, Xor, Eqv, Imp

26 Master IREF-Universit de Bordeaux


Les tableaux (1)

Dclaration
Dim MonTableau(1 to 100) As Integer
Index dbute 0 par dfaut;
Option Base 1

Tableaux multidimensionnels
Dim MonTableau(1 to 10, 1to 10) As Integer

Affectation
MonTableau(3,4) = 125

27 Master IREF-Universit de Bordeaux


Les tableaux (2)

Tableaux dynamiques
Cration
Dim MonTableau() As Integer

Redimensionnement
ReDim MonTableau(NombreElement)

Redimensionner en gardant les donnes dj prsentes


ReDim Preserve MonTableau(NombreElements)

28 Master IREF-Universit de Bordeaux


Les tableaux avec Array (3)
Structure pour afficher le contenu:
Dim mois As Variant
Dim m As Variant
mois = Array("Janvier", "Mars", "Aot", "Dcembre")
For Each m In mois
MsgBox m
Next m

Ou alors
Dim mois As Variant
Dim i As Integer
mois = Array("Janvier", "Mars", "Aot", "Dcembre")
For i = 0 To 3
MsgBox mois(i)
Next i
29 Master IREF-Universit de Bordeaux
L'objet Range (1)
Plage de cellule
Range("A1:C5"), Range("Liste_Prix") (plage nomme)
Range("3:3") (ligne entire), Range("D:D") (colonne
entire).
Proprits:
Cells Address
Offset hasFormula
Value Font
Text Interior
Count Formula
Column, Row NumberFormat

30 Master IREF-Universit de Bordeaux


L'objet Range (2)

Mthodes
Select : Slectionne une plage de cellule
Range("A1").Select
Selection.Value = "toto"
Range("A1").Value = "toto"
Copy, Paste
Range("A1:A2").Select
Selection.Copy
Range("C3").Select
ActiveSheet.Paste
Clear: efface le contenu et la mise en forme
Delete: supprime une plage (et dcale les cellules)

31 Master IREF-Universit de Bordeaux


L'objet Range (3)

Exemples tester et observer


Range("A1:H8").Formula = "=Rand()"
ActiveSheet.Cells(2, 1).Formula =
"=Sum(B1:B5)"
Worksheets(1).Range("C5:C10").Cells(1,
1).Formula = "=Rand()"

32 Master IREF-Universit de Bordeaux


Instructions de contrle
If Then : Excute une action si la condition est vrifie
Select Case : Excute une action parmi plusieurs, selon la
valeur retourne
For Next : Excute une srie d'instructions en boucle
autant de fois que spcifi
For Each Next: Parcourir une collection
Do While : Excute une srie d'instructions en boucle
tant que la condition est vraie (True)
Do Until : Excute une srie d'instructions en boucle
jusqu' ce que la condition soit vraie

33 Master IREF-Universit de Bordeaux


If / ElseIf / Then

34 Master IREF-Universit de Bordeaux


Select Case

35 Master IREF-Universit de Bordeaux


For Next
For compteur = dbut To Fin [Step intervalle]
[instructions]
[Exit For]
[instructions]
Next [compteur]

36 Master IREF-Universit de Bordeaux


Do While, Do Until

37 Master IREF-Universit de Bordeaux


Evnements
Action dclenchant l'appel d'une mthode
Primordial en interfaces graphiques!
Certains objets disposent d'vnements

38 Master IREF-Universit de Bordeaux


Partie 3 Les enregistrements
Type structur
Champs simples ou structurs

39 Master IREF-Universit de Bordeaux


Les enregistrements

Contrairement aux tableaux, ce type structur permet de


regrouper des donnes de types diffrents.
Exemple : on identifie un ouvrage par un code, un titre, un
ou plusieurs auteurs, un diteur et ventuellement la date
de parution.
Ouvrage est une variable de type enregistrement;
chacune de ces cinq donnes est un champ pouvant tre
simple ou structur.

40 Master IREF-Universit de Bordeaux


Les enregistrements
Les enregistrements sont dclars en VB avec le mot
Type.
Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
Champs
simples
End Type

Exemple :
Type ouvrage Type Date
code as Integer jour As Integer
titre As String*40 mois As Integer
auteur As String*50 annee As Integer
editeur As String*50 End Type
dateparution As Date
End Type
Champ
structur

41 Master IREF-Universit de Bordeaux


Les enregistrements
Exemple :
Type ouvrage Type Date
code as Integer jour As Integer
titre As String*40 mois As Integer
auteur As String*50 annee As Integer
editeur As String*50 End Type
dateparution As Date
End Type

Pour accder un champ :


Dim livre As ouvrage
livre.auteur = "Durand "
livre.dateparution.annee = 1980
on saperoit ici que lon pourrait remplacer livre par un tableau dans le type
ouvrageDim livre(1 To 10000) as ouvrage
livre(9).auteur = "Durand" sil sagit du neuvime livre de la liste

42 Master IREF-Universit de Bordeaux


Les enregistrements Exemple
Un tudiant est dfini par son nom, son prnom, sa date de naissance et
sa note :
Private Type Etudiant
nom As String * 40
prenom As String * 40
dateNaissance As Date
note As Double
End Type

Une classe peut contenir au plus 30 tudiants :


Const NbMax = 30 pour le nombre limite dtudiants
Private Type Classe
liste(NbMax) As Etudiant la liste est un tableau dtudiants
nbr As Integer le nombre rel des tudiants
End Type

On dclare ensuite la classe dtudiants :


Dim c As Classe

43 Master IREF-Universit de Bordeaux


Les enregistrements Exercice

Lexemple prcdent sera complt dans le prochain cours sur


les interfaces graphiques

Comment dfinir une matrice ?

Crer un programme qui affiche le nombre de lignes et de


colonnes dune matrice saisie sur la Feuil1 du classeur.

44 Master IREF-Universit de Bordeaux


Partie 4 Dveloppement Rapide dinterfaces
Botes de dialogue de base
UserForm et diteur graphique
Les diffrents contrles

45 Master IREF-Universit de Bordeaux


Ma MsgBox
Boite de dialogue de base, "personnalisable"
vbOKOnly 0 N'affiche que le bouton ok
vbOKCancel 1 Ok et Annuler
vbAbortRetryIgnore 2 Abandonner, Recommencer, Ignorer
vbYesNoCancel 3 Oui, Non, Annuler
vbYEsNo 4 Oui, Non
vbRetryCancel 5 Recommencer, Annuler
vbCritical 16 Icne message critique
vbQuestion 32 Icne Question
vbExclamation 48 Icne exclamation
vbInformation 64 Icne Information
vbDefaultButton1 0 Le premier bouton est par dfaut
vbDefaultButton2 256 Le 2ime bouton est par dfaut
vbDefaultButton3 512 Le 3ime bouton est par dfaut
vbDefaultButton4 768 Le 4ime bouton est par dfaut
vbSystemModal 4096 Suspend tout jusqu' une rponse de l'utilisateur

46 Master IREF-Universit de Bordeaux


Exemple de MsgBox

47 Master IREF-Universit de Bordeaux


Autres fentres classiques
InputBox
Permet de rcuprer une valeur entre par l'utilisateur

GetOpenFileName
Ouvre une boite de dialogue permettant de slectionner un
fichier sur le disque dur

GetSaveAsFileName
Bote de dialogue pour enregistrer un fichier

48 Master IREF-Universit de Bordeaux


Crer un UserForm personnalis
1) Imaginer la bote de dialogue: quoi sert-elle, o sera-
t-elle utilise?
2) Crer un nouvel objet userForm dans l'diteur VBE
3)Ajouter des contrles
Zones de textes
Boutons radio
Cases cocher
Listes
4) Modifier les proprits des lments
5) Ecrire les procdures d'vnements des diffrents
contrles
6)Ecrire la procdure affichant la bote de dialogue.
49 Master IREF-Universit de Bordeaux
L'diteur graphique de USerForm

50 Master IREF-Universit de Bordeaux


Editer les proprits des contrles

51 Master IREF-Universit de Bordeaux


Editer les procdures d'vnements
Double-cliquer sur le contrle dont on veut diter les
vnements

52 Master IREF-Universit de Bordeaux


Dtails sur les contrles (1)
La case cocher
Accelerator
Value
Zone de liste modifiable
ListRow
RowSource
Value
Bouton
Annuler
Default
Image
picture

53 Master IREF-Universit de Bordeaux


Dtail sur les contrles (2)
Multipage: faire des onglets.
Bouton d'option (bouton radio): slection d'UNE option
parmi plusieurs.
Un groupe est dfini par tous les boutons ayant la mme
proprit GroupName ou si tous les boutons sont dans un
mme cadre.
RefEdit: permettre l'utilisateur de slectionner une plage
dans une feuille de calcul
Barre de dfilement: ascenceur permettant de dfinir/
afficher une valeur

54 Master IREF-Universit de Bordeaux


Dtails sur les contrles (3)
Contrle Toupie: 2 boutons flchs permettant
d'incrmenter / dcrmenter une valeur
Contrle zone de texte: insrer du texte!
Bouton bascule: similaire la case cocher

55 Master IREF-Universit de Bordeaux


Dimensionner / Aligner les contrles

56 Master IREF-Universit de Bordeaux


Partie 5 Les structures complexes
Les piles
Les files

57 Master IREF-Universit de Bordeaux


Une pile

Analogie de la pile dassiettes


Last In First Out (LIFO)
Oprations possibles
Insrer un lment dans une pile
Supprimer un lment dune pile
lment du sommet de la pile
Cration dune pile vide
Tester si une pile est vide

58 Master IREF-Universit de Bordeaux


Mise en uvre dune pile

Plusieurs faons de faire :


En particulier, laide dun tableau :
Le nombre max dlments dans la pile
Le contenu de la pile
Un indice pour pointer sur le sommet de la pile

59 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Type de donnes :

Const NMAX=30

Type TPile
contenu(NMAX) as Integer
sommet As Integer
End Type

60 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Function PileVide(p As TPile) As Boolean


If (p.sommet = -1) Then
PileVide = True
Else
PileVide = False
End If
End Function

61 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Function PilePleine(p As TPile) As Boolean


If (p.sommet = NMAX - 1) Then
PilePleine = True
Else
PilePleine = False
End If
End Function

62 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Sub Empiler(p As TPile,elt As Integer)


If (PilePleine(p) = False) Then
p.sommet = p.sommet +1
p.contenu(p.sommet) = elt
Else
MsgBox(La pile est pleine !)
End If
End Sub

63 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Sub Depiler(p As TPile)


If (PileVide(p) = False) Then
p.sommet = p.sommet - 1
Else
MsgBox(La pile est vide !)
End If
End Sub

64 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exemple

Function sommet(p As TPile) As Integer


If (PileVide(p) = False) Then
sommet = p.contenu(p.sommet)
Else
MsgBox(La pile est vide !)
End If
End Function

65 Master IREF-Universit de Bordeaux


Une File

Analogie de la file dattente


First In First out (FIFO)
Oprations principales
Insertion dun lment
Suppression dun lment (le plus ancien de la file)
Quel est llment le plus ancien de la file ?
Cration dune file vide
Est-ce quune file est vide ?

66 Master IREF-Universit de Bordeaux


Mise en uvre dune file

Plusieurs faons de faire :


En particulier, laide dun tableau :
Le nombre max dlments dans la file
Le contenu de la file
Un indice dbut qui pointe sur llment le plus ancien de la file
Un indice fin qui pointe sur le dernier lment insr dans la file

67 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Type de donnes :

Const NMAX=30

Type TFile
contenu(NMAX) as Integer
debut As Integer
fin As Integer
End Type

68 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Function FileVide(f As TFile) As Boolean


If (f.debut = f.fin) Then
FileVide = True
Else
FileVide = False
End If
End Function

69 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Function FilePleine(f As TFile) As Boolean


If (f.debut=(f.fin + 1) mod NMAX) Then
FilePleine = True
Else
FilePleine = False
End If
End Function

70 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Sub Enfiler(f As TFile,elt As Integer)


If (FilePleine(p) = False) Then
f.contenu(f.fin) = elt
f.fin = (f.fin +1) mod NMAX
Else
MsgBox(La file est pleine !)
End If
End Sub

71 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Sub Defiler(f As TFile)


If (FileVide(f) = False) Then
f.debut = (f.debut+1) mod NMAX
Else
MsgBox(La file est vide !)
End If
End Sub

72 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exemple

Function Tete(f As TFile) As Integer


If (FileVide(f) = False) Then
Tete = f.contenu(f.debut)
Else
MsgBox(La file est vide !)
End If
End Function

73 Master IREF-Universit de Bordeaux


Mise en uvre dune pile : exercice
Crer un module pour simuler les piles.
Votre module doit contenir la procdure suivante :
Sub main()
Dim p As TPile
Dim i As Integer
i=1
While PilePleine(p)=False
Call Empiler(p,i)
i=i+1
WEnd
While PileVide(p)=False
MsgBox(Sommet(p))
Call Depiler(p)
Wend
End Sub

74 Master IREF-Universit de Bordeaux


Mise en uvre dune file : exercice

Une personne est dfinie par un numro, un nom et un


prnom.
Dfinir une structure PFile correspondant une file de
personne.
Adapter les diffrentes procdures et fonctions pour
quelles manipulent des files de personnes.

75 Master IREF-Universit de Bordeaux


Conclusion

A pratiquer en TP et sur le projet !

76 Master IREF-Universit de Bordeaux


Merci

Herv Hocquard ([email protected])

Alexis Clay-Herv Hocquard

77 Master IREF-Universit de Bordeaux

Vous aimerez peut-être aussi