Vous êtes sur la page 1sur 6

CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

Exercice 1 : Procédure simple


A partir de l’exercice 1 (algorithme) relatif au calcul de la valeur acquise d’une suite de n
annuités constantes de fin de période placées au taux d’intérêt annuel i, créez la procédure
VBA correspondante en utilisant Excel :
1) Démarrez Excel et nommez la feuille « feuil1 » en « valacquise1 »
2) Créez une procédure que vous appellerez ValAcqu (Cf. Fiche technique VBA3
« Procédure en VBA »
3) Saisissez le code VBA découlant de l’algorithme que vous avez réalisé (Cf. Fiche
technique VBA4 « les principales commandes »)
Remarque : la fonction CONVCHAINE(…) se traduit en VBA par l’instruction Cstr(…)
4) Pour vérifier que le code est correct, compilez la procédure : menu Déboguage – Compiler
5) Dans la feuille de calcul nommée « valacquise », créez un bouton et associez lui le nom de
la procédure que vous avez saisie (Cf fiche technique VBA1)
6) Testez le bon fonctionnement du code avec les éléments suivants :
Annuité : 6 500
Taux d’intérêt : 7%
Nombre d’annuités : 5

Exercice 2 : Fonction personnalisée simple – Calculs par tranche


Une société accorde à ses clients une ristourne annuelle calculée par tranche selon les
conditions suivantes :
Caff HT≤6 500 € => Ristourne = 3%
6 500<Caff HT≤10 500 => Ristourne =5%
10 500<Caff HT≤15 000 =>Ristourne=7%
Caff HT> 15 000 =>Ristourne =8%

Activité :
1) Rédigez l’algorithme de la fonction personnalisée CalcRistourne permettant d’obtenir
pour un chiffre d’affaires donné, le montant de la ristourne
2) Dans le classeur utilisé pour l’exercice 1, insérez une fonction dans la feuille de
module « Module1 » et saisissez le code VBA correspondant à l’algorithme de la
première question
3) Renommez la feuille « Feuil2 » en Ristourne annuelle, saisissez les éléments du jeu
d’essai ci-dessous et implantez la formule de calcul de la ristourne en utilisant la
fonction personnalisée que vous avez créé lors de la question 2
Jeu d’essai à saisir :
A B
1 Caff HT Ristourne
2 5000
3 8500
4 13000
5 17500

Remarque :
- Le symbole % n’est pas reconnu par VBA, il faut donc écrire 0,07 au lieu de 7% dans
le code

© F.REDONNET http://www.ticegestion.com page 1/6


CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

Exercice 3 : Manipulation des objets Excel dans VBA


Classeur : NOTEELEVE.XLS
1) Ouvrez un nouveau classeur et enregistrez le sous le nom NOTEELEVE.XLS
2) Nommez la feuille Feuil1 en « Notes »
3) Ouvrez l’éditeur de VBA, insérez un nouveau module
4) Créez une procédure VBA nommé TitreColonne dont l’objectif est d’obtenir ceci :
A B C D E F G H I
1 Note 1 Note 2 Note 3 Note 4 Note 5 Note 6 Note 7 Note 8
2
les titres de colonnes sont en gras
5) On veut maintenant générer des notes aléatoires (fonction Rnd) comprises entre 1 et
20. L’utilisateur est invité à saisir un nombre d’élèves compris entre 1 et 30. Le
programme doit par ailleurs contrôler le nombre saisi par l’utilisateur.
L’algorithme est le suivant :
VARIABLES :
Classeur : Objet Classeur
Feuille : Objet Feuille
NbNotes : Entier
i,j : Entier
PROCEDURE GénérerNotes()
Classeur<-Classeur actif
Feuille<-Feuille « Notes »
NbNotes<-0
Effacer Plage de cellules B2 :I31
TANT QUE NbNotes <1 OU NbNotes>30
SAISIR(« Combien de notes voulez vous ? saisissez un nombre entre 1 et 30 »,NbNotes)
FIN TANT QUE
POUR I :=1 JUSQU'A NbNotes
POUR J :=2 TO 9
Cellule(i,j) <- ENT(RND*20)
FIN POUR
FIN POUR
FIN PROCEDURE

