100% ont trouvé ce document utile (1 vote)
23 vues79 pages

Programmation VBA pour Excel

VBA

Transféré par

elie sanza
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)
23 vues79 pages

Programmation VBA pour Excel

VBA

Transféré par

elie sanza
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

Programmation VBA, développement

rapide d’interfaces
Hervé Hocquard
Sommaire
 Introduction
 VBA et Excel
 L’éditeur (VBE)
 Modèle objet de VBA
 Procédures Sub
 Procédure Function
 Enregistrer des Macros
 Programmation en VBA
 Variables, instructions
 Objets Range
 VBA et fonctions
 Déroulement d’un programme

2 L3-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 tâches
 Exécuter des actions en série (traitement par lot ou batch
processing)
 Commandes et boutons personnalisées
 Ajouter des boutons dans le ruban
 Créer des interfaces graphiques et des applications avec Excel

3 L3-Université de Bordeaux
Avantages / inconvénients du VBA

Avantages Inconvénients
 Automatisation d’une  Nécessite Excel
exécution  Pérennité du code?
 Rapidité  Limité: difficile de produire
 Régularité de « grosses » applications
 Sans erreurs (mais ce n’est pas ce qu’on
 Apprentissage « facile » lui demande)
permettant d’étendre les
fonctionnalités d’Excel
 Fortement lié à Office

4 L3-Université de Bordeaux
But du module
 « Augmenter » les capacités des applications bureautiques
(Excel) en proposant vos propres programmes, adaptés
aux besoins

 Développer rapidement des interfaces sur un éditeur


dédié afin de faciliter la prise en main de vos programmes
par d’autres dans l’entreprise

5 L3-Université de Bordeaux
Partie 1 : VBA et Excel
 L’éditeur (VBE)
 Modèle objet de VBA
 Procédures Sub et Function

6 L3-Université de Bordeaux
L’éditeur (Visual Basic Editor)

Alt + F11

7 L3-Université de Bordeaux
Insertion d’un module dans l’éditeur

8 L3-Université de Bordeaux
Enregistrer une macro

9 L3-Université de Bordeaux
Enregistrer une macro

10 L3-Université de Bordeaux
Impact dans l’éditeur

11 L3-Université de Bordeaux
Le modèle objet dans VBA
 Un objet est constitué d’attributs (ou propriétés) et de
méthodes qui lui sont associées
 Les objets existants sont constitués en hiérarchie
(relation de composition)
Application

Addin CommandBar Workbook Window

Chart Name Worksheet

Comment Range Hyperlink …

12 L3-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 élément d’une collection: 2 méthodes:


 Appel par le nom de l’élément
 Ex: Worksheets("Feuil1")
 Appel par l'indice
 Ex: Worksheets(1)

13 L3-Université de Bordeaux
Hiérarchie: Accéder aux objets
 Opérateur point ( . )

 Ex:
[Link]("[Link]").Wo
rksheets(1).Range("A1").Value=934

 Simplification: par exemple si [Link] est le


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

14 L3-Université de Bordeaux
Propriétés d'un objet

15 L3-Université de Bordeaux
Méthode d'un objet
 Action relative à un objet

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

 Une méthode prend en compte 0, 1 ou plusieurs


arguments.
 Le premier argument est séparé de la méthode par un espace,
les arguments sont séparés entre eux par des virgules
 OU utilisation des parenthèses

16 L3-Université de Bordeaux
Procédures
 2 Types: Sub et Function
 Une procédure Sub est un groupe d'instructions VBA qui
exécute une ou plusieurs actions avec Excel.
 Une procédure Function est un groupe d'instruction VBA qui
exécute un calcul et retourne une seule valeur.
 L'enregistreur de macros produit toujours une procédure
Sub.
 Possibilité de lancer une procédure Sub via des raccourcis
clavier / des boutons personnalisés…
 Mais une procédure Function n'est appelée que dans une
cellule ou dans une autre procédure.

17 L3-Université de Bordeaux
Syntaxe de base Sub

 Il faut toujours indiquer où se trouve le début et la fin


du programme que l’on écrit.
Indique le début

Public Sub nom_du_programme(on peut mettre des


arguments ou pas)

‘ séquences d’instructions
End Sub

Indique la fin
18 L3-Université de Bordeaux
Syntaxe de base Function
 Une fonction encapsule aussi un ensemble d'instructions, mais
retourne une valeur (désignée par le nom même de la
fonction).
 Cette valeur doit être affectée 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 préciser le type de la valeur retournée.


19 L3-Université de Bordeaux
Partie 2 : Programmation en VBA
 Variables, instructions
 Objets Range
 VBA et fonctions
 Déroulement d’un programme
 Evènements automatiques
 Gérer les erreurs
