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 depuis l’onglet Compléments.
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 à Chapitre_05_MsgBox_InputBox.
'Fonction MsgBox
Option Explicit
'Fonction MsgBox
'A-Bonjour le monde
'A l 'intérieur d'une structure
Public Sub BonjourLeMonde()
'Écrivez une instruction qui va afficher à l'utilisateur
dans une boîte de dialogue le texte simple "Bonjour le monde".
MsgBox "Bonjour le monde"
End Sub
'B-Jeu de boutons
'A l 'intérieur d'une structure
Public Sub JeuDeBoutons()
'Écrivez une instruction qui va afficher à l'utilisateur
dans une boîte de dialogue le texte
'" Prêt pour la guerre des boutons ? ",
'et proposer les boutons Oui et Non.
MsgBox "Prêt pour la guerre des boutons ?", vbYesNo
End Sub ...
Les variables, les constantes
Exercice 1 : Déclarations simples de variables
Private Sub DeclarationsSimples()
'A-Déclarez une variable pouvant accueillir un nom de projet qui
s'appellera NomProjet.
Dim NomProjet As String
'B-Déclarez une variable qui accepte des valeurs entières et qui
s'appellera NumeroDevis.
Dim NumeroDevis As Integer
'C-Déclarez une variable qui pourra contenir Vrai ou Faux, que
vous nommerez Prioritaire.
Dim Prioritaire As Boolean
'D-Déclarez une constante qui contiendra le 1er janvier 1950, que
vous nommerez DATE_LIMITE.
Const DATE_LIMITE As Date = #1/1/1950#
'E-Déclarez une variable pouvant stocker la valeur 3.14
(3 solutions possibles), que vous appellerez Pi
Dim Pi1 As Single
Dim Pi2 As Double
Dim Pi3 As Currency
End Sub
Exercice 2 : Déclarations multiples de variables
Private Sub DeclarationsMultiples()
'A-Déclarez deux variables de type date, que vous nommerez
DtDevis et DtFacture, sur une seule ligne
Dim DtDevis As Date, DtFacture As Date ...
Les procédures, les fonctions, les macros
Exercice 1 : Écriture de macros
'Instructions liées aux fonctions liées aux variables de portée
publique
'Créez une variable de type Date, nommée DatePartagee, de portée
publique.
'Cette déclaration de variable sera placée en haut du module.
Public DatePartagee As Date
'Exercice 1
'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. ...
Les conditions
Exercice 1 : Si Alors
'Si Alors
'Écrivez une procédure AfficheSiNegatif, de portée publique,
nécessitant un paramètre numérique entier, nommé ValeurDuDeclencheur.
Public Sub AfficheSiNegatif(ValeurDuDeclencheur As Integer)
'Cette procédure devra afficher OK si la valeur de la variable
ValeurDuDeclencheur est strictement inférieure à 0.
If ValeurDuDeclencheur < 0 Then
MsgBox "OK"
End If
End Sub
'Créez une macro SiAlors.
Public Sub SiAlors()
'Cette macro appellera dans un premier temps AfficheSiNegatif
en lui passant la valeur 35
AfficheSiNegatif 35 'rien
'puis dans un second temps AfficheSiNegatif en lui passant
la valeur -5.
AfficheSiNegatif -5 'OK
End Sub
Exercice 2 : Si Sinon
'Si Sinon
'Écrivez une fonction RetourneDoubleOuMoitie, 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 retourera une valeur possiblement décimale.
Private Function RetourneDoubleOuMoitie(ValeurEntree As Byte)
As Single 'Double est aussi accepté ici
'Cette fonction retournera le double de la valeur Entree,
si celle-ci est supérieure à 128,
If ValeurEntree > 128 Then
RetourneDoubleOuMoitie = ValeurEntree * 2
Else
'ou la moitié de la valeur ValeurEntree, sinon.
RetourneDoubleOuMoitie = ValeurEntree / 2
End If
End Function
'Créez une macro SiSinon.
Private Sub SiSinon()
'Cette macro affichera successivement la valeur retournée
par RetourneDoubleOuMoitie,
'en...
Les boucles
Exercice 1 : Boucles For Next
'Boucles For Next
'A-À pas de 1
'Créez une macro AfficherDe15a20.
Public Sub AfficherDe15a20()
'Cette macro devra afficher les valeurs allant de 15 à 20.
Dim i As Integer
For i = 15 To 20
MsgBox i
Next i
End Sub
'B-À pas de 2
'Créez une macro AfficherDe10a20.
Public Sub AfficherDe10a20()
'Cette macro devra afficher les valeurs allant de 10 à 20,
en allant de 2 en 2.
Dim i As Integer
For i = 10 To 20 Step 2
MsgBox i
Next i
End Sub
'C-À Pas décroissant
'Créez une macro Afficher40a20PasDeMoins5.
Public Sub Afficher40a20PasDeMoins5()
'Cette macro devra afficher les valeurs allant de 40 à 20,
avec un pas de 5.
Dim i As Integer
For i = 40 To 20 Step -5
MsgBox i
Next i
End Sub
...
Les opérateurs
Exercice 1 : Opérateurs arithmétiques
'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 2 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 2 paramètres de type numérique entier,
nommés A et B.
Public 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 AfficherAdditionPuisSoustration.
Public 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
'affectez à ces variables les valeurs respectives 10 et 12.
valeur1 = 10: valeur2 = 12
'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) '22
'La macro devra également afficher le résultat renvoyé par la
fonction Soustraction, en lui passant les valeurs valeur1 et valeur2.
MsgBox Soustraction(valeur1, valeur2) '-2
End Sub
'B-Division euclidienne
'Écrivez une procédure Decomposition, de portée publique.
'Cette procédure prend en paramètres deux valeurs numériques
entières, nommées Valeur et Diviseur.
Public Sub Decomposition(Valeur As Integer, Diviseur As Integer)
'La procédure affichera le résultat de la division entière
de Valeur par Diviseur...
Les chaînes de caractères
Exercice 1 : Concaténation de chaînes
Option Explicit
'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
'fonctionne également
'Concatenation = ChaineA + " " + ChaineB
End Function
'Créez une macro AfficherConcatenation.
Public 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)
'Cette fonction retournera une chaîne de caractère contenant
NombreA et NombreB sans caractère de séparation.
ConcatenationNombres = NombreA & NombreB
'attention NombreA + NombreB ne fonctionne pas
End Function
'Créez une macro AfficherConcatenationNombres.
Public Sub AfficherConcatenationNombres()
'Cette macro affichera le retour de la fonction
ConcatenationNombres, en lui passant les valeurs 20 et 5.
MsgBox ConcatenationNombres(20, 5)
End Sub
Exercice 2 : Portions de chaînes
'Portions de chaînes
'A-Plus court ou plus long
'Écrivez une fonction PlusLongQue, de portée publique, qui retourne
une valeur booléenne....
Les dates et les heures
Exercice 1 : Afficher la date et l’heure système
Option Explicit
'Afficher la date et heure système
'A-Heure du système
'Créez une macro AfficherMaintenant.
Public Sub AfficherMaintenant()
'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 AfficheDateDuJour.
Public Sub AfficherDateDuJour()
'Cette macro affichera à l'utilisateur la date du jour.
MsgBox Date
End Sub
Exercice 2 : Créer une date et une heure
'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 = DateSerial(iAnnee, 1, 1)
End Function
'Créez une macro AfficherPremierDeLAn.
Public Sub AfficherPremierDeLAn()
'Cette macro affichera le retour de la fonction PremierDeLAn,
à laquelle elle passe l'année 2023.
MsgBox PremierDeLAn(2023)
End Sub
'B-Utilisation de TimeSerial
'Créez une fonction MoinsLeQuart, de portée publique, qui retourne
'une date.
'Cette fonction prend en paramètre une valeur numérique entière,
'comprise entre 0 et 23, nommée iHeure.
Public Function MoinsLeQuart(iHeure As Integer) As Date
'Cette fonction doit retourner l'heure fournie en paramètre,
moins 15 minutes.
'solution 1, vous effectuez le calcul des 15 minutes en dehors
du TimeSerial
MoinsLeQuart = TimeSerial(iHeure + 24, 0, 0) - (15 / 24) / 60
'solution 2, vous effectuez le calcul des 15 minutes directement
dans le TimeSerial
MoinsLeQuart = TimeSerial(iHeure + 24, -15, 0) ...
Les cellules
Exercice 1 : Valeur dans une cellule
Option Explicit
'Valeur dans une cellule
'A-Avec activation
'Créez une macro ActiverCelluleA1PuisBonjourDansCelluleActive.
Public Sub ActiverCelluleA1PuisBonjourDansCelluleActive()
'Cette macro activera la cellule A1, puis mettra dans la
cellule active la valeur "Bonjour".
Range("A1").Activate
ActiveCell.Value = "Bonjour"
End Sub
'B-Sans activation
'Créez une macro EcrireDansCelluleA2.
Public 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
'Un peu de couleurs
'Créez une macro ColorierCelluleEnJaune.
Public Sub ColorierCelluleEnJaune()
'Cette macro demandera à l'utilisateur de rentrer une adresse
de cellule (vous ferez en sorte que l'adresse soit valide).
Dim strCellule As String
strCellule = InputBox("Veuillez saisir l'adresse de la cellule")...
Les feuilles
Exercice 1 : Feuille active
'Feuille active
'Créez une macro AfficherNomFeuilleActive.
Public Sub AfficherNomFeuilleActive()
'Cette macro affichera le nom de la feuille active.
MsgBox ActiveSheet.Name
End Sub
Exercice 2 : Copie d’une feuille à l’autre
'Copie d'une feuille à l'autre
'Créez une macro CreerRemplirEtNommerFeuille.
Public Sub CreerRemplirEtNommerFeuille()
'Dans cette macro vous commencerez donc par déclarer une
variable de type feuille (Worksheets), que vous nommerez wsh.
Dim wsh As Worksheet
'La macro ajoutera une nouvelle feuille, et utilisera
la variable wsh pour pointer sur cette nouvelle feuille.
Set wsh = Worksheets.Add
'Vous nommerez cette nouvelle feuille Feuille_Temporaire.
wsh.Name = "Feuille_Temporaire" 'attention, si une feuille
se nomme déjà Feuille_Temporaire l'instruction échouera
'La macro effectuera ensuite une copie des cellules de ...
Les classeurs
Exercice 1 : Utiliser ThisWorkbook
Option Explicit
'Utiliser ThisWorkbook
'A-Emplacement du classeur
'Créez une macro AfficherEmplacementClasseur.
Public 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.
Public 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
'Créer enregistrer et fermer un classeur
'A-Création d'un nouveau classeur
'Créez une macro CreerClasseurEtAfficherNombreFeuilles.
Public Sub CreerClasseurEtAfficherNombreFeuilles()
'Cette macro devra créer un nouveau classeur, puis afficher
à l'écran le nombre de feuilles de ce classeur nouvellement créé....
L’application Excel
Exercice 1 : Lancer une nouvelle application Excel
Option Explicit
'Lancement d'une nouvelle application Excel
'Créez une macro LancerNouvelleApplicationExcel.
Public 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
xlApp.Visible = True
End Sub
Exercice 2 : Obtenir les objets actifs
'Obtenir les objets actifs
'Créez une macro AfficherNomsObjectsActifs.
Public Sub AfficherNomsObjectsActifs()
'Cette macro affichera le nom du classeur actif, puis le nom
de la feuille active et enfin la valeur de la cellule active.
MsgBox Application.ActiveWorkbook.Name
MsgBox Application.ActiveSheet.Name
MsgBox Application.ActiveCell.Value
End Sub
Exercice 3 : Parcourir quelques...
Les formules
Exercice 1 : Écriture de formules en français
Option Explicit
'Écriture de formules en français
'A-Nombre total d'éléments
'Créez une macro FormuleSommeQuantites.
Public Sub FormuleSommeQuantites()
'Cette macro écrira dans la cellule B7 une formule SOMME
des quantités.
'Vous devrez utiliser la formule en français (FormulaLocal).
Worksheets("Exercices_ManipulationFormules").Range("B7")
.FormulaLocal = "=SOMME(B2:B6)"
End Sub
'B-Quantité maximale
'Créez une macro FormuleMaximumQuantites.
Public Sub FormuleMaximumQuantites()
'Cette macro écrira dans la cellule B8 une formule MAX
des quantités.
'Vous utiliserez de nouveau la formule en français (FormulaLocal).
Worksheets("Exercices_ManipulationFormules").Range("B8")
.FormulaLocal = "=MAX(B2:B6)"
End Sub
Exercice 2 : Écriture de formules...
Les graphiques
Exercice 1 : Création simple de graphique
Option Explicit
'Création simple de graphique
'A-Chiffre d'affaires mensuel
'Créez une macro GraphiqueChiffreAffaires.
Public Sub GraphiqueChiffreAffaires()
'Cette macro devra créer un nouveau graphique, de type Courbe,
Dim cht As Chart
Set cht = Charts.Add()
cht.ChartType = xlLine
'en se basant sur les données situées dans la plage
de cellules A1:B5.
cht.SetSourceData Worksheets("Exercices_ManipulationGraphes")
.Range("A1:B5")
'Le titre du graphique sera Chiffre d'affaires mensuel,
ne contiendra pas de légende.
cht.HasTitle = True
cht.ChartTitle.Caption = "Chiffre d'affaires mensuel"
cht.HasLegend = False
End Sub
'B-Répartition du chiffre par produit
'Créez une macro GraphiqueRepartitionParProduit.
Public Sub GraphiqueRepartitionParProduit()
'Cette macro devra créer un nouveau graphique, de type Secteurs,
Dim cht As Chart
Set cht = Charts.Add()
cht.ChartType = xlPie
'en se basant sur les données situées dans la plage
de cellules D1:E5.
cht.SetSourceData Worksheets("Exercices_ManipulationGraphes")
.Range("D1:E5")...
Les formulaires utilisateurs
Exercice 1 : Formulaire élémentaire
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 Zone de texte puis tracez-la dans le formulaire.
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é :
Option Explicit
'Créez un formulaire nommé UsfExercice1.
'Lorsque l 'utilisateur cliquera sur le bouton,
'vous afficherez dans une boîte de dialogue MsgBox le texte
contenu dans la zone de texte.
Private Sub CommandButton1_Click()
MsgBox Me.TextBox1.Value
End Sub
Testez votre formulaire : menu Exécution - Exécuter Sub/UserForm.
Exercice 2 : Aller un peu plus loin
Cliquez sur le menu Insertion - UserForm.
Dans le volet Propriétés du formulaire, changez la propriété Name à...
Gestion des erreurs et débogage
Exercice 1 : Renforcer vos précédents exercices
Option Explicit
'Renforcez vos précédents exercices
'Dans un souci de rendre plus robustes vos exercices des précédents
chapitres, voici quelques pistes pour vous.
'Chapitre 5 MsgBox InputBox - Exercice BoiteElementaire :
'Assurez-vous que l'utilisateur ne saisit pas une valeur
numérique ni une date.
Public Sub Blindage_BoiteElementaire()
Dim Valeur
Valeur = Application.InputBox("Bonjour, quel est votre nom ?")
If Not IsNumeric(Valeur) And Not IsDate(Valeur) Then
MsgBox Valeur
Else
MsgBox "Vous avez saisi une valeur numérique ou une date",
vbOKOnly + vbCritical
End If
End Sub
'Chapitre 11 Chaînes de caractères Exercice TitreEtDate :
'Assurez-vous que les caractères passés en paramètres ...