1. Livres & vidéos
  2. Macros et langage VBA
  3. Corrections des exercices
Extrait - Macros et langage VBA Découvrez la programmation sous Excel (3e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (3e édition)
2 avis
Revenir à la page d'achat du livre

Corrections des exercices

Corrections des exercices

Dans ce chapitre, vous retrouvez les corrections des exercices qui vous ont été proposés dans cet ouvrage.

Chaque exercice est repris et commenté pour vous permettre de mieux comprendre les instructions et approches.

Vous pouvez également télécharger le fichier Exercices_corriges qui contient le code de chaque exercice directement depuis l’onglet Compléments.

Les instructions de création de module vous sont données à titre indicatif durant les premiers chapitres, elles seront omises pour simplifier la lecture par la suite.

Communiquer avec l’utilisateur

Exercice 1 : Fonction MsgBox

 Réalisez un clic droit dans l’Explorateur de projets puis choisissez Insertion - Module.

 Sélectionnez le module créé Module1 puis dans la fenêtre Propriétés modifiez sa propriété Name à Chap_05_MsgBox_InputBox.

'Fonctions MsgBox et InputBox 
Option Explicit 
'----------------------------- 
'Exercice 1 - Fonction Msgbox 
'----------------------------- 
'A-Que la Force soit avec vous 
'Dans une structure 
Public Sub MsgBox_InputBox_Exercice1A() 
    'Écrivez une instruction qui va afficher à l'utilisateur dans une
boîte de dialogue 
    'le texte simple "Que la Force soit avec vous" 
    MsgBox "Que la Force soit avec vous" 
End Sub 
 
 
'B-Yes, No, Maybe, I don't know 
'Dans une structure 
Public Sub MsgBox_InputBox_Exercice1B() 
    'Écrivez une instruction qui va afficher à l'utilisateur dans une 
boîte de dialogue 
    'la question "Avez-vous terminé la saisie du document ?" 
    'et proposer les boutons Oui, Non et Annuler 
    MsgBox...

Les variables, les constantes

Exercice 1 : Déclaration simple de variables

 Réalisez un clic droit dans l’Explorateur de projets puis choisissez Insertion - Module.

 Sélectionnez le module créé Module1 puis dans la fenêtre Propriétés modifiez sa propriété Name à Chap_06_Variables_Constantes.

'Variables et constantes 
Option Explicit 
'----------------------------- 
' Exercice 1 - Déclaration simple de variables 
'----------------------------- 
 
Private Sub Variables_Constantes_Exercice1() 
    'A-Déclarez une variable pouvant accueillir un nom d'étudiant, 
qui s'appellera NomEtudiant. 
    Dim NomEtudiant As String 
 
    'B-Déclarez une variable qui accepte des valeurs entières et qui
s'appellera NumeroCarteEtudiant. 
    Dim NumeroCarteEtudiant As Integer 'est également possible As Long 
 
    'C-Déclarez une variable qui pourra contenir Vrai ou Faux, que vous
nommerez Boursier. 
    Dim Boursier As Boolean 
 
    'D-Déclarez une constante qui contiendra le 1er septembre 2025, 
que vous nommerez DATE_LIMITE_INSCRIPTION. 
    Const...

Les procédures, les fonctions, les macros

Exercice 1 : Écriture de macros

 Réalisez un clic droit dans l’Explorateur de projets puis choisissez Insertion - Module.

 Sélectionnez le module créé Module1 puis dans la fenêtre Propriétés modifiez sa propriété Name à Chap_07_Procedures_Fonctions.

'Procédures, fonctions et macros 
Option Explicit 
'----------------------------- 
' Exercice 1 - Écriture de macros 
'----------------------------- 
 
'a. Macro privée 
'Écrivez une macro MacroPrivee, de portée privée. 
Private Sub MacroPrivee() 
    'Cette macro affichera à l'utilisateur la valeur 42. 
    MsgBox 42 
End Sub 
 
'b. Macro publique 
'Écrivez une macro MacroPublique, de portée publique. 
Public Sub MacroPublique() 
    'Cette macro fera appel à la macro MacroPrivee créée précédemment. 
    MacroPrivee 
End Sub 

Exercice 2 : Écriture de procédures

'----------------------------- 
' Exercice 2 - Écriture de procédures 
'----------------------------- 
'a. Procédure d'affichage ...

Les conditions

Exercice 1 : Si Alors

'Conditions 
Option Explicit 
'----------------------------- 
' Exercice 1 - Si Alors 
'----------------------------- 
 
'Écrivez une procédure AfficheSiPositif, de portée publique nécessitant un
paramètre numérique entier nommé ValeurDuDeclencheur. 
Public Sub AfficheSiPositif(ValeurDuDeclencheur As Integer) 
    'Cette procédure devra afficher OK si la valeur de la variable 
ValeurDuDeclencheur est strictement supérieure à 0. 
    If ValeurDuDeclencheur > 0 Then 
        MsgBox "OK" 
    End If 
End Sub 
 
'Créez une macro SiAlors. 
Sub SiAlors() 
    'Cette macro appellera dans un premier temps AfficheSiPositif 
en lui passant la valeur 35 
    AfficheSiPositif 35 
    'puis dans un second temps AfficheSiPositif en lui passant la valeur -5. 
    AfficheSiPositif -5 
End Sub 

Exercice 2 : Si Sinon

'----------------------------- 
' Exercice 2 - Si Sinon 
'----------------------------- 
'Écrivez une fonction RetourneTripleOuTiers de portée privée. 
'Elle prendra en paramètre d'entrée une valeur numérique entière 
inférieure à 255, nommée ValeurEntree 
'et retournera une valeur possiblement décimale. 
Private Function RetourneTripleOuTiers(ValeurEntree As Integer) As
Double 
    'Cette fonction retournera...

Les boucles

Exercice 1 : Boucles For Next

'Boucles 
Option Explicit 
'----------------------------- 
' Exercice 1 - Boucles For Next 
'----------------------------- 
'a. 1 pas à la fois 
'Créez une macro AfficherDe5a15. 
Sub AfficherDe5a15() 
    'Cette macro devra afficher les valeurs allant de 5 à 15. 
    Dim i As Integer 
    For i = 5 To 15 
        MsgBox i 
    Next i 
End Sub 
 
'b. De 2 en 2 
'Créez une macro AfficherDe50a60. 
Sub AfficherDe50a60() 
    'Cette macro devra afficher les valeurs allant de 50 à 60, 
en allant de 2 en 2. 
    Dim i As Integer 
    For i = 50 To 60 Step 2 
       MsgBox i 
    Next i 
End Sub 
 
'c. À reculons 
'Créez une macro Afficher30a10PasDeMoins5. 
Sub Afficher30a10PasDeMoins5() 
    'Cette macro devra afficher les valeurs allant de 30 à 10, avec 
un pas décroissant de 5. 
    Dim i As Integer 
    For i = 30 To 10 Step -5 
        MsgBox...

Les opérateurs

Exercice 1 : Opérateurs arithmétiques

'Opérateurs 
Option Explicit 
'----------------------------- 
' Exercice 1 - Opérateurs arithmétiques 
'----------------------------- 
 
'a. Opérations de base 
'Écrivez une fonction Addition, de portée publique, de type numérique
entier. 
'Cette fonction prend deux paramètres de type numérique entier, 
nommés A et B. 
Public Function Addition(A As Integer, B As Integer) As Integer 
    'La fonction retourne la somme des valeurs A et B. 
    Addition = A + B 
End Function 
 
'Écrivez ensuite une fonction Soustraction, de portée publique, 
de type numérique entier. 
'Cette fonction prend deux paramètres de type numérique entier, 
nommés A et B. 
Function Soustraction(A As Integer, B As Integer) As Integer 
    'La fonction retourne la différence entre les valeurs A et B. 
    Soustraction = A - B 
End Function 
 
'Créez une macro AfficherAdditionPuisSoustraction. 
Sub AfficherAdditionPuisSoustraction() 
    'Dans cette macro, déclarez deux variables de type numérique 
entier, nommées valeur1 et valeur2 
    Dim valeur1 As Integer, valeur2 As Integer 
    ' et affectez à ces variables les valeurs respectives 15 et 18. 
    valeur1 = 15 
    valeur2 = 18 
    'La macro devra ensuite afficher le résultat renvoyé par la 
fonction Addition, 
    'en lui passant les valeurs valeur1 et valeur2. 
    MsgBox Addition(valeur1, valeur2) 
    'La macro devra également afficher le résultat renvoyé par la 
fonction Soustraction, 
    'en lui passant les valeurs valeurs1 et valeurs 2. 
    MsgBox...

Les chaînes de caractères

Exercice 1 : Concaténation de chaînes

'Chaînes de caractères 
Option Explicit 
'----------------------------- 
' Exercice 1 - Concaténation de chaînes 
'----------------------------- 
 
'a. Symbole au choix 
'Écrivez une fonction, nommée Concatenation, de portée publique. 
'Cette fonction prend en paramètres deux chaînes de caractères, 
nommées ChaineA et ChaineB. 
Public Function Concatenation(ChaineA As String, ChaineB As String) 
As String 
    'Cette fonction retournera une chaîne de caractère contenant 
ChaineA et ChaineB séparées par le caractère espace " ". 
    Concatenation = ChaineA & " " & ChaineB 
End Function 
 
'Créez une macro AfficherConcatenation. 
Sub AfficherConcatenation() 
    'Cette macro affichera le retour de la fonction Concatenation, 
    'en lui passant les valeurs "Bonjour" et "bienvenue". 
    MsgBox Concatenation("Bonjour", "bienvenue") 
End Sub 
 
'b. Un seul symbole possible 
'Écrivez une fonction, nommée ConcatenationNombres, de portée
publique. 
'Cette fonction prend en paramètres deux valeurs numériques entières,
nommées NombreA et NombreB. 
Public Function ConcatenationNombres(NombreA As Integer, NombreB As
Integer) As String 
    'Cette fonction retournera une chaîne de caractère contenant NombreA
et NombreB sans caractère de séparation. 
    ConcatenationNombres...

Les dates et les heures

Exercice 1 : Afficher la date et l’heure système

'Dates et Heures 
Option Explicit 
'----------------------------- 
' Exercice 1 - Afficher la date et l'heure système 
'----------------------------- 
 
'a. Heure du système 
'Créez une macro AfficherDateHeureMaintenant. 
Sub AfficherDateHeureMaintenant() 
    'Cette macro affichera à l'utilisateur la date et l'heure du système. 
    MsgBox Now 
End Sub 
 
'b. Date du jour 
'Créez une macro AfficherDateDuJour. 
Sub AfficherDateDuJour() 
    'Cette macro affichera à l'utilisateur la date du jour. 
    MsgBox Date 
End Sub 

Exercice 2 : Créer une date et une heure

'----------------------------- 
' Exercice 2 - Créer une date et une heure 
'----------------------------- 
'a. Utilisation de DateSerial 
'Écrivez une fonction PremierDeLAn, de portée publique, qui retourne 
une date. 
'Cette fonction prend en paramètre une valeur numérique entière iAnnee.
Public Function PremierDeLAn(iAnnee As Integer) As Date 
    'Cette fonction doit retourner le 1er janvier de l'année iAnnee fournie
en paramètre. 
    PremierDeLAn...

Les cellules

Exercice 1 : Valeur dans une cellule

'Cellules Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Valeur dans une cellule 
'----------------------------- 
'a. Avec activation 
'Créez une macro ActiverCelluleA1PuisBonjourDansCelluleActive. 
Sub ActiverCelluleA1PuisBonjourDansCelluleActive() 
    'Cette macro activera la cellule A1 
    Range("A1").Activate 
    'puis mettra dans la cellule active la valeur Bonjour 
    ActiveCell.Value = "Bonjour" 
End Sub 
 
'b. Sans activation 
'Créez une macro EcrireDansCelluleA2. 
Sub EcrireDansCelluleA2() 
    'Cette macro écrira directement dans la cellule A2 la valeur 
Manipulation OK, sans activer au préalable la cellule A2. 
    Range("A2").Value = "Manipulation OK" 
End Sub 

Exercice 2 : Un peu de couleurs

'----------------------------- 
' Exercice 2 - Un peu de couleurs 
'----------------------------- 
'Créez une macro ColorierCelluleEnJaune. 
Sub ColorierCelluleEnJaune() 
    'Cette macro demandera à l'utilisateur de rentrer une adresse de
cellule (vous ferez en sorte...

Les feuilles

Exercice 1 : Feuille active

'Feuilles Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Feuille active 
'----------------------------- 
' Dans le module Chap_14_Feuilles, créez une macro
AfficherNomFeuilleActive. 
Sub AfficherNomFeuilleActive() 
    'Cette macro affichera le nom de la feuille active. 
    MsgBox ActiveSheet.Name 
End Sub 

Exercice 2 : Copie d’une feuille à l’autre

'----------------------------- 
' Exercice 2 - Copie d'une feuille à l'autre 
'----------------------------- 
'Alors que cette manipulation fait partie des plus courantes, voici 
un exercice fort simple. 
'l'objectif est de créer une nouvelle feuille, d'y recopier les données
que vous avez créées 
'dans les exercices du chapitre précédent et de renommer cette feuille
Feuille_Temporaire. 
'Créez une macro CreerRemplirEtNommerFeuille dans le module Chap_14_Feuilles. 
Sub CreerRemplirEtNommerFeuille() 
    'Dans cette macro vous commencerez donc par déclarer une variable
de type feuille (Worksheet), que vous nommerez wsh. 
    Dim wsh As Worksheet 
    'La macro ajoutera une nouvelle feuille...

Les classeurs

Exercice 1 : Utiliser ThisWorkbook

'Classeurs Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Utiliser ThisWorkbook 
'----------------------------- 
'a. Emplacement du classeur 
'Créez une macro AfficherEmplacementClasseur. 
Sub AfficherEmplacementClasseur() 
    'Cette macro affichera l'emplacement du classeur. 
    MsgBox ThisWorkbook.Path 
End Sub 
 
'b. Nom de la feuille active 
'Créez une macro AfficherNomFeuilleActiveDansClasseur. 
Sub AfficherNomFeuilleActiveDansClasseur() 
    'Cette macro affichera le nom de la feuille active du classeur. 
    MsgBox ThisWorkbook.ActiveSheet.Name 
End Sub 

Exercice 2 : Créer, enregistrer et fermer un classeur

'----------------------------- 
' Exercice 2 - Créer, enregistrer et fermer un classeur 
'----------------------------- 
'a. Création d'un nouveau classeur 
'Créez une macro CreerClasseurEtAfficherNombreFeuilles. 
Sub CreerClasseurEtAfficherNombreFeuilles() 
    'Cette macro devra créer un nouveau classeur 
    Dim wbk As Workbook 
    Set wbk = Workbooks.Add 
    'puis...

L’application Excel

Exercice 1 : Lancer une nouvelle application Excel

'Applications Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Lancer une nouvelle application Excel 
'----------------------------- 
'Créez une macro LancerNouvelleApplicationExcel. 
Sub LancerNouvelleApplicationExcel() 
    'Cette macro devra déclarer une variable de type Excel.Application
et ouvrir une nouvelle application. 
    Dim xlapp As Excel.Application 
    Set xlapp = New Excel.Application 
    Dim xlwbk As Workbook 
    'Un nouveau classeur devra également y être créé 
    Set xlwbk = xlapp.Workbooks.Add 
    xlapp.Visible = True 
End Sub 
 
'Vous prendrez soin de fermer manuellement cette application. Libre à
vous de créer une procédure dédiée à la fermeture d'application Excel,
passée en paramètre. 
Sub FermerApplication(xlapp As Excel.Application) 
    xlapp.DisplayAlerts = False 
    xlapp.Quit 
End Sub 

Exercice 2 : Obtenir les objets actifs

'----------------------------- 
' Exercice 2 - Obtenir les objets actifs 
'----------------------------- ...

Les formules

Exercice 1 : Écriture de formules en français

'Formules Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Écriture de formules en français 
'----------------------------- 
'a. Moyenne des notes 
'Créez une macro FormuleMoyenneNotes. 
Sub FormuleMoyenneNotes() 
    'Cette macro écrira dans la cellule F8 une formule MOYENNE des 
volumes. Vous devrez utiliser la formule en français (FormulaLocal). 
    Worksheets("Exercices_Chap_17_Formules").Range("F8")
.FormulaLocal = "=MOYENNE(F2:F7)" 
End Sub 
 
'b. Meilleure Note 
'Créez une macro FormuleMaximumNotes. 
Sub FormuleMaximumNotes() 
    'Cette macro écrira dans la cellule F9 une formule MAX sur les 
notes des étudiants. Vous utiliserez de nouveau la formule en 
français (FormulaLocal). 
    Worksheets("Exercices_Chap_17_Formules").Range("F9").
FormulaLocal = "=MAX(F2:F7)" 
End Sub 

Exercice 2 : Écriture de formules en anglais

'----------------------------- 
' Exercice 2 - Écriture de formules en anglais 
'----------------------------- 
'a. Nombre de rattrapage 
'Créez une macro...

Les graphiques

Exercice 1 : Création simple de graphique

'Graphiques Excel 
Option Explicit 
'----------------------------- 
' Exercice 1 - Création simple de graphique 
'----------------------------- 
'a. Stock mensuel de feuilles 
'Créez une macro GraphiqueStocksFeuilles. 
Sub GraphiqueStocksFeuilles() 
    'Cette macro devra créer un nouveau graphique, de type Courbe, 
en se basant sur les données situées dans la plage de cellules A1:B5. 
    'Le graphique doit représenter l'évolution du stock de feuilles 
sur la période de janvier 2025 à avril 2025. 
    Dim cht As Chart 
    Set cht = Charts.Add 
    With cht 
        .ChartType = xlLine 'Type courbe 
        .SetSourceData Source:=Worksheets
("Exercices_Chap_18_Graphiques").Range("A1:B5") 'source A1:B5 
        'Le titre du graphique sera Stock mensuel de Feuilles 
        .HasTitle = True 
        .ChartTitle.Caption = "Stock mensuel de Feuilles" 
        'Il...

Les formulaires utilisateurs

 Cliquez sur le menu Insertion - UserForm.

 Dans le volet Propriétés du formulaire, changez la propriété Name à UsfExercice1.

 Dans la Boîte à outils sélectionnez l’outil Intitulé puis tracez-le dans le formulaire. Complétez la propriété Caption pour saisir Taille Police de caractères.

 Dans la Boîte à outils sélectionnez l’outil Zone de Liste puis tracez-le dans le formulaire.

 Dans la Boîte à outils sélectionnez l’outil Case à cocher puis tracez-le dans le formulaire. Dans la propriété Caption saisissez la valeur Appliquer Police.

 Dans la Boîte à outils, sélectionnez l’outil Bouton de commande puis tracez-le dans le formulaire.

 Modifiez sa propriété Caption à Cliquez-moi.

 Double cliquez sur le bouton de commande pour accéder au code associé :

'Formulaires Utilisateurs 
Option Explicit 
'----------------------------- 
' Exercice 1 - Formulaire élémentaire 
'----------------------------- 
'Créez un formulaire nommé FormulaireExercice1. 
'Lorsque l'utilisateur cliquera sur le bouton, 
Private Sub CommandButton1_Click() 
    'le texte contenu dans...

Gestion des erreurs et débogage

Exercice 1 : Renforcer vos précédents exercices

'Gestion Erreurs 
Option Explicit 
'----------------------------- 
 
' Exercice 1 - Renforcer vos précédents exercices 
'----------------------------- 
 
'a. Chapitre 5 MsgBox Inputbox Exercice 2a BoiteElementaire : 
assurez-vous que l'utilisateur ne saisit pas une valeur numérique  
ni une date. 
Public Sub MsgBox_InputBox_Exercice2A_Blinde() 
    'Écrivez une instruction qui va afficher à l'utilisateur le texte 
    '"Bonjour, comment vous appelez-vous ?" et l'inviter à saisir  
son nom. 
    Dim Reponse As String 
    Reponse = Application.InputBox("Bonjour, comment vous appelez-vous ?") 
    If IsNumeric(Reponse) Or IsDate(Reponse) Then 
        MsgBox "Vous avez saisi une valeur numérique ou une date", 
vbCritical + vbOKOnly 
    Else 
        MsgBox Reponse 
    End If 
End Sub 
 
'b. Chapitre 11 Chaînes de caractères Exercice TexteEnDate : assurez-vous
que les caractères passés en paramètres permettent une récupération sous
forme de date valide. 
'Si ce n'est pas le cas, renvoyer la date du jour 
Public Function TexteEnDate_Blinde(ByVal strEntree As String) As Date 
    'Cette fonction prend en paramètre une chaîne de caractères strEntree, 
passée...