20 L3-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 L3-Université de Bordeaux
Les Variables
 Nommage:
 Doit commencer par une lettre, puis lettres, chiffres et
quelques caractères spéciaux
 Pas de différence de casse
 Caractères invalides: #, $, %, &, !
 Maximum 254 caractères
 Typage des données
 Données peuvent être non typées explicitement: type Variant

22 L3-Université de Bordeaux
Typage des données

Type Valeurs
 Boolean  Vrai, faux
 Integer  Entiers
 Long  Entiers
 Single  Réels
 Double  Réels
 Currency  4 chiffres après la ,
 Date  1/1/100 à 31/12/9999
 String  Chaines de caractères
 Object  Tout objet
 Variant  N'importe quel type

23 L3-Université de Bordeaux
Déclarer des variables, portée
 Forcer la déclaration: ajouter en début de module
 Option Explicit

 Portée: procédure courante:


 Dim ou Static dans la procédure
 Dim nomVariable As type

 Portée: module:
 Dim hors d'une procédure

 Portée : toutes les procédures, tous les modules:


 Public au tout début du module

24 L3-Université de Bordeaux
Variables particulières
 Les variables Statiques
 Ne sont pas réinitialisées à la sortie de la procédure (ex, pour des
compteurs)
 Static Compteur As Integer

 Les Constantes
 la valeur est donnée et ne peut changer
 Const Pi As Double = 3.1415

 Les dates
 Doivent être mises entre dièses sous la forme:

25 L3-Université de Bordeaux
Instructions
 Affectation : =
 Opérateurs: +, *, /, -, ^, &, \, Mod
 Opérateur logique: Not, And, Or, Xor, Eqv, Imp

26 L3-Université de Bordeaux
Les tableaux (1)

 Déclaration
 Dim MonTableau(1 to 100) As Integer
 Index débute à 0 par défaut;
 Option Base 1

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

 Affectation
 MonTableau(3,4) = 125

27 L3-Université de Bordeaux
Les tableaux (2)

 Tableaux dynamiques
 Création
 Dim MonTableau() As Integer

 Redimensionnement
 ReDim MonTableau(NombreElement)

 Redimensionner en gardant les données déjà présentes


 ReDim Preserve MonTableau(NombreElements)

28 L3-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", "Août", "Décembre")
For Each m In mois
MsgBox m
Next m

 Ou alors…
Dim mois As Variant
Dim i As Integer
mois = Array("Janvier", "Mars", "Août", "Décembre")
For i = 0 To 3
MsgBox mois(i)
Next i
29 L3-Université de Bordeaux
L'objet Range (1)
 Plage de cellule
 Range("A1:C5"), Range("Liste_Prix") (plage nommée)
Range("3:3") (ligne entière), Range("D:D") (colonne
entière).
 Propriétés:
Cells Address
Offset hasFormula
Value Font
Text Interior
Count Formula
Column, Row NumberFormat

30 L3-Université de Bordeaux
L'objet Range (2)

 Méthodes
 Select : Sélectionne une plage de cellule
 Range("A1").Select
[Link] = "toto"
 Range("A1").Value = "toto"
 Copy, Paste
 Range("A1:A2").Select
[Link]
Range("C3").Select
[Link]
 Clear: efface le contenu et la mise en forme
 Delete: supprime une plage (et décale les cellules)

31 L3-Université de Bordeaux
L'objet Range (3)

 Exemples à tester et observer…


 Range("A1:H8").Formula = "=Rand()"
 [Link](2, 1).Formula =
"=Sum(B1:B5)"
 [Link](2, 1).FormulaLocal =
"=Somme(B1:B5)"
 [Link](2, 1) =
