Vous êtes sur la page 1sur 9

2010-2011

TD Macros et Programmation
ENREGISTREZ VOS DOCUMENTS REGULIEREMENT
UTILISEZ LES UTILITAIRES D'AIDE

Objectifs :
L'objectif de ce TD est de dcouvrir lenvironnement de programmation Visual Basic (VBE). Nous allons
galement tablir des programmes en Visual Basic pour application (VBA). Nous commenons par la cration,
la modification et lexcution dune macro avant daller plus loin dans la programmation.

Dfinitions

Macro : Macro est le diminutif de macro-commande qui dsigne l'origine une commande regroupant
plusieurs commandes. Les macros sont trs utiles pour excuter de faon rptitive les mmes suites
d'oprations. Par la suite, on a pris l'habitude d'appeler macro tout programme introduit dans un logiciel
applicatif pour en tendre les commandes.

Macro sous Excel : Pour programmer des macros sous Excel, on utilise le langage VBA (Visual Basic
pour Applications). Cest un langage trs proche de Visual-Basic et commun un grand nombre
d'applications en particulier celles du pack Office comme Word ou Access. Le code (programme) d'une
macro est un texte brut comme celui dit dans le Bloc-notes (Notepad). En VBA, ce texte est plus facilement
dit dans VBE (Visual Basic Editor). VBE est plus qu'un diteur de macros, c'est tout l'environnement de
travail de VBA.

Les macros

B.1 Enregistrer une Macro


B.1.1 Afficher longlet Dveloppeur
Les oprations lies la programmation sont principalement incluses dans longlet Dveloppeur. Si l'onglet
Dveloppeur n'est pas disponible, affichez-le de la manire suivante :
1. Cliquez sur le Bouton Microsoft Office

, puis sur Options Excel.

2. Dans la catgorie Standard, sous Meilleures options pour travailler avec Excel, activez la case
cocher Afficher l'onglet Dveloppeur dans le ruban, puis cliquez sur OK.
Pour dfinir temporairement le niveau de scurit de manire activer toutes les macros :
1. Sous l'onglet Dveloppeur, dans le groupe Code, cliquez sur Scurit des macros.

Page 1 sur 9

2010-2011

