Les sous-programmes : exercices résolus en VBA Corrigé

Documents pareils
Algorithmique et programmation : les bases (VBA) Corrigé

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

= constante et cette constante est a.

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

HERAKLES Page 1 sur 6 COMMENT CREER DES FACTURES D ACCOMPTE FICHE COMMENT CREER DES FACTURES D ACCOMPTE?

Compléments de documentation Scilab : affichage de texte et formatage de nombres

MANUEL UTILISATEUR : RECETTES TABLE DES MATIERES PIE : PRESTATIONS INTERNES ET EXTERNES

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Algorithmique & programmation

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Utilisation d objets : String et ArrayList

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

III- Raisonnement par récurrence

Corrigé des TD 1 à 5

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

CAISSE ENREGISTREUSE ELECTRONIQUE SE-G1

COMPTABILITE SAGE LIGNE 100

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

Comment personnaliser la présentation de mes factures, bons de préparation et de livraison?

Visual Basic for Applications

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Application 1- VBA : Test de comportements d'investissements

Feuille TD n 1 Exercices d algorithmique éléments de correction

Cours d algorithmique pour la classe de 2nde

Les pourcentages. Un pourcentage est défini par un rapport dont le dénominateur est 100. Ce rapport appelé taux de pourcentage est noté t.

Examen Médian - 1 heure 30

Thème : Gestion commerciale

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

GUIDE DE PRISE EN MAIN

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

CEGID - Business Suite Gestion commerciale

Développements limités, équivalents et calculs de limites

Guide d Utilisation du logiciel Diagnostic Commerce

EVOLUTION 7.1 Déroulement DREAM INFO 1 Dossier 23 Ciel Gestion Commerciale.

DE MODIFICATION PROCEDURE ELYXBADGE APPLICATION. PI Électronique Restobadge

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

avec des nombres entiers

1. Structure d'un programme FORTRAN 95

GESTION WINPRO ** PRISE EN MAIN RAPIDE **

.NET - Classe de Log

Faire de la publicité sur GOOGLE AD-WORDS

Google fait alors son travail et vous propose une liste de plusieurs milliers de sites susceptibles de faire votre bonheur de consommateur.

C f tracée ci- contre est la représentation graphique d une

DECOUVERTE DU LOGICIEL CIEL GESTION COMMERCIALE

UML et les Bases de Données

MegaStore Manager ... Simulation de gestion d un hypermarché. Manuel du Participant

Plan du cours Cours théoriques. 29 septembre 2014

Exercices sur les interfaces

FORMATION au VBA Pour EXCEL. Version 2007 & +

Rapport de Mini-Projet en ArcGIS Engine

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

EXERCICE N 9. Base Centrale de pilotage. Notions abordées : Création d objets personnels. Utilisation de fonctions numériques

Utilitaires méconnus de StrataFrame

4 Exemples de problèmes MapReduce incrémentaux

TP1. Outils Java Eléments de correction

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Dématérialisation des factures du Secteur Public

Créer sa première base de données Access Partie 3/4 - Création d un formulaire

CARTE ACHAT. Yolande Sallent

COMPTABILITE SAGE LIGNE 30

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Alarme domestique- Présentation

Les indices à surplus constant

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Loi de finance rectificative 2012 Article 68 de la loi de finances rectificative pour 2012 n du 29 décembre 2012

Cahier des charges Remontée des ventes

Notice Générale - MODULE CLIENTS. I. Description générale du module. II. La liste des clients a. Accès

LES OPÉRATIONS JOURNALIÈRES. a) qu est ce qu une entreprise peut vendre à ses clients :

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Projet CORBA : gestion de supermarchés

CHAPITRE 2 L ACQUISITION D IMMOBILISATIONS

Routage AODV. Languignon - Mathe - Palancher - Pierdet - Robache. 20 décembre Une implémentation de la RFC3561

GESTION BUDGETAIRE. BTS MUC, Gestion commerciale. Lycée Charles de Gaulle Vannes INTRODUCTION :

Correction de l examen de la première session

Plan de formation des Personnels en CUI-CAE Année

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

A. Définition et formalisme

Import d un fichier de contacts dans une campagne

Exercices Corrigés Premières notions sur les espaces vectoriels

DovAdis. Objet Rapprochement bancaire Métier Gérance. Siège social SPI 1, rond-point du Flotis Bât IV St Jean

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

Mise à jour ESCentiel - Juin 2012

Éco-Chèque UNE AIDE DE LA RÉGION MIDI-PYRÉNÉES POUR LES PARTICULIERS QUI FONT DES TRAVAUX D ÉCONOMIE D ÉNERGIE DANS LEUR LOGEMENT

PARAMETRAGE DU STOCKAGE/DESTOCKAGE DES ARTICLES & MOUVEMENTS DE STOCKS