[Link](Range("B
1:B5"))
 Worksheets(1).Range("C5:C10").Cells(1,
1).Formula = "=Rand()"

32 L3-Université de Bordeaux
L'objet Range (4)
 Exemples à tester et observer…tout d’abord, à partir de A1 remplir un
tableau de données…par exemple, A1=[Link](0;100)

 MsgBox Range("D4").[Link]

 MsgBox Range("D4").[Link]

 MsgBox Range("D4").[Link]

 MsgBox Range("D4").End(xlToLeft).Column

 MsgBox Range("D4").End(xlToRight).Column

 MsgBox Range("D4").End(xlUp).Row

 MsgBox Range("D4").End(xlDown).Row

33 L3-Université de Bordeaux
Instructions de contrôle
 If – Then : Exécute une action si la condition est vérifiée
 Select Case : Exécute une action parmi plusieurs, selon la
valeur retournée
 For – Next : Exécute une série d'instructions en boucle
autant de fois que spécifié
 For Each – Next: Parcourir une collection
 Do – While : Exécute une série d'instructions en boucle
tant que la condition est vraie (True)
 Do – Until : Exécute une série d'instructions en boucle
jusqu'à ce que la condition soit vraie

34 L3-Université de Bordeaux
If / ElseIf / Then

35 L3-Université de Bordeaux
Select Case

36 L3-Université de Bordeaux
For Next
For compteur = début To Fin [Step intervalle]
[instructions]
[Exit For]
[instructions]
Next [compteur]

37 L3-Université de Bordeaux
Do While, Do Until

38 L3-Université de Bordeaux
Evènements
 Action déclenchant l'appel d'une méthode
 Primordial en interfaces graphiques!
 Certains objets disposent d'évènements

39 L3-Université de Bordeaux
Partie 3 Les enregistrements
 Type structuré
 Champs simples ou structurés

40 L3-Université de Bordeaux
Les enregistrements

 Contrairement aux tableaux, ce type structuré permet de


regrouper des données de types différents.
 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 données est un champ pouvant être
simple ou structuré.

41 L3-Université de Bordeaux
Les enregistrements
 Les enregistrements sont déclarés 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é

42 L3-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 accéder à un champ :


Dim livre As ouvrage
[Link] = "Durand "
[Link] = 1980
‘on s’aperçoit ici que l’on pourrait remplacer livre par un tableau dans le type
ouvrage…Dim livre(1 To 10000) as ouvrage…
livre(9).auteur = "Durand" s’il s’agit du neuvième livre de la liste…

43 L3-Université de Bordeaux
Les enregistrements – Exemple
Un étudiant est défini par son nom, son prénom, 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 d’étudiants
Private Type Classe
liste(NbMax) As Etudiant ‘la liste est un tableau d’étudiants
nbr As Integer ‘le nombre réel des étudiants
End Type

On déclare ensuite la classe d’étudiants :


Dim c As Classe

44 L3-Université de Bordeaux
Les enregistrements – Exercice

 L’exemple précédent sera complété dans le prochain cours sur


les interfaces graphiques…

 Comment définir une matrice ?

 Créer un programme qui affiche le nombre de lignes et de


colonnes d’une matrice saisie sur la Feuil1 du classeur.

45 L3-Université de Bordeaux
Partie 4 Développement Rapide d’interfaces
 Boîtes de dialogue de base
 UserForm et éditeur graphique
 Les différents contrôles

46 L3-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 Icône message critique
vbQuestion 32 Icône Question
vbExclamation 48 Icône exclamation
vbInformation 64 Icône Information
vbDefaultButton1 0 Le premier bouton est par défaut
vbDefaultButton2 256 Le 2ième bouton est par défaut
vbDefaultButton3 512 Le 3ième bouton est par défaut
vbDefaultButton4 768 Le 4ième bouton est par défaut
vbSystemModal 4096 Suspend tout jusqu'à une réponse de l'utilisateur

47 L3-Université de Bordeaux
Exemple de MsgBox

48 L3-Université de Bordeaux
Exemple de MsgBox (2)

49 L3-Université de Bordeaux
Autres fenêtres classiques
 InputBox
 Permet de récupérer une valeur entrée par l'utilisateur

 GetOpenFileName
 Ouvre une boite de dialogue permettant de sélectionner un
fichier sur le disque dur

 GetSaveAsFileName
 Boîte de dialogue pour enregistrer un fichier

50 L3-Université de Bordeaux
Créer un UserForm personnalisé
 1) Imaginer la boîte de dialogue: à quoi sert-elle, où sera-
t-elle utilisée?
 2) Créer un nouvel objet userForm dans l'éditeur VBE
 3)Ajouter des contrôles
 Zones de textes
 Boutons radio
 Cases à cocher
 Listes
 4) Modifier les propriétés des éléments
 5) Ecrire les procédures d'évènements des différents
contrôles
 6)Ecrire la procédure affichant la boîte de dialogue.
51 L3-Université de Bordeaux
L'éditeur graphique de USerForm

52 L3-Université de Bordeaux
Editer les propriétés des contrôles

53 L3-Université de Bordeaux
Editer les procédures d'évènements
 Double-cliquer sur le contrôle dont on veut éditer les
évènements

54 L3-Université de Bordeaux
Détails sur les contrôles (1)
 La case à cocher
 Accelerator
 Value
 Zone de liste modifiable
 ListRow
 RowSource
 Value
 Bouton
 Annuler
 Default
 Image
 picture

55 L3-Université de Bordeaux
Détail sur les contrôles (2)
 Multipage: faire des onglets.
 Bouton d'option (bouton radio): sélection d'UNE option
parmi plusieurs.
 Un groupe est défini par tous les boutons ayant la même
propriété GroupName ou si tous les boutons sont dans un
même cadre.
 RefEdit: permettre à l'utilisateur de sélectionner une plage
dans une feuille de calcul
 Barre de défilement: ascenceur permettant de définir/
