Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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
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.
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.
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.
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.
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
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.
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()
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.
4.
Page 5 sur 9
2010-2011
Structures de contrle
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
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.
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("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).
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
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 :
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