, accessible depuis l application ITOOL Comptabilité est un module complémentaire permettant la dématérialisation de vos factures d achats.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

EBP Point de vente (Front office)

Recherche dans un tableau

Saisir des règlements par le relevé de banque

3 Approximation de solutions d équations

NOTICE SIMPLIFIEE ER-A280F. I Initialisation avec Remise à Zéro de la caisse : ENTER PASSWORD ER-A280V. Ver1.02

Paginer les données côté serveur, mettre en cache côté client

Génie Logiciel avec Ada. 4 février 2013

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

RAPPORTN CP DIRECTIONGENERALEDESSERVICES PÔLEBATIMENTSET TRANSPORTS. Direction : Maintenance et des Aménagements

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Transcription:

PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Exercices résolus en VBA, Semaine 3 avril mai 2013 Corrigé Objectifs Savoir écrire des sous-programmes ; Comprendre les modes de passage de paramètres ; Faire la différence entre fonction et procédure ; Continuer à appliquer les principes des semaines 1 & 2. Exercice 1 : Notion de produit......................................................... 1 Exercice 2 : Notion de ligne de facture................................................. 2 Exercice 3 : Notion de facture......................................................... 3 Exercice 4 : Programme de test........................................................ 6 1 Édition simplifiée d une facture L objectif de ces exercices est de réaliser l édition d une facture dans une version relativement simplifiée puisqu il s agit de pouvoir ajouter et/ou supprimer des lignes sur une facture et de l éditer à l écran. Nous ne traiterons pas l interface homme/machine (IHM) et nous nous contenterons donc de développer les types et sous-programmes qui constituent ce modèle. Exercice 1 : Notion de produit Commençons par définir le type Produit et les opérations associées. 1.1 Écrire le type Produit sachant qu un produit est caractérisé par un code (sur 3 caractères), un libellé (9 caractères) et un prix hors taxe. Solution : Le type Produit est un enregistrement composé de trois champs un code de type chaîne de 3 caractères, un libellé (chaîne de 9 caractères) et un prix hors taxe (Réel). 1 Type Produit 2 code As String 3 libelle As String 4 prix_ht As Double 5 End Type 1.2 Écrire un sous-programme pour initialiser un produit à partir de son code, son libellé et son prix hors taxe. Solution : Le but du sous-programme est «initialiser un produit à partir de son code, son libellé, et son prix hors taxe». Exercices résolus en VBA, Semaine 3 c INPT PAD 1/6

Les paramètres sont donc : le produit à initialiser : out ; le code du produit : in ; le libellé du produit : in ; le prix du produit : in. On constate qu il n y a qu un seul paramètre en sortie et tous les autres sont en entrée. Nous en faisons quand même une procédure car il s agit d un sous-programme d initialisation. Il est préférable dans ce cas que la mémoire soit fournie par le programme appelant (ceci évite par exemple de faire des copies inutiles lors du retour de la fonction). On peut donc en déduire la spécification. 1 Procédure initialiser_produit(p: out Produit) ; 2 c: in Code ; l: in Libellé ; prix_ht: in Réel) Est 3 -- Initialiser le produit p à partir de son code c, de son libellé l 4 -- et de son prix hors taxe. On peut maintenant en déduire le code. 1 Début 2 produit.code <- c 3 produit.libellé <- l 4 produit.prix_ht <- prix_ht 5 Fin 1 Sub initialiser_produit(p As Produit, _ 2 ByVal c As String, ByVal l As String, ByVal prix_ht As Double) 3 ROLE : Initialiser un nouveau produit p avec un code, un libellé et un prix hors taxe 4 ENTREE c, l, prix_ht : code, libellé et prix à affecter au produit 5 SORTIE p 6 p.code = c 7 p.libelle = l 8 p.prix_ht = prix_ht pas d ambiguïté entre les 2 identificateurs prix_ht : 9 le 1er est forcément un champ de l enregistrement, le second une variable ou 10 un paramètre formel (ici, c est un paramètre formel) 11 End Sub Exercice 2 : Notion de ligne de facture Le type LigneFacture permet de représenter une ligne d une facture. Il est caractérisé par le produit concerné, la quantité commandée et le prix total hors taxe de la ligne. 2.1 Définir le type LigneFacture. Solution : Le type LigneFacture est également un enregistrement. Notons la redondance entre le prix hors taxe de la ligne et des informations prix hors taxe d un produit et quantité commandée. 1 Type LigneFacture 2 produitachete As Produit 3 quantite As Integer > 0 4 prix_ht As Double prix_ht = quantite * produitachete.prix_ht 5 End Type 2.2 Définir une opération qui permet d initialiser une ligne de facture à partir du produit concerné et de la quantité commandée. Le prix total hors taxe de la ligne peut être déduit de ces Exercices résolus en VBA, Semaine 3 c INPT PAD 2/6

