TD – Macros et Programmation
Objectifs :
L'objectif de ce TD est de découvrir l’environnement de programmation Visual Basic (VBE). Nous allons
également établir des programmes en Visual Basic pour application (VBA). Nous commençons par la création,
la modification et l’exécution d’une macro avant d’aller plus loin dans la programmation.
A Définitions
Macro : Macro est le diminutif de macro-commande qui désigne à l'origine une commande regroupant
plusieurs commandes. Les macros sont très utiles pour exécuter de façon répétitive les mêmes suites
d'opérations. 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). C’est un langage très 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.
B Les macros
B.1 Enregistrer une Macro
B.1.1 Afficher l’onglet « Développeur »
Les opérations liées à la programmation sont principalement incluses dans l’onglet Développeur. Si l'onglet
Développeur n'est pas disponible, affichez-le de la manière suivante :
Pour définir temporairement le niveau de sécurité de manière à activer toutes les macros :
1. Sous l'onglet Développeur, dans le groupe Code, cliquez sur Sécurité des macros.
Page 1 sur 9
2010-2011
2. Sous Paramètres des macros, cliquez sur Activer toutes les macros (non recommandé ; risque
d'exécution de code potentiellement dangereux), puis cliquez sur OK1.
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. Sélectionner les cellules "A1:B1", les mettre en gras, les centrer et faire un remplissage en gris.
Sous l'onglet Développeur, dans le groupe Code, cliquez sur arrêter l'enregistrement. Vous venez de créer
votre première macro.
1
REMARQUE Pour empêcher du code potentiellement dangereux de s'exécuter, il est recommandé
de revenir aux paramètres qui désactivent toutes les macros une fois que vous avez fini d'utiliser des
macros.
Page 2 sur 9
2010-2011
3. Sélectionner la macro à affecter au bouton de contrôle en sélectionnant son nom puis valider par
« OK ».
Vous venez d’attribuer la macro « MaPremiereMacro » au bouton de contrôle. Vous n’avez qu’à changer le
texte affiché sur le bouton avec « clic droit de la souris » puis modifier le texte.
C Programmation VBA
C.1 Généralités
Nous avons vu jusque là comment créer des macros en enregistrant les opérations à réaliser. Les macros
enregistrées sont simples à faire et ne nécessitent aucune connaissance en programmation. Cependant, elles
peuvent s'avérer limitées dès qu'il s'agit d'utiliser des opérations complexes, faisant appel à des notions pointues
de programmation. Dans ce cas, on doit écrire nous mêmes le code des opérations sans passer par l'enregistreur
de macros. Cette méthode suppose des connaissances minimales en algorithmique et en langage VBA.
Page 3 sur 9
2010-2011
InputBox : Cette méthode affiche une boîte de dialogue dans laquelle l'utilisateur peut saisir des données. Elle
renvoie les informations que l'utilisateur a saisies dans la boîte de dialogue.
Syntaxe générale
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 boîte 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 générale
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Exemple :
Response = MsgBox (Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' L'utilisateur a choisi Oui.
MyString = "Oui" ' Effectue une action.
Else ' L'utilisateur a choisi Non.
MyString = "Non" ' Effectue une action.
End If
Exercice 1
Faire une procédure VBA permettant de lire un nombre en utilisant InputBox, puis d'afficher avec la fonction
MsgBox le carré de ce nombre. Pour créer une nouvelle macro, aller dans le menu « Insertion » / « Procédure ».
Insérer un bouton sur lequel vous affecterez cette macro. Vérifier qu’elle fonctionne correctement.
Par exemple :
1. Exécuter pas à pas (instruction par instruction) le programme (sous menu Débogage 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 utilisées dans la procédure à un moment donné.
Page 4 sur 9
2010-2011
Exercice 2
Lancer VBE si ce n'est déjà fait et écrivez le programme ci-dessous.
Dim Commentaire As String ' pour déclare la variable Dim comme chaîne de caractères (String)
Dim nb_aleat As Integer ' un nombre aléatoire généré par le système
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 générateur de nombres aléatoires
nb_aleat = Int((100 * Rnd) + 1) ' générer un nombre aléatoire 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 différent de celui tapé par l'utilisateur, '
boucler en ..
Wend ' incrémentant le générateur de tentatives
MsgBox "Bravo ! Vous avez trouvé après " & 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 corrigées, exécuter le programme à l'aide du bouton ► de la barre d'outils de VBE.
3. Que fait ce programme ?
4. Quel est le rôle des variables Compteur et Commentaire dans le programme ?
Page 5 sur 9
2010-2011
D Structures de contrôle
D.1 La structure conditionnelle (IF)
Syntaxe générale
IF <condition> Then
Instructions
ELSE
Instructions
END IF
La structure IF, THEN, ELSE n'est valable que pour des situations avec alternatives (deux possibilités). Pour
traiter plus de deux possibilités, il faudra imbriquer un IF après l'instruction Then ou/et après l’instruction
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 supérieur à 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. L’exécuter.
3. Supposons maintenant que l'on souhaite aussi personnaliser le message à afficher en traitant le cas où
l'âge de l'utilisateur est inférieur à 15. Modifier l'algorithme en affichant cette fois le message "Salut
mon grand !" si l'âge est inférieur à 15, "Salut jeune", si l'âge est inférieur à 20 et "Bonjour adulte." si l'âge est
supérieur ou égal à 20.
4. Ecrire le programme VBA correspondant et l’exécuter.
Page 6 sur 9
2010-2011
Exercice 4
On souhaite maintenant que le programme puisse s'exécuter jusqu'à ce que l'utilisateur décide d'y mettre fin.
Pour cela, on a besoin d'utiliser une structure itérative.
Modifier l’algorithme précédent afin qu’on puisse l’exécuter jusqu'à ce que l'utilisateur décide de
l'arrêter (en donnant une valeur négative pour l'âge par exemple).
Traduire en VBA, le saisir et l’exécuter.
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 procédure VBA qui permette de :
Renommer la première feuille par "Notes et Moyennes".
Rendre invisibles les feuilles "Feuil2" et "Feuil3".
3. Exécuter cette procédure.
4. Ecrire une nouvelle procédure qui réaffiche toutes les feuilles du classeur « Ex5.xls » (boucle).
Propriété Range
Pour renvoyer un objet Range représentant une cellule unique ou une plage de cellules, spécifiez Range(arg),
arg désignant 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
Cela permet de référencer la cellule située une ligne avant et deux colonnes après la cellule activ e. La
méthode Union permet de spécifier plusieurs plages de cellules :
Union (Range ( "A2 : B 3 " ) , Range ( " D 1 : D 4 " ) ) . Select
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 procédure VBA (à appeler « Calculer »), permettant de calculer et de remplir les cellules
grisées.
3. Affecter cette procédure à un bouton à mettre sur le fichier des notes. Mettre le texte « Calculer » sur le
texte de bouton.
4. Créer un autre bouton effaçant les différentes cases grisées. Vérifier le bon fonctionnement des 2
boutons.
5. Modifier la fonction « Calculer » pour que les moyennes soient sous la forme « 0,00 » (2 décimales).
6. Modifier la fonction « Calculer » pour que les résultats « NB Etudiants » soient centrés.
Figure 2
Exercice 7
1. Copier l’exercice Devise.xls du TD2
2. Créer une macro « Convertir ». Cette macro doit :
a. Demander à l’utilisateur « Pays de la devise souhaitée » et mettre la valeur dans H4
b. Demander à l’utilisateur « Montant » et mettre la valeur dans G4
c. Demander à l’utilisateur « Devise à convertir » et mettre la valeur dans F4
d. Récupérer le total et la devise obtenue et afficher ce résultat à l’utilisateur.
e. Exemple : pour « Pays de la devise souhaitée » l’utilisateur rentre « USA », pour « Montant »
« 100 », pour « Devise à convertir » rien, il obtient « Résultat : 137,26 USD ».
3. Ajouter un bouton, « Convertir » et lui affecter la macro « Convertir ».
Page 9 sur 9