afficher une valeur

56 L3-Université de Bordeaux
Détails sur les contrôles (3)
 Contrôle Toupie: 2 boutons fléchés permettant
d'incrémenter / décrémenter une valeur
 Contrôle zone de texte: insérer du texte!
 Bouton bascule: similaire à la case à cocher

57 L3-Université de Bordeaux
Dimensionner / Aligner les contrôles

58 L3-Université de Bordeaux
Partie 5 Les structures complexes
 Les piles
 Les files

59 L3-Université de Bordeaux
Une pile

 Analogie de la pile d’assiettes


 Last In First Out (LIFO)
 Opérations possibles
 Insérer un élément dans une pile
 Supprimer un élément d’une pile
 Élément du sommet de la pile
 Création d’une pile vide
 Tester si une pile est vide

60 L3-Université de Bordeaux
Mise en œuvre d’une pile

 Plusieurs façons de faire :


 En particulier, à l’aide d’un tableau :
 Le nombre max d’éléments dans la pile
 Le contenu de la pile
 Un indice pour pointer sur le sommet de la pile

61 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

 Type de données :

Const NMAX=30

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

62 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

Function PileVide(p As TPile) As Boolean


If ([Link] = -1) Then
PileVide = True
Else
PileVide = False
End If
End Function

63 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

Function PilePleine(p As TPile) As Boolean


If ([Link] = NMAX - 1) Then
PilePleine = True
Else
PilePleine = False
End If
End Function

64 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

Sub Empiler(p As TPile,elt As Integer)


If (PilePleine(p) = False) Then
[Link] = [Link] +1
[Link]([Link]) = elt
Else
MsgBox(’’La pile est pleine !’’)
End If
End Sub

65 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

Sub Depiler(p As TPile)


If (PileVide(p) = False) Then
[Link] = [Link] - 1
Else
MsgBox(’’La pile est vide !’’)
End If
End Sub

66 L3-Université de Bordeaux
Mise en œuvre d’une pile : exemple

Function sommet(p As TPile) As Integer


If (PileVide(p) = False) Then
sommet = [Link]([Link])
Else
MsgBox(’’La pile est vide !’’)
End If
End Function

67 L3-Université de Bordeaux
Une File

 Analogie de la file d’attente


 First In First out (FIFO)
 Opérations principales
 Insertion d’un élément
 Suppression d’un élément (le plus ancien de la file)
 Quel est l’élément le plus ancien de la file ?
 Création d’une file vide
 Est-ce qu’une file est vide ?

68 L3-Université de Bordeaux
Mise en œuvre d’une file

 Plusieurs façons de faire :


 En particulier, à l’aide d’un tableau :
 Le nombre max d’éléments dans la file
 Le contenu de la file
 Un indice début qui pointe sur l’élément le plus ancien de la file
 Un indice fin qui pointe sur le dernier élément inséré dans la file

69 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

 Type de données :

Const NMAX=30

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

70 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

Function FileVide(f As TFile) As Boolean


If ([Link] = [Link]) Then
FileVide = True
Else
FileVide = False
End If
End Function

71 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

Function FilePleine(f As TFile) As Boolean


If ([Link]=([Link] + 1) mod NMAX) Then
FilePleine = True
Else
FilePleine = False
End If
End Function

72 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

Sub Enfiler(f As TFile,elt As Integer)


If (FilePleine(p) = False) Then
[Link]([Link]) = elt
[Link] = ([Link] +1) mod NMAX
Else
MsgBox(’’La file est pleine !’’)
End If
End Sub

73 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

Sub Defiler(f As TFile)


If (FileVide(f) = False) Then
[Link] = ([Link]+1) mod NMAX
Else
MsgBox(’’La file est vide !’’)
End If
End Sub

74 L3-Université de Bordeaux
Mise en œuvre d’une file : exemple

Function Tete(f As TFile) As Integer


If (FileVide(f) = False) Then
Tete = [Link]([Link])
Else
MsgBox(’’La file est vide !’’)
End If
End Function

75 L3-Université de Bordeaux
Mise en œuvre d’une pile : exercice
 Créer un module pour simuler les piles.
 Votre module doit contenir la procédure 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

76 L3-Université de Bordeaux
Mise en œuvre d’une file : exercice

 Une personne est définie par un numéro, un nom et un


prénom.
 Définir une structure PFile correspondant à une file de
personne.
 Adapter les différentes procédures et fonctions pour
qu’elles manipulent des files de personnes.

77 L3-Université de Bordeaux
Conclusion…

 A pratiquer en TP et sur le projet !

78 L3-Université de Bordeaux
Merci

Hervé Hocquard (hocquard@[Link])

Alexis Clay-Hervé Hocquard

79 L3-Université de Bordeaux

Vous aimerez peut-être aussi