deux informations puisqu il correspond au prix hors taxe du produit multiplié par la quantité commandée. Solution : L initialisation d une ligne de facture est réalisée sur le même principe que le produit. 1 Sub initialiser_ligne(ligne As LigneFacture, p As Produit, ByVal quantite As Integer) 2 ROLE : Initialiser une ligne de facture a partir du produit concerne 3 et de la quantite commandee. 4 ENTREE p, quantite 5 SORTIE ligne 6 ligne.produitachete = p 7 ligne.quantite = quantite 8 ligne.prix_ht = p.prix_ht * quantite 9 End Sub 2.3 Écrire une opération qui affiche une ligne de facture. Les informations sont affichées de manière tabulée avec dans l ordre le code du produit, son libellé, son prix hors taxe, la quantité commandé, le prix total hors taxe et le prix total TTC. On supposera le taux de TVA constant et indépendant des produits. Voici un exemple de ligne affichée. 1 001 Truc 99.00 10 990.00 1184.04 Solution : Ce sous-programme réalise un affichage sur l écran. Il convient donc d en faire une procédure. Notons qu il n a qu un seul paramètre en entrée, la ligne de facture, ce qui nous aurait aussi conduit à en faire une procédure. 1 Sub afficher_ligne(ligne As LigneFacture) 2 ROLE : Afficher une ligne de facture 3 ENTREE ligne 4 Dim prix_ttc As Double 5 calculer le prix ttc 6 prix_ttc = ligne.prix_ht * (1 + TVA) 7 afficher la ligne 8 Afficher ligne.produitachete.code, ligne.produitachete.libelle, ligne.produitachete 9 ligne.quantite, ligne.prix_ht, prix_ttc 10 End Sub Exercice 3 : Notion de facture Définissons enfin le type Facture. Une facture contient plusieurs lignes (20 au maximum). Elle est caractérisée par un numéro de facture. 3.1 Définir le type Facture. Solution : Le type Facture est un tableau de lignes de facture. On ne sait pas à priori combien il y aura de lignes mais on sait qu il y en a moins de 20. On peut donc prendre un tableau de capacité 20 et il faudra gérer la taille effective. Ces deux informations sont donc regroupées dans un enregistrement 1 Const NB_LIGNES As Integer = 20 nombre maximal de lignes sur une facture 2 Type Facture 3 numero As Integer 4 lignes(nb_lignes) As LigneFacture 5 nb_lignes_eff As Integer nombre effectif de lignes sur la facture Exercices résolus en VBA, Semaine 3 c INPT PAD 3/6

6 End Type 3.2 Écrire une opération qui permet d initialiser une facture à partir de son numéro. Une telle facture est bien entendu vierge et ne contient donc aucune ligne. Solution : Ce sous-programme a un seul paramètre, la facture à initialiser. C est un paramètre en sortie. On fait donc une procédure. 1 Sub initialiser_facture(une_facture As Facture, ByVal son_numero As Integer) 2 ROLE : Initialiser une facture vierge (aucune ligne) en lui affectant le numero spécif 3 ENTREE son_numero 4 SORTIE une_facture 5 une_facture.numero = son_numero 6 une_facture.nb_lignes_eff = 0 7 End Sub 3.3 Écrire un sous-programme qui permet de calculer le montant total hors taxe de la facture. Il s agit de faire la somme des totaux hors taxe des lignes de la facture. Solution : Ce sous-programme prend en paramètre une facture (entrée) et fournit le total hors taxe de la facture (sortie). Il y a donc un seul paramère en sortie, d autres qui sont tous en entrée. On en fait donc une fonction. 1 Fonction montant_total_ht_facture(une_facture: Facture): Réel Est 2 -- Le montant total hors taxe de la facture une_facture. 1 Function montant_total_ht_facture(une_facture As Facture) As Double 2 ROLE : renvoie le montant total HT d une facture 3 ENTREE une_facture 4 Dim l As Integer index pour parcourir les lignes de la facture 5 Dim resultat As Double 6 resultat = 0 7 For l = 1 To une_facture.nb_lignes_eff 8 resultat = resultat + une_facture.lignes(l).prix_ht 9 Next l 10 montant_total_ht_facture = resultat 11 End Function Notons qu en F, on a défini une variable locale resultat qui sert à accumuler le total des lignes. 3.4 Écrire un sous-programme pour ajouter une ligne à une facture, c est-à-dire un produit et la quantité commandée. Solution : Ce sous-programme prend en paramètre la facture à modifier (in out), le produit à ajouter (in) et la quantité commandée (in). On fait donc une procédure. Notons que pour l implantation de cette procédure, on peut utiliser l opération initialiser_ligne déjà définie. 1 Sub ajouter_ligne(une_facture As Facture, p As Produit, ByVal quantite As Integer) 2 ROLE : Ajoute une ligne a une facture 3 HYPOTHESE : une_facture.nb_lignes < NB_LIGNES 4 ENTREE p, quantite 5 M.A J. une_facture 6 une_facture.nb_lignes_eff = une_facture.nb_lignes_eff + 1 Exercices résolus en VBA, Semaine 3 c INPT PAD 4/6