Activité :
a) Créez en VBA la procédure correspondant à cet algorithme. Aidez vous au besoin des
fiches techniques VBA4, VBA5 et de l’aide en ligne de VBA
b) Dans la cellule A1 de la feuille Notes, créez un bouton de commande et affectez lui la
macro « GénérerNotes ». Tester la macro en saisissant successivement différentes
valeurs (par exemple 0, 20 ou 40)

© F.REDONNET http://www.ticegestion.com page 2/6


CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

Exercice 4 : transformation d’un tableau en table relationnelle


L’assistant du contrôleur de gestion, M. OUISSANT, de la SA ProgRam réalise tous les
mois un tableau de ventilation des Charges par nature sur Excel (annexe 1). La société a
fait l’acquisition du logiciel Access et l’assistant souhaite donc basculer le suivi des
charges sur Access.

L’extrait du modèle de données est le suivant :


1,n
DATE 0,n CHARGES
Ventilation
Date CodeCharge
Montant LibelléCharge

Modèle relationnel :
CHARGES(CodeCharge, LibelléCharge)
VENTILATION(#CodeCharge, #Date, Montant)

1) M. OUISSANT a créé une procédure VBA qui permet de remplir automatiquement le


tableau contenu dans la feuille « export » (annexe 2). Cette procédure ne fonctionne
que pour le mois de Janvier.
Le code de cette procédure est le suivant :
Public Sub TableauImport()
Dim i, j, Idest, flag As Integer
Dim TabSource As Worksheet
Dim tabDest As Worksheet
Set TabSource = Application.ActiveWorkbook.Sheets("Janvier")
Set tabdestination = Application.ActiveWorkbook.Sheets("export")
flag = 0
Idest = 2
tabdestination.Range("A2:C125").ClearContents
tabdestination.Select
For i = 3 To 33
For j = 2 To 5
If TabSource.Cells(i, j).Value = 0 Then
flag = 0
Else
flag = 1
End If
Next j
If flag = 1 Then
For j = 2 To 5
If TabSource.Cells(i, j) <> 0 Then
tabdestination.Cells(Idest, 1) = TabSource.Cells(i, 1)
tabdestination.Cells(Idest, 2) = TabSource.Cells(2, j)
tabdestination.Cells(Idest, 3) = TabSource.Cells(i, j)
Idest = Idest + 1
Else
'on ne fait rien
End If
Next j
Else
'on ne fait rien
End If
Next i
End Sub
a) Le tableau « export » peut contenir jusqu’à combien de lignes de données maximum ?

© F.REDONNET http://www.ticegestion.com page 3/6


CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

b) Expliquez le rôle des lignes en gras


c) Quel est le rôle de la variable flag (drapeau) ?
d) A quoi servent les variables i, j et Idest ?
e) Dans la deuxième boucle For j=2 to 5, quel est le rôle du test If TabSource.Cells(i,j)<>
0 Then… ?
f) Pourquoi fait on varier i de 3 à 33 et j de 2 à 5 ?
g) Exécutez la macro en cliquant sur le bouton figurant dans la feuille Janvier

2) Maquettage de l’application
M. Ouissant souhaiterait que vous réalisiez, dans une feuille vierge, un menu de ce type :

a) Réalisez cette page de menu sans pour l’instant affecter de macros


b) Le bouton « Saisir des données » : enregistrez une macro (avec l’enregistreur de
macro) que vous nommerez « Saisie » et qui a pour effet d’ouvrir une feuille de
répartition mensuelle et de positionner le curseur dans la cellule B3. Modifiez le code
pour que la feuille qui soit ouverte soit celle dont le nom figure dans la cellule E12 de
la feuille « Menu ». Vous pouvez profiter de cette modification pour alléger le code
généré par l’enregistreur de macros
c) Le bouton « Préparer le tableau d’exportation vers Access »
Dans l’éditeur VBA, copiez le code VBA de la procédure « TableauImport » et collez le
juste en dessous. Renommez la nouvelle procédure ainsi obtenue en « TableauImport2 ».
Corrigez cette procédure pour faire en sorte que le traitement s’opère pour le mois qui a
été saisi dans la cellule E12 de la feuille « Menu ». Affectez ensuite la macro
« TableauImport2 » au bouton adéquat de la feuille « Menu »
d) Le bouton « Quitter l’application »