2. Sous Paramtres des macros, cliquez sur Activer toutes les macros (non recommand ; risque
d'excution de code potentiellement dangereux), puis cliquez sur OK1.

Figure 1. Fentre daffectation dune macro.

B.1.2 Crer une macro

Sous l'onglet Dveloppeur, dans le groupe Code, cliquez sur Enregistrer une macro. Tapez le
nom de la macro (l'appeler MaPremiereMacro) dans la zone "Nom de la macro" puis cliquer sur
OK.

A partir de l, tous ce que vous faites est enregistr. Faire ensuite les modifications suivantes :
1. Aller dans la cellule A1 et taper "Nombre"
2. Aller dans la cellule B1 et taper " Carr".
3. Aller dans la cellule B2 et crire la formule "= A2* A2".
4. Slectionner les cellules "A1:B1", les mettre en gras, les centrer et faire un remplissage en gris.
Sous l'onglet Dveloppeur, dans le groupe Code, cliquez sur arrter l'enregistrement.

Vous venez de crer

votre premire macro.

B.1.3 Excuter la macro


1. Aller dans Affichage/Macro ou dans Dveloppement/Macro,
2. Slectionner la macro que vous venez de crer MaPremiereMacro et cliquer sur Excuter (lexcuter sur
une autre feuille).

B.2 Lancer une macro via un bouton de contrle


Pour lier une macro un bouton de commande. On procde comme suit :
1.

Insrer un bouton de contrle dans la feuille qui contient la macro via longlet
Dveloppement/Contrles puis cliquer sur Insrer/contrles de formulaire et slectionner un
bouton de control.

2.

Une fois le bouton est dpos sur la feuille Excel, la fentre de la figure 1 saffiche.

REMARQUE Pour empcher du code potentiellement dangereux de s'excuter, il est recommand


de revenir aux paramtres qui dsactivent toutes les macros une fois que vous avez fini d'utiliser des
macros.

Page 2 sur 9

2010-2011
3.

Slectionner la macro affecter au bouton de contrle en slectionnant son nom puis valider par
OK .

Vous venez dattribuer la macro MaPremiereMacro au bouton de contrle. Vous navez qu changer le
texte affich sur le bouton avec clic droit de la souris puis modifier le texte.

Figure 1 : Affecter une macro

B.3 Visualiser le code de la macro


Pour visualiser le code VBA cr lors de l'enregistrement de votre macro MaPremiereMacro, procder comme
suit:
Procder de la mme manire que pour afficher une macro (Cf. Section 2) en slectionnant la macro que
vous venez de crer MaPremiereMacro et cliquer sur Modifier. Le programme de la macro est alors
affich par l'diteur VBE.

Programmation VBA

C.1 Gnralits
Nous avons vu jusque l comment crer des macros en enregistrant les oprations raliser. Les macros
enregistres sont simples faire et ne ncessitent aucune connaissance en programmation. Cependant, elles
peuvent s'avrer limites ds qu'il s'agit d'utiliser des oprations complexes, faisant appel des notions pointues
de programmation. Dans ce cas, on doit crire nous mmes le code des oprations sans passer par l'enregistreur
de macros. Cette mthode suppose des connaissances minimales en algorithmique et en langage VBA.

Page 3 sur 9

2010-2011
C.2 Utiliser les fonctions d'entres/sortie VBA
Afin dutiliser les fonctions dentres/sorties dans des programmes VBA, vous devez d'abord lancer l'diteur
VBE). Pour ce faire, Aller dans menu Dveloppement/Visual basic. Il existe principalement deux fonctions qui
peuvent tre utilises pour saisir/afficher des donnes par lintermdiaire des boites de dialogue. Ces deux
fonctions sont :
InputBox : Cette mthode affiche une bote de dialogue dans laquelle l'utilisateur peut saisir des donnes. Elle
renvoie les informations que l'utilisateur a saisies dans la bote de dialogue.
Syntaxe gnrale
expression.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
Exemple : Pour demander l'utilisateur de taper un nombre:
nombre = Application.InputBox("Entrer un nombre")
MsgBox : Affiche un message dans une bote de dialogue, attend que l'utilisateur clique sur un bouton, puis
renvoie une valeur de type Integer qui indique le bouton choisi par l'utilisateur.
Syntaxe gnrale
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Exemple :
Response = MsgBox (Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then
MyString = "Oui"
Else
MyString = "Non"
End If

' L'utilisateur a choisi Oui.


' Effectue une action.
' L'utilisateur a choisi Non.
' Effectue une action.

Exercice 1
Faire une procdure VBA permettant de lire un nombre en utilisant InputBox, puis d'afficher avec la fonction
MsgBox le carr de ce nombre. Pour crer une nouvelle macro, aller dans le menu Insertion / Procdure .
Insrer un bouton sur lequel vous affecterez cette macro. Vrifier quelle fonctionne correctement.

C.3 Dbogage d'une procdure VBA:


L'environnement VBE offre plusieurs outils permettant de dtecter les ventuelles erreurs (logique ou de syntaxe)
dans vos programmes VBA.
Par exemple :
1.

Excuter pas pas (instruction par instruction) le programme (sous menu Dbogage du menu principal),
permet de voir exactement o le programme a plant;

2.

On peut aussi afficher les variables locales (sous menu Affichage du menu principal). Cela permet de voir
le contenu des variables utilises dans la procdure un moment donn.

Page 4 sur 9

2010-2011

Exercice 2
Lancer VBE si ce n'est dj fait et crivez le programme ci-dessous.

Sub Que_fait_je()

' dbut de la procdure

Dim Commentaire As String ' pour dclare la variable Dim comme chane de caractres (String)
Dim nb_aleat As Integer
' un nombre alatoire gnr par le systme
Dim nb_lu As Integer
Dim score As Integer
Dim compteur As Integer
' Tester si l'utilisateur a cliqu sur le bouton OK
If vbOK = MsgBox("Bienvenue dans le programme de calcul mental", vbOKCancel) Then
Randomize
' Si oui initialiser un gnrateur de nombres alatoires
nb_aleat = Int((100 * Rnd) + 1)
' gnrer un nombre alatoire entre 1 et 101
Commentaire = ""
While nb_lu <> nb_aleat
If nb_lu < nb_aleat Then
Commentaire = "Trop petit"
Else
Commentaire = "Trop grand"
End If
nb_lu = InputBox("Le nombre trouver est entre 1 et 100 " & " - Tentez votre chance : " &
Commentaire)
compteur = compteur + 1 ' tant que ce nombre est diffrent de celui tap par l'utilisateur, '
boucler en ..
Wend
' incrmentant le gnrateur de tentatives
MsgBox "Bravo ! Vous avez trouv aprs " & compteur & " tentatives"
End If
End Sub

1.

Corriger les deux erreurs de syntaxe en utilisant les rubriques d'aide de VBA : la touche F1 du clavier.

2.

Une fois les erreurs corriges, excuter le programme l'aide du bouton de la barre d'outils de VBE.

3.

Que fait ce programme ?

4.

Quel est le rle des variables Compteur et Commentaire dans le programme ?

Page 5 sur 9

2010-2011

Structures de contrle

D.1 La structure conditionnelle (IF)


Syntaxe gnrale
IF <condition> Then
Instructions
ELSE
Instructions
END IF
La structure IF, THEN, ELSE n'est valable que pour des situations avec alternatives (deux possibilits). Pour
traiter plus de deux possibilits, il faudra imbriquer un IF aprs l'instruction Then ou/et aprs linstruction
ELSE.

Exemple
IF <condition1> Then
.
IF <condition2> Then
Instructions 2
ELSE
Instruction 3
End IF
ELSE
IF <condition3> Then
Instructions 4
ELSE
Instruction 5
End IF
End IF

Exercice 3
Supposons que l'on veuille crire un programme qui permette de demander l'utilisateur son ge, puis d'afficher
le message "Bonjour adulte.", si l'ge est suprieur 20 et le message "Salut jeune" dans le cas contraire.
1. Ecrire l'algorithme correspondant. De combien de variables a-t-on besoin?
2. Ecrire le programme VBA correspondant cet algorithme. Lexcuter.
3. Supposons maintenant que l'on souhaite aussi personnaliser le message afficher en traitant le cas o
l'ge de l'utilisateur est infrieur 15. Modifier l'algorithme en affichant cette fois le message "Salut
mon grand !" si l'ge est infrieur 15, "Salut jeune", si l'ge est infrieur 20 et "Bonjour adulte." si l'ge est
suprieur ou gal 20.
4. Ecrire le programme VBA correspondant et lexcuter.

Page 6 sur 9

2010-2011
D.2 Les boucles en VBA
Les diffrentes structures de boucles supportes par VBA sont les suivantes :
For Index = x To y [Step Z]
Instructions
Next Index

For Each obj In collection


Instructions
Next obj

Do While <condition>
Instructions
Loop

Do Until <condition>
Instructions
Loop

Do
Instructions
Loop While <condition>

Do
Instructions
Loop Until <condition>

While <condition>
Instructions
Wend
Do Until While <condition1>
Instructions
Loop Until While
<condition2>

Exercice 4
On souhaite maintenant que le programme puisse s'excuter jusqu' ce que l'utilisateur dcide d'y mettre fin.
Pour cela, on a besoin d'utiliser une structure itrative.
Modifier lalgorithme prcdent afin quon puisse lexcuter jusqu' ce que l'utilisateur dcide de
l'arrter (en donnant une valeur ngative pour l'ge par exemple).
Traduire en VBA, le saisir et lexcuter.

Manipulation des feuilles et cellules Excel

E.1 Manipulation de feuilles avec VBA : l'objet Worksheet


L'objet VBA Worksheet, reprsente une feuille de calcul Excel. L'objet Worksheet est un membre de la
collection Worksheets. La collection Worksheets contient toutes les feuilles d'un classeur.
Pour renvoyer une feuille (donc un objet Worksheet), spcifier Worksheets(index), index tant le nom ou le
numro d'index de la feuille de calcul. L'exemple suivant montre comment masquer la feuille de calcul 1 dans le
classeur actif.

Worksheets(1).Visible = False
Ou encore

Worksheets("Feuille1").Visible = False
Le numro d'index de la feuille de calcul indique sa position dans la barre d'onglets du classeur. Worksheets(1)
est la premire feuille du classeur (la plus gauche) et Worksheets (Worksheets.Count) la dernire. Toutes les
feuilles de calcul sont incluses dans le comptage d'index, mme lorsqu'elles sont masques.
Le nom de la feuille de calcul apparat sur l'onglet correspondant. Utilisez la proprit Name pour dfinir ou
renvoyer le nom de la feuille de calcul.
L'exemple suivant montre comment renommer la feuille "Feuil1" par " Nouveau_nom".

Worksheets("Feuil1").Name ="Nouveau nom"


L'objet Worksheet est galement un membre de la collection Sheets. La collection Sheets contient toutes les
feuilles du classeur (feuilles graphiques et feuilles de calcul).
La proprit ActiveSheet permet de faire rfrence la feuille active. L'exemple suivant montre comment
utiliser la mthode Activate pour activer la feuille de calcul Sheet1, dfinir l'orientation de la page en mode
paysage, puis imprimer la feuille de calcul.

Worksheets("Sheet1").Activate
ActiveSheet.PageSetup.Orientation = xlLandscape
ActiveSheet.PrintOut
Page 7 sur 9

2010-2011

Exercice 5
1. Dans Excel, ouvrir un nouveau classeur et enregistrer le sous le nom Ex5.xls .
2. Ecrire une procdure VBA qui permette de :
Renommer la premire feuille par "Notes et Moyennes".
Rendre invisibles les feuilles "Feuil2" et "Feuil3".
3. Excuter cette procdure.
4. Ecrire une nouvelle procdure qui raffiche toutes les feuilles du classeur Ex5.xls (boucle).

E.2 Manipulation de cellules avec VBA : l'objet Range


L'objet Range peut reprsenter une cellule, une ligne, une colonne ou une slection de cellules contenant
un ou plusieurs blocs contigus de cellules ou une plage 3D. Les proprits et mthodes suivantes sont utilises
lors de l'utilisation d'un objet Range :
Proprit Range
Proprit Cells
Range et Cells
Proprit Offset
Mthode Union

Proprit Range
Pour renvoyer un objet Range reprsentant une cellule unique ou une plage de cellules, spcifiez Range(arg),
arg dsignant la plage. L'exemple suivant montre comment placer la valeur de la cellule A1 dans la cellule A5.

Worksheets("Feuil1").Range("A5").Value = Worksheets("Feuil1").Range("A1").Value
On peut aussi crire des formules dans des cellules:

Worksheets(2).Range("A1") = 12

'Ecrire dans la cellule A1 de la feuille 2 le nombre 12

Worksheets(2).Range( "B1:D4") = 15 'Ecrire dans les cellules de la plage A1 D4 le nombre 15


Worksheets(2).Range ("A2") = "=(A1+B1)/2" 'Ecrire dans la cellule A2 de la feuille2 la
formule (A1+B1)/2
La proprit Offset permet de donner une adresse relative. Par exemple:

ActiveCell.Offset(-1, 2)
Cela permet de rfrencer la cellule situe une ligne avant et deux colonnes aprs la cellule activ e. La
mthode Union permet de spcifier plusieurs plages de cellules :
Union (Range ( "A2 : B 3 " ) , Range ( " D 1 : D 4 " ) ) . Select
Cela permet de slectionner les deux plages de cellules (A2:B3 et D1:D4).
Remarques :
Pour affecter une fonction avec le nom francis , il faut crire la commande ci-dessous :

Worksheets(1).Range ("A1").FormulaLocal = "=MOYENNE(A5:A10)"


Pour mettre des guillemets dans une formule, il faut les chapper en les doublant :
Worksheets(1).Range ("A1").FormulaLocal = "=SI(A1=""AES2"";""ok"";""no"")"

Page 8 sur 9

2010-2011

Exercice 6
1. Reproduire le tableau de la figure 2 sur une feuille Excel.
2. Ecrire une procdure VBA ( appeler Calculer ), permettant de calculer et de remplir les cellules
grises.
3. Affecter cette procdure un bouton mettre sur le fichier des notes. Mettre le texte Calculer sur le
texte de bouton.
4. Crer un autre bouton effaant les diffrentes cases grises. Vrifier le bon fonctionnement des 2
boutons.
5. Modifier la fonction Calculer pour que les moyennes soient sous la forme 0,00 (2 dcimales).
6. Modifier la fonction Calculer pour que les rsultats NB Etudiants soient centrs.

Figure 2

Exercice 7
1. Copier lexercice Devise.xls du TD2
2. Crer une macro Convertir . Cette macro doit :
a. Demander lutilisateur Pays de la devise souhaite et mettre la valeur dans H4
b. Demander lutilisateur Montant et mettre la valeur dans G4
c. Demander lutilisateur Devise convertir et mettre la valeur dans F4
d. Rcuprer le total et la devise obtenue et afficher ce rsultat lutilisateur.
e. Exemple : pour Pays de la devise souhaite lutilisateur rentre USA , pour Montant
100 , pour Devise convertir rien, il obtient Rsultat : 137,26 USD .
3. Ajouter un bouton, Convertir et lui affecter la macro Convertir .

Page 9 sur 9

Vous aimerez peut-être aussi