7 initialiser_ligne une_facture.lignes(une_facture.nb_lignes_eff), p, quantite 8 End Sub 3.5 Écrire un sous-programme qui permet d éditer une facture. Il s agit d afficher un entête portant le numéro de la facture. Ensuite sont affichées toutes les lignes et enfin le total hors taxe et TTC de la facture. Voici un exemple d édition d une facture. 1 2 Édition de la facture 1 3 ------------------------------------------------------- 4 001 Truc 99.00 10 990.00 1184.04 5 020 Chose 15.00 2 30.00 35.88 6 163 Bidule 250.00 1 250.00 299.00 7 ------------------------------------------------------- 8 1270.00 1518.92 Solution : Ce sous-programme prend un seul paramètre, la facture à éditer (in). Son objectif est de faire un affichage sur l écran (une sortie sur l écran). Nous en faisons donc une procédure. 1 Sub editer_facture(une_facture As Facture) 2 ROLE : Affiche a l ecran la facture 3 ENTREE une_facture 4 Dim l As Integer index pour parcourir les lignes de la facture 5 6 Dim total_ht As Double total ht de la facture Dim total_ttc As Double total ttc de la facture 7 8 1.Calculer les totaux 9 total_ht = montant_total_ht_facture(une_facture) 10 total_ttc = total_ht * (1 + TVA) 11 12 2.Afficher l entete 13 Afficher "Facture n ", une_facture.numero 14 Afficher "CODE", "LIBELLE", "PRIX HT", "QUANTITE", "TOTAL HT", "TOTAL TTC" 15 16 3.Afficher les lignes 17 18 For l = 1 To une_facture.nb_lignes_eff afficher_ligne une_facture.lignes(l) 19 Next l 20 4.Afficher les totaux 21 Afficher,,, "TOTAL", total_ht, total_ttc 22 End Sub 3.6 Écrire un sous-programme pour supprimer une ligne d une facture en fonction de son numéro. Bien sûr, la première ligne porte le numéro 1. Solution : Ce sous-programme a pour paramètres la facture à modifier (in out) et le numéro de la ligne à supprimer (in). On fait donc une procédure. 1 Sub supprimer_ligne(une_facture As Facture, ByVal n_ligne As Integer) 2 ROLE : supprime de la facture spécifiée la ligne de numero numero n_ligne 3 HYPOTHESE : n_ligne est compris entre 1 et une_facture.nb_lignes inclus 4 M.A J. une_facture Exercices résolus en VBA, Semaine 3 c INPT PAD 5/6

5 ENTREE n_ligne 6 Dim l As Integer index pour parcourir les lignes a decaler 7 Decaler les lignes 8 For l = n_ligne To une_facture.nb_lignes_eff 9 une_facture.lignes(l) = une_facture.lignes(l + 1) 10 Next l 11 une_facture.nb_lignes_eff = une_facture.nb_lignes_eff - 1 12 End Sub Exercice 4 : Programme de test Écrire un programme de test pour les types et opérations définis dans les exercices précédents. Remarque : Même si c est le dernier exercice, il est souhaitable (et nécessaire) de le faire en même temps que les autres, au fur et à mesure que les sous-programmes sont écrits. En effet, tester au fur et à mesure permet de tester de manière plus exhaustive (donc de détecter plus d erreurs), de localiser plus vite la cause de l erreur et donc de la corriger plus facilement. Solution : 1 Sub TesterFacture() 2 ROLE : tester l utilisation d une facture 3 Attention : ce programme de test n est absolument pas complet 4 Dim f1 As Facture 5 Dim p1 As Produit, p2 As Produit, p3 As Produit 6 7 EffacerEcran "Test des procédures de gestion d une facture" 8 1.Creation de 3 produits 9 initialiser_produit p1, "001", "Truc", 99 10 initialiser_produit p2, "020", "Chose", 15 11 initialiser_produit p3, "163", "Bidule", 250 12 13 2.Creation de la facture en ajoutant les lignes 14 initialiser_facture f1, 1 15 editer_facture f1 16 ajouter_ligne f1, p1, 10 17 editer_facture f1 18 ajouter_ligne f1, p2, 2 19 editer_facture f1 20 ajouter_ligne f1, p3, 1 21 editer_facture f1 22 23 3.Suppression de la deuxieme ligne 24 25 supprimer_ligne f1, 2 editer_facture f1 26 27 End Sub Exercices résolus en VBA, Semaine 3 c INPT PAD 6/6