© F.REDONNET http://www.ticegestion.com page 4/6


CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

Créez une nouvelle procédure que vous nommerez « Quitter », cette procédure doit
afficher un message demandant à l’utilisateur s’il veut quitter l’application (deux
boutons : Oui ou Non). En cliquant sur Oui, l’application sera automatiquement fermée.
Affectez la macro « Quitter » au bouton « Quitter l’application »
Sauvegardez votre travail avant de tester le bouton.

Le coin des intrépides : le bouton « Réinitialiser toutes les données »


Si vous réalisez cette étape, travaillez avec une copie de votre classeur.
Ce bouton peut servir à plusieurs traitements :
- Effacer les cellules B3 à B33 des feuilles « Janvier » à « Décembre » : cette étape peut
être enregistrée avec l’enregistreur de macro : sélectionnez toutes les feuilles
concernées (une sélection multiple de feuilles s’appelle un groupe de travail) en une
fois, sélectionnez la plage B3 à B33 et appuyez sur la touche Suppr, cliquez sur une
autre feuille de calcul pour désélectionner le groupe de travail, arrêtez la macro et
corrigez au besoin le code VBA.
- Réinitialiser toutes les dates en utilisant la cellule E4 pour récupérer l’année : il y deux
façons de faire : en VBA (très lourd) et sans VBA en utilisant la fonction de calcul
=DATE (…….) et en utilisant la recopie (feuille par feuille)

Annexe 1 : Tableau de ventilation mensuel


A B C D E F G
1 Répartition des charges Mois : Janvier
2 Dates ACH CARB ENT LOC
3 01/01/2003 156 47 75 62
4 02/01/2003 136 96
5 03/01/2003
6 04/01/2003 131 181 143 196
7 05/01/2003 63
8 06/01/2003 192 185 192 192
9 07/01/2003 52 81 12 33
10 08/01/2003 105 98 178
11 09/01/2003 96 66 176
12 10/01/2003 72 74 87
13 11/01/2003 110 127 126 34
14 12/01/2003
15 13/01/2003 34 13 69 50
16 14/01/2003 30 92 175 152
17 15/01/2003 41 65 179
18 16/01/2003 97 0 72 161
19 17/01/2003 90 182 121 18
20 18/01/2003 49 98 4 180
21 19/01/2003 11 64 164 45
22 20/01/2003 62 147 168
23 21/01/2003 26 43 121
24 22/01/2003 136 20 83 53
25 23/01/2003 110 25 170 15
26 24/01/2003 133 33 154
27 25/01/2003
28 26/01/2003 26 84 110
29 27/01/2003 111 90 80 81
30 28/01/2003 57 85 145 142
31 29/01/2003 122 95 63
32 30/01/2003 31 100 20
33 31/01/2003 81 141 150 84
34 Total mois 2192 2243 2313 2479

Annexe 2 extrait du tableau d’importation (résultat à obtenir par programmation

© F.REDONNET http://www.ticegestion.com page 5/6


CGO P10 – DE L’ALGORITHME A LA PROGRAMMATION EN VBA

A B C
1 DATE CODECHARGE MONTANT
2 01/01/2003 ACH 156 Pour chaque montant figurant
3 01/01/2003 CARB 47 dans le tableau de ventilation,
4 01/01/2003 ENT 75 on obtient ici une ligne
5 01/01/2003 LOC 62 composée de la date, du code
6 04/01/2003 ACH 131 charge et du montant. Les
7 04/01/2003 CARB 181 cellules sans montants ne sont
8 04/01/2003 ENT 143
pas traitées
9 04/01/2003 LOC 196
10 06/01/2003 ACH 192
11 06/01/2003 CARB 185

© F.REDONNET http://www.ticegestion.com page 6/6

Vous aimerez peut-être aussi