Cours Cgao en PDF
Cours Cgao en PDF
Cours Cgao en PDF
AssIstee PAr
AssIstees
orDINAteur (C.g.A
(C A.o.)
lIVre D’ACtIVIte
ClAsses 1 &t Cg
ère les
tHeoDore Nkoum
Plet / tqg
1
Le cours vise à consolider l’habileté de l’apprenant en fin de second cycle du secondaire et à
l’imprégner à l’utilisation des fonctions avancées.
Le cours comprend des leçons théoriques et des travaux pratiques (TP) qui se déroulent dans les
salles de bureau commercial (ou salles d’informatique). Les évaluations porteront sur des questions
théoriques et des travaux pratiques.
2
Une formule est une expression littérale qui sert à effectuer des calculs. Elle est composée des
éléments suivants :
- Valeurs d’opérateurs mathématiques,
- Adresse des cellules,
- Noms des champs,
- Autres formules.
Une cellule d’Excel peut contenir un texte mais aussi une formule. Lorsque vous utilisez une formule,
Excel évalue l’expression et vous affiche le résultat dans la cellule où elle se trouve. Ainsi la formule n’est pas
visible sur votre feuille de calcul, mais l’est plutôt dans la barre de formule.
NB : une formule commence toujours avec le signe « égal » =
I- FORMULES INTEGREES
1.1 les formules arithmétiques
Elles comportent des constantes, des références cellulaires ou des opérateurs arithmétiques (confère
tableau ci – dessous). Ce type de formule permet de calculer un résultat et de l’afficher dans la cellule dans
laquelle la formule a été saisie.
Exemples := B5* C10 ; = - A2 ; = 1 200 * B16 ; = B5 / $B$4
Tableau des différents opérateurs
Opérateurs Exemples Signification
Opérateurs arithmétiques :
* 6*5 Multiplication
/ B5 / B8 Division
- B5– A10 Soustraction
^ 4^2 Puissance
+ 5+6 Addition
% 20.60 % Pourcentage
- - B8 Signe préfixé
Opérateurs de comparaison :
= A10 = A11 Egal
<> A10<> A11 Différent
<= A10<= A11 Inférieur ou égal
>= A10>= A11 Supérieur ou égal
Opérateurs de plage de cellule :
: A10 : A17 Plage de cellules comprises entre A10 et A17
Espace A15:A17 , A20:A23 Intersection
; A10:A15, A17:A20 Réunion
Opérateurs de concaténation:
& A10 & A17 Concaténation de plusieurs chaînes de caractères
3
1.2 Les formules de chaînes de caractères
Elles permettent de combiner deux ou plusieurs chaînes de caractères en utilisant l’opérateur
&(concaténation).
Exemple :
=˝FORZA˝&A10
1.5.3 Fonction SI
Rôle : Elle vérifie si la condition est respectée et renvoie une valeur si le résultat d’une condition que vous
avez spécifiée est vrai, et une autre valeur si le résultat est faux.
Syntaxe : SI (test_logique;valeur_si_vrai;valeur_si_faux)
4
1.5.7 Fonction ENT
Rôle : Elle arrondi un nombre à l’entier immédiatement inférieur.
Syntaxe :ENT (nombre)
1.5.12 Fonction ET
Rôle : Elle vérifie si tous les arguments sont VRAI et renvoie VRAI si tous les arguments sont VRAI
Syntaxe :ET (valeur_logique1;valeur logique2;…)
5
Exemple :
6
Applications
Exercice 1
La maison ALHADJI COMPUTERS, spécialisée dans la vente des ordinateurs et matériel informatique ouvre
ses portes à limbe en janvier 2014. Elle décide de gratifier ses meilleurs Vendeurs, Représentant, Placiers
(VRP) qui ont réalisé un chiffre d’affaires pour la période allant de janvier 2014 à décembre 2014.
Vous êtes chargé de collecter les données, et calculer les gratifications selon les conditions
suivantes :
- 5% pour tout vendeur, représentant placier (VRP) de plus d’un an d’ancienneté et ayant réalisé un
chiffre d’affaires de 5 000 000 F ;
- 2% pour tout vendeur, représentant placier (VRP) ayant réalisé un chiffre d’affaires de moins de
5 000 000 F ;
- 0,5% pour tout vendeur, représentant placier (VRP) de plus d’un an d’ancienneté quelque soit le
montant de ses ventes
Travail à faire
1) Créer un répertoire dans mes documents au lequel vous donnerez votre nom comme nom de répertoire
2 pts
2) A l’intérieur dudit répertoire, reproduire le tableau de calcul Excel permettant de ressortir les gratifications
accordées 4 pts
3) Introduire en D5 la formule : =jours360(C5;$I$3)/360 permettant de déterminer l’ancienneté de KAMDEM
DEFFO, puis celle des autres 2 pts
Nb : si le résultat se présente sous la forme de date ex : 1/3/2014, changer ce format de date en format
nombre.
4) Introduire en F5 la formule : =SI(ET(D5>1;E5>=5000000);(E5-5000000)*5%+5000000*2,5%+(5000000-
E5)*0,5%;0) permettant de calculer la gratification annuelle de KAMDEM DEFFO,
puis celle des autres 3 pts
5) Introduire en G5 la formule : =RANG(F5;$F$5:$F$11;0) permettant de classer les gratifications par ordre
croissant 2 pts
6) Introduire en H5 la formule :
=SI(E5>=5000000;CONCATENER(A5;"VRP dévoué et loyal");SI(E5<=5000000;CONCATENER(A5;"VRP
tatillon à encourager)"))) permettant d’apprécier le rendement de KAMDEM DEFFO, puis automatiquement
celui des autres 2 pts
7) Introduire le montant total du chiffre d’affaires réalisé, puis des gratifications annuelles accordées 2 pts
7
8) Ecrire votre n° de table dans l’en-tête en haut à droite de votre travail puis imprimer 2 pts
9) Sauvegarder votre travail, fermer le classeur et votre répertoire, puis quitter 2 pts
Travail fait :
Exercice 2
Monsieur BOTOMO vient de créer une épicerie dans son quartier à EKANTE – MENG et emploi actuellement
cinq vendeurs. Il met à votre disposition son ordinateur pour calculer leur rémunération du mois de juin de
l’année en cours et dont les éléments sont contenus dans le tableau ci – dessous (voir annexe).
Travail à faire
1) Créer un répertoire dans mes documents et lui attribuer votre n° de table 1 pt
2) A l’intérieur du répertoire créé, insérer un document Excel en annexe (reproduire le tableau que vous
voyez en respectant les différentes mises en forme utilisées) 2 pts
3) Introduire dans la cellule correspondante, la formule permettant de déterminer le salaire brut d’ALIMA,
puis par recopie celui des autres 2 pts
4) Introduire dans la cellule correspondante, la formule permettant de déterminer le salaire net d’ALIMA,
puis par recopie celui des autres 2 pts
5) Introduire dans la cellule correspondante, la formule permettant de déterminer le salaire de base de
l’ensemble des vendeurs, puis par recopie les autres totaux 2 pts
6) Introduire dans H3 la formule suivante : =RANG(G3;$G$3:$G$10;0) permettant de connaitre le rang
d’ALIMA suivant le salaire net à lui versé, puis par recopie celui des autres vendeurs 2 pts
7) Faire le graphique en histogramme représentant les salaires nets du mois 3 pts
8) Ecrire votre numéro de table en dessous de votre travail, sauvegarder le fichier et quitter Excel1 pt
8
Travail fait :
9
I- DEFINITION ET INTERÊT D’UN ALGORITHME
Un algorithme est une suite d’instructions qui, une fois exécutée correctement, conduit à un résultat
donné.
L’intérêt d’un algorithme est de pouvoir être programmé par un ordinateur
Historiquement, plusieurs types de notations ont représenté des algorithmes. Il y a eu notamment une
représentation graphique, avec des carrés, des losanges, etc. qu’on appelait des organigrammes. Aujourd’hui,
cette représentation est quasiment abandonnée, pour deux raisons.
D’abord, parce que dès que l’algorithme commence à grossir un peu, ce n’est plus pratique du tout du tout.
Ensuite parce que cette représentation favorise le glissement vers un certain type de programmation, dite
non structurée (nous définirons ce terme plus tard), que l’on tente en général d’éviter.
C’est pourquoi on utilise généralement une série de conventions appelée " pseudo-code ", qui ressemble
à un langage authentique, la plupart des problèmes de syntaxe étant mis de côté.
3.1 Définition
Les variables sont des objets dont on se sert pour stocker des informations dans un programme.
On peut imaginer qu’une variable est une boîte identifiée par une étiquette. Ainsi, pour avoir accès au
contenu de la boîte, il suffit de la désigner par son étiquette.
10
3.3 Type des variables
Il existe plusieurs types de variables :
a) Types numériques classiques
Si l’on réserve un octet pour coder un nombre, on ne pourra coder que 28 = 256 valeurs différentes.
Cela peut signifier par exemple les nombres entiers de 1 à 256, ou de 0 à 255, ou de –127 à +128, c’est une
pure question de convention. Mais ce qui n’est pas une convention, c’est qu’on est limité à 256 valeurs
possibles. Si l’on réserve deux octets, on a droit à 65 536 valeurs ; avec trois octets, 16 777 216, etc. Et là se
pose un autre problème : ce codage doit-il représenter des nombres décimaux ? Des nombres négatifs ?
Bref, le type de codage (autrement dit, le type de variable) choisi pour un nombre va déterminer :
les valeurs maximales et minimales des nombres pouvant être stockés dans la variable
la précision de ces nombres (dans le cas de nombres décimaux).
Tous les langages, quels qu’ils soient offrent un " bouquet " de types numériques, dont le détail est susceptible
de varier légèrement d’un langage à l’autre. Grosso modo, on retrouve cependant les types suivants :
On dispose donc également du type alphanumérique (également appelé type caractère) : dans une
variable de ce type, on stocke des caractères, qu’il s’agisse de lettres, de signes de ponctuation, d’espaces,
ou de chiffres. Le nombre maximal de caractères pouvant être stockés dans une seule variable dépend du
11
langage utilisé. Une série de caractères (stockée ou non dans une variable alphanumérique, d’ailleurs),
s’appelle une chaîne de caractères. Et une telle chaîne de caractères est toujours notée entre guillemets.
Pourquoi diable ? Parce que 423 peut représenter le nombre 423, ou la suite de caractères 4, 2, et 3, selon le
type de codage (le type de la variable) qui a été utilisé pour le stocker. Les guillemets permettent d’éviter toute
ambiguïté à ce sujet. On y reviendra.
Un autre type est le type booléen : on y stocke uniquement les valeurs logiques VRAI et FAUX.
Attribue la valeur 24 à la variable Toto. Ce qui, soit dit en passant, sous-entend impérativement que
Toto est une variable de type numérique.
On peut attribuer à une variable la valeur d’une autre variable, telle quelle ou modifiée. Par
exemple :
TutuToto
Signifie que la valeur de Tutu est maintenant celle de Toto.
Notez que cette instruction n’a modifié en rien la valeur de Toto : une instruction
d’affectation ne modifie que ce qui est situé à gauche de la flèche.
Tutu Toto + 4
Si Toto contenait 12, Tutu vaut maintenant 16. De même que précédemment, Toto vaut toujours 12.
Tutu Tutu + 1
Si Tutu valait 6, il vaut maintenant 7. La valeur de Tutu est modifiée, puisque Tutu est la variable
située à gauche de la flèche.
Début Début
A 34 A 12
A 12 A 34
Fin Fin
Il est clair que dans le premier cas la valeur finale de A est 12, dans l’autre elle est 34.
Il est tout aussi clair que ceci ne doit pas nous étonner. Lorsqu’on indique le chemin à quelqu’un,
dire " prenez tout droit sur 1km, puis à droite " n’envoie pas les gens au même endroit que si l’on
dit " prenez à droite puis tout droit pendant 1 km ".
Enfin, il est également clair que si l’on met de côté leur vertu pédagogique, les deux algorithmes ci-
dessus sont parfaitement idiots ; à tout le moins ils contiennent une incohérence. Il n’y a aucun
12
intérêt à affecter une variable pour l’affecter différemment juste après. En l’occurrence, on aurait
tout aussi bien atteint le même résultat en écrivant simplement :
Début Début
A 12 A 34
Fin Fin
Revenons maintenant sur ce terme d’opérateurs. Un opérateur est un signe qui peut relier deux
valeurs, pour produire un résultat. Les opérateurs possibles dépendent du type des valeurs qui sont
en jeu. Allons-y, faisons le tour, c’est un peu fastidieux, mais comme dit le sage, quand c’est fait,
c’est plus à faire.
a) Opérateurs numériques :
Ce sont les quatre opérations arithmétiques tout ce qu’il y a de classique.
+ addition
- soustraction
* multiplication
/ division
Mentionnons également le ^ qui signifie " puissance ". 45 au carré s’écrira donc 45 ^ 2.
Enfin, on a le droit d’utiliser les parenthèses, avec les mêmes règles qu’en mathématiques.
La multiplication et la division ont " naturellement " priorité sur l’addition. Les parenthèses ne sont
ainsi utiles que pour modifier cette priorité naturelle.
Cela signifie qu’en informatique, 12 * 3 + 5 et (12 * 3) + 5 valent strictement la même
chose, à savoir 41. Pourquoi dès lors se fatiguer à mettre des parenthèses inutiles ?
13
Exemple
Variables A, B, C en Caractère
Début
A "Gloubi"
B "Boulga"
C A & B
Fin
c) Opérateurs logiques :
Deux remarques
On attire votre attention sur la trompeuse similitude de vocabulaire entre les mathématiques et
l’informatique. En mathématiques, une " variable " est généralement une inconnue. Lorsque j’écris que y = 3 x
+ 2, les " variables " x et y satisfaisant à l’équation existent en nombre infini (graphiquement, l’ensemble des
solutions à cette équation dessine une droite). Lorsque j’écris ax² + bx + c = 0, la " variable " x désigne les
solutions à cette équation, c’est-à-dire 0, une ou deux valeurs à la fois… En informatique, une variable a
toujours une valeur et une seule. A la rigueur, dans certains langages, mais pas tous, elle peut ne pas avoir de
valeur du tout (tant qu’on ne l’a pas affectée). Dans les autres langages, les variables non encore affectées
sont considérées comme valant zéro. Et cette valeur justement, ne " varie " pas à proprement parler (du moins
ne varie-t-elle que lorsqu’elle est l’objet d’une instruction d’affectation).
La deuxième remarque concerne le signe de l’affectation. En algorithmique, comme on l’a vu, c’est le
. Mais en pratique, la quasi totalité des langages emploient le signe égal. Et là, pour les débutants, la
confusion est facile avec les maths. En maths, A = B et B = A sont deux propositions strictement équivalentes.
En informatique, absolument pas, puisque cela revient à écrire A B et B A, deux choses bien différentes.
Donc, attention ! ! !
Remarque
Un algorithme, cela programme la machine, pas l’utilisateur. Donc quand on dit à la machine de lire
une valeur, cela implique que l’utilisateur va devoir l’écrire. Et quand on demande à la machine d’écrire cette
valeur, c’est pour que l’utilisateur puisse la lire.
14
VI- LES INSTRUCTIONS DE LECTURE ET D’ECRITURE
Tout bêtement, pour que l’utilisateur entre la (nouvelle) valeur de Titi, on mettra :
Lire Titi
Dès que le programme tombe sur cette instruction, l’exécution s’arrête ; l’ordinateur attend
sagement que l’utilisateur ait frappé quelque chose au clavier, et dès que la touche Enter a été
frappée, l’exécution reprend.
Ecrire Toto
On peut également choisir d’écrire des libellés à l’écran, afin de prévenir l’utilisateur de ce
qu’il doit frapper (c’est même assez fortement recommandé) :
Lire NomFamille
Notez qu’il y a une différence majeure entre afficher un libellé et le contenu d’une variable :
Exemple
Début Début
Fin Fin
Le premier algorithme affiche le contenu de la variable Bonjour, autrement dit " Ave
Cesar ". Le second affiche le libellé " Bonjour ", qui n’a rien à voir avec la variable du même nom.
15
Il s’agit de parler à notre ordinateur, et de lui donner des séries d’instructions à effectuer selon que la
situation se présente d’une façon ou d’une autre
I- STRUCTURE D’UN TEST
Il n’y a que deux formes possibles pour un test ; la forme de gauche est la forme complète, celle de
droite la forme simple.
16
Exemple
Pour indiquer le chemin à un touriste égaré, vous lui donnez les instructions ci-après :
" Allez tout droit jusqu’au prochain carrefour et là regardez à droite. Si la rue est autorisée à la circulation,
alors prenez la et ensuite c’est la deuxième à gauche. Mais si en revanche elle est en sens interdit, alors
continuez jusqu’à la prochaine à droite, prenez celle-là, et ensuite la première à droite ".
Exprimé sous forme de pseudo-code, cette programmation donnerait donc quelque chose du genre :
une valeur
un opérateur de comparaison
une autre valeur
Les valeurs peuvent être a priori de n’importe quel type (numériques, caractères…)
Les opérateurs de comparaison sont : = <><> =<>=
L’ensemble constitue donc si l’on veut une affirmation, qui a un moment donné est VRAIE ou FAUSSE.
A noter que ces opérateurs de comparaison s’emploient tout à fait avec des caractères. Ceux-ci sont codés
par la machine dans l’ordre alphabétique, les majuscules étant systématiquement placées avant les
minuscules. Ainsi on a :
Attention à certains raccourcis du langage courant qui peuvent mener à des non-sens informatiques. Prenons
par exemple la condition " Toto est compris entre 5 et 8 ". On peut être tenté de la traduire par : 5 < Toto < 8.
Or, une telle expression, qui a du sens en mathématiques, ne veut rien dire en programmation. On va voir tout
de suite après comment traduire une telle condition.
17
III- CONDITIONS COMPOSEES
Certains problèmes exigent parfois de formuler des conditions qui ne peuvent pas être exprimées
sous la forme simple exposée ci-dessus. Reprenons le cas " Toto est inclus entre 5 et 8 ". En fait cette phrase
cache non une, mais deux conditions. Car elle revient à dire que " Toto est supérieur à 5 et Toto est inférieur
à 8 ". Il y a donc bien là deux conditions, reliées par ce qu’on appelle un opérateur logique, le mot ET.
Comme on l’a évoqué plus haut, l’informatique met à notre disposition trois opérateurs logiques : ET,
OU, et NON.
Le ET a le même sens en informatique que dans le langage courant. Pour que :
Condition1 ET Condition2 soit VRAI, il faut impérativement que Condition1 soit VRAIE et que
Condition2 soit VRAIE.
18
Exemple
Vous constaterez que c’est un peu laborieux. Les conditions se ressemblent plus ou moins,
et surtout on oblige la machine à examiner trois tests successifs alors que tous portent sur une même
chose, la température (la valeur de la variable Temp). Il serait ainsi bien plus rationnel d’imbriquer
les tests de cette manière :
Exemple
Nous avons fait des économies au niveau de la frappe du programme : au lieu de devoir
taper trois conditions, dont une composée, nous n’avons plus que deux conditions simples. Mais
aussi, et surtout, nous avons fait des économies sur le temps d’exécution de l’ordinateur. Si la
température est inférieure à zéro, celui-ci écrit dorénavant " C’est de la glace " et passe directement
à la fin, sans être ralenti par l’examen d’autres possibilités (qui sont forcément fausses).
Cette deuxième version n’est donc pas seulement plus simple à écrire et plus lisible, elle est
également plus performante à l’exécution.
19
V- VARIABLES BOOLEENNES
Jusqu’ici, nous avons utilisé uniquement des conditions pour faire des choix. Mais vous vous rappelez
qu’il existe un type de variables (les booléennes) susceptibles de stocker les valeurs VRAI ou FAUX. En fait,
on peut donc entrer des conditions dans ces variables, et tester ensuite la valeur de ces variables.
Reprenons l’exemple de l’eau. On peut le réécrire ainsi :
Exemple
A priori, cette technique ne présente guère d’intérêt : on a alourdi plutôt qu’allégé l’algorithme de départ,
en lui faisant recourir à deux variables supplémentaires. Mais :
une variable booléenne n’a besoin que d’un seul bit pour être stockée. L’alourdissement de ce point
de vue n’est donc pas considérable.
dans certains cas, notamment celui de conditions composées très lourdes (avec plein de ET et de OU
tout partout) cette technique peut faciliter le travail du programmeur. Les variables booléennes
peuvent également s’avérer très utiles pour servir de flag, technique dont on reparlera plus loin
(rassurez-vous, rien à voir avec le flagrant délit des policiers).
VI- QUELQUES JEUX LOGIQUES
Une remarque pour commencer : dans le cas de conditions composées, les parenthèses jouent un
rôle important.
Exemple
Variables A, B, C, D, E en Booléen
Variable X en Entier
Début
Lire X
AX<2
B X > 12
C X < 6
D (A ET B) OU C
E A ET (B OU C)
Ecrire D, E
Fin
20
Si X = 3, alors on remarque que D sera VRAI alors que E sera FAUX.
S’il n’y a que des ET, ou que des OU, en revanche, les parenthèses ne changent strictement rien.
On en arrive à une autre propriété des ET et des OU, bien plus intéressante. Spontanément, on pense
souvent que ET et OU s’excluent mutuellement, et qu’un problème donné s’exprime soit avec un ET, soit avec
un OU. Pourtant, ce n’est pas si évident.
Quand faut-il ouvrir la fenêtre de la salle ? Uniquement si les conditions l’imposent, à savoir :
Cette petite règle pourrait tout autant être formulée comme suit :
Ces deux formulations sont strictement équivalentes. Ce qui nous amène à la conclusion suivante :
toute structure de test requérant une condition composée faisant intervenir l’opérateur ET peut être
exprimée de manière équivalente avec un opérateur OU, et réciproquement.
Ceci est moins surprenant qu’il n’y paraît au premier abord. Jetez pour vous en convaincre un œil sur
les tables de vérité, et vous noterez la symétrie entre celle du ET et celle du OU.
Bien sûr, on ne peut pas se contenter de remplacer purement et simplement les ET par des OU ; ce
serait un peu facile. La règle d’équivalence est la suivante (on peut la vérifier sur l’exemple de la fenêtre) :
21
I- DEFINITION ET UTILITE DES BOUCLES
Les boucles sont des structures répétitives, on parle aussi de structures itératives.
Une boucle permet de contrôler la saisie (vérifier que les données entrées sur le clavier correspondent
bien à celles attendues par l’algorithme.
Prenons le cas d’une saisie au clavier (une lecture), par exemple, on pose une question à laquelle
l’utilisateur doit répondre par O (Oui) ou N (Non). Mais l’utilisateur, facétieux ou maladroit, risque fort tôt ou
tard de taper autre chose que cela. Dès lors, le programme peut soit planter par une erreur d’exécution (parce
que le type de réponse ne correspond pas au type de la variable attendu) soit se dérouler normalement
jusqu’au bout, mais en produisant des résultats fantaisistes. Alors, dans tout programme un tant soit peu
sérieux, on met en place ce qu’on appelle un contrôle de saisie
TantQue booléen
...
Instructions
...
FinTantQue Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeur
du booléen (qui, je le rappelle, peut être une variable booléenne ou, plus fréquemment, une condition). Si
cette valeur est VRAI, le programme exécute les instructions qui suivent, jusqu’à ce qu’il rencontre la ligne
FinTantQue. Il retourne ensuite sur la ligne du TantQue, procède au même examen, et ainsi de suite. Le
manège enchanté ne s’arrête que lorsque le booléen prend la valeur FAUX. Illustration avec notre problème
de contrôle de saisie :
22
Variable Rep en Caractère
Ecrire "Voulez vous un café ? (O/N)"
TantQue Rep <> "O" ET Rep <> "N"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire "Saisie erronnée. Recommencez"
FinSi
FinTantQue On remarquera que la présence du bloc " Si " est uniquement là pour l’affichage éventuel du libellé de
saisie erronée. En lui-même, le bloc " tant que " est d’une simplicité biblique. Le gag de la journée : c’est d’écrire une
structure TantQue dans laquelle le booléen ne devient jamais faux ! L’ordinateur tourne alors dans la boucle
comme un dératé et n’en sort plus. Seule solution, quitter le programme avec un démonte-pneu ou un
bâton de dynamite. Cette faute de programmation grossière – mais fréquente - ne manquera pas d’égayer
l’ambiance collective de cette formation… et accessoirement d’étancher la soif proverbiale de vos
enseignants. L’ordinateur tourne alors dans la boucle comme un dératé et n’en sort plus. Seule solution,
quitter le programme avec un démonte-pneu ou un bâton de dynamite. Cette faute de programmation
grossière – mais fréquente - ne manquera pas d’égayer l’ambiance collective de cette formation… et
accessoirement d’étancher la soif proverbiale de vos enseignants.
Dans le dernier algorithme, vous avez remarqué qu’une boucle était fréquemment utilisée pour
augmenter la valeur d’une variable. Il arrive également très souvent qu’on ait besoin d’effectuer un nombre
déterminé de passages. Or, a priori, notre structure TantQue ne sait pas à l’avance combien de tours de
boucle elle va effectuer (cela dépend d’une condition). C’est pourquoi une autre structure de boucle est à
notre disposition :
23
Variables Truc, Trac en Entier
Pour Truc 1 à 15
Ecrire "Il est passé par ici"
Pour Trac 1 à 6
Ecrire "Il repassera par là"
Trac Suivant
Truc Suivant Dans cet exemple, le programme écrira une fois "il est passé par ici" puis six fois de suite "il
repassera par là", et ceci quinze fois en tout. A la fin, il y aura donc eu 15 x 6 = 90 passages dans la
deuxième boucle (celle du milieu). Notez la différence marquante avec cette structure :
Pour Truc...
instructions
Pour Trac ...
instructions
Truc Suivant
instructions
Trac Suivant
24
I- UTILITE DES TABLEAUX
Un tableau, ou encore une variable indicée est un ensemble de valeurs portant le même nom de
variable et repérées par un nombre. Le nombre qui sert à repérer chaque valeur est un indice.
La programmation nous permet de rassembler toutes ces variables en une seule, au sein de laquelle
chaque valeur sera désignée par un numéro. En bon français, cela donnerait donc quelque chose du genre
" la note numéro 1 ", " la note numéro 2 ", " la note numéro 8 ".
Imaginons que dans un programme, nous ayons besoin simultanément de 12 valeurs (par exemple,
des notes pour calculer une moyenne). Evidemment, la seule solution dont nous disposons à l’heure actuelle
consiste à déclarer quinze variables, appelées par exemple Note a, Note b, Note c, etc. Bien sûr, on peut
opter pour une notation un peu simplifiée, par exemple N1, N2, N3, etc. Mais cela ne change pas
fondamentalement notre problème, car arrivé au calcul, cela donnera obligatoirement une atrocité du genre :
Moy = (N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9 + N10 + N11 + N12) / 12
Ouf ! C’est tout de même bigrement laborieux. Et pour un peu que nous soyons dans un programme de
gestion avec quelques centaines ou quelques milliers de valeurs à traiter, alors là c’est direct le suicide.
Cerise sur le gâteau, pour peu que l’on ne puisse savoir d’avance combien il y aura de valeurs à traiter, là on
est carrément cuits.
Un tableau doit être déclaré comme tel, en précisant le nombre et le type de valeurs qu’il contiendra.
L’énorme avantage des tableaux, c’est qu’on va pouvoir les traiter en faisant des boucles. Par exemple, pour
effectuer notre calcul de moyenne, cela donnera :
25
NB : Cet exemple ne peut être qu’un extrait, dans la mesure où on n’a pas programmé comment
s’effectue le remplissage des valeurs du tableau.
L’indice qui sert à repérer les éléments du tableau peut être exprimé directement comme un nombre en clair,
mais il peut être aussi une variable, ou une expression calculée.
être égale au moins à 0 ou à 1 (dans certains langages, le premier élément d’un tableau porte
l’indice zéro, dans d’autres l’indice 1)
être un nombre entier. Quel que soit le langage, l’élément Truc(3,1416) n’existe jamais
être inférieure ou égale au nombre d’éléments du tableau. Si le tableau Bidule a été déclaré
comme ayant 25 éléments, la présence dans une ligne, sous une forme ou sous une autre, de
Bidule(26) déclenchera automatiquement une erreur.
Le gag de la journée : consiste à confondre, dans sa tête et / ou dans un algorithme, l’indice d’un élément
d’un tableau avec son contenu. La troisième maison de la rue n’a pas forcément trois habitants, et la
vingtième vingt habitants. En notation algorithmique, il n’y a aucun rapport entre i et truc(i).
Il arrive fréquemment que l’on ne connaisse pas à l’avance le nombre d’éléments que devra
comporter le tableau. Bien sûr, une solution consisterait à déclarer un tableau gigantesque (10 000 éléments,
pourquoi pas, au diable les varices) pour être sûr que " ça rentre ". Mais d’une part, on n’en sera jamais
parfaitement sûr, d’autre part, en raison de l’immensité de la place mémoire réservée – et la plupart du temps
non utilisée, c’est un gâchis préjudiciable à la rapidité de notre algorithme.
Aussi, pour parer à ce genre de situation, a-t-on la possibilité de déclarer le tableau sans préciser son
nombre d’éléments, puis au cours du programme, à préciser ce nombre via l’instruction Redim. Notez que
tant qu’on n’a pas précisé le nombre d’éléments d’un tableau, d’une manière ou d’une autre, ce
tableau est inutilisable.
Exemple : on veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas combien il y aura de
notes à saisir. Le début de l’algorithme sera quelque chose du genre :
Il existe plusieurs stratégies possibles pour trier les éléments d’un tableau ; nous en verrons une : le
tri par sélection.
Admettons que le but de la manœuvre soit de trier un tableau de 12 éléments dans l’ordre croissant.
26
45 122 12 3 21 78 64 53 89 28 84 46
3 122 12 45 21 78 64 53 89 28 84 46
On recommence à rechercher le plus petit élément, mais cette fois à partir du deuxième élément. On
le trouve en 3e position, on échange donc le deuxième avec le troisième :
3 12 122 45 21 78 64 53 89 28 84 46
3 12 21 45 122 78 64 53 89 28 84 46
Pour i 1 à 11
mini = t(i)
posmini = i
Pour j i + 1 à 12
Si t(j) < mini alors
mini t(j)
posmini j
Finsi
27
I- LE BUT DE PLUSIEURS DIMENSIONS
Une seule dimension peut suffire réaliser l’objectif poursuivi. Mais avec deux (et davantage
encore) le résultat est encore plus satisfaisant.
Prenons le cas de la modélisation d’un jeu de dames, et du déplacement des pions sur le
damier. Je rappelle qu’un pion qui est sur une case blanche peut se déplacer (pour simplifier) sur les
quatre cases blanches adjacentes.
Avec les outils dont on dispose actuellement, le plus simple serait évidemment de modéliser le
damier sous la forme d’un tableau. Chaque case est un emplacement du tableau, qui contient par
exemple 0 si elle est vide, et 1 s’il y a un pion. On attribue comme indices aux cases les numéros 1 à
8 pour la première ligne, 9 à 16 pour la deuxième ligne, et ainsi de suite jusqu’à 64.
Un pion placé dans la case numéro i, autrement dit la valeur 1 de Cases(i), peut bouger vers
les cases contiguës en diagonale. Cela va nous obliger à de petites acrobaties intellectuelles : la case
située juste au-dessus de la case numéro i ayant comme indice i-8, les cases valables sont celles
d’indice i-7 et i-9. De même, la case située juste en dessous ayant comme indice i+8, les cases
valables sont celles d’indice i+7 et i+9.
Bien sûr, on peut fabriquer tout un programme comme cela, mais le moins qu’on puisse dire est que
cela ne facilite pas la clarté de l’algorithme.
Il serait évidemment plus simple de modéliser un damier par… un damier !
L’informatique nous offre la possibilité de déclarer des tableaux dans lesquels les valeurs ne
sont pas repérées par une seule, mais par deux coordonnées.
Cela veut dire : réserve-moi un espace de mémoire pour 8 x 8 entiers, et quand j’aurai besoin de
l’une de ces valeurs, je les repèrerai par deux indices (comme à la bataille navale, ou Excel, la seule
différence étant que pour les coordonnées, on n’utilise pas de lettres, juste des chiffres).
Pour notre problème de dames, les choses vont sérieusement s’éclaircir. La case qui contient le pion
est dorénavant Cases(i , j). Et les quatre cases disponibles sont Cases(i-1, j-1), Cases(i-1, j+1),
Cases(i+1, j-1) et Cases(i+1, j+1).
Une remarque : il n’y a aucune différence qualitative entre un tableau à deux dimensions (i, j) et un
tableau à une dimension ( i * j ). De même que le jeu de dames qu’on vient d’évoquer, tout
problème pouvant être modélisé d’une manière peut aussi être modélisé de l’autre. Simplement,
l’une ou l’autre de ces techniques correspond plus spontanément à tel ou tel problème, et facilite
donc (ou complique, si on a choisi la mauvaise option) l’écriture et la lisibilité de l’algorithme.
Une autre remarque : une question classique à propos des tableaux à deux dimensions est de savoir
si le premier indice représente les lignes ou le deuxième les colonnes, ou l’inverse. Je ne répondrai
pas à cette question non parce que j’ai décidé de bouder, mais parce qu’elle n’a aucun sens.
28
" Lignes " et " Colonnes " sont des concepts graphiques, qui s’appliquent à des objets du monde
réel ; les indices des tableaux ne sont que des coordonnées logiques, pointant sur des adresses de
mémoire vive. Si cela ne vous convainc pas, pensez à un jeu de bataille navale classique : les lettres
doivent-elles désigner les lignes et les chiffres les colonnes ? Aucune importance ! Chaque joueur
peut même choisir une convention différente, aucune importance ! L’essentiel est qu’une fois une
convention choisie, un joueur conserve la même tout au long de la partie, bien entendu.
Si vous avez compris le principe des tableaux à deux dimensions, sur le fond, il n’y a aucun
problème à passer au maniement de tableaux à trois, quatre, ou pourquoi pas neuf dimensions. C’est
exactement la même chose. Si je déclare un tableau Titi(3, 5, 4, 4), il s’agit d’un espace mémoire
contenant 3 x 5 x 4 x 4 = 240 valeurs. Chaque valeur est repérée par quatre coordonnées.
Le principal obstacle au maniement systématique de ces tableaux à plus de trois dimensions est que
le programmeur, quand il conçoit son algorithme, aime bien faire des petits gribouillis, des dessins
immondes, imaginer les boucles dans sa tête, etc. Or, autant il est facile d’imaginer concrètement un
tableau à une dimension, autant cela reste faisable pour deux dimensions, autant cela devient
l’apanage d’une minorité privilégiée pour les tableaux à trois dimensions (je n’en fais
malheureusement pas partie) et hors de portée de tout mortel au-delà. C’est comme ça, l’esprit
humain a du mal à se représenter les choses dans l’espace, et crie grâce dès qu’on est dans
l’hyperespace (oui, c’est comme ça que ça s’appelle au-delà de trois dimensions).
Donc, pour des raisons uniquement pratiques, les tableaux à plus de trois dimensions sont rarement
utilisés par des programmeurs non matheux (car les matheux, de par leur formation, ont une
fâcheuse propension à manier des espaces à n dimensions comme qui rigole, mais ce sont bien les
seuls, et laissons-les dans leur coin, c’est pas des gens comme nous).
29
I - VOCABULAIRE RELATIF AUX BASES DE DONNEES
1.1 Définition d’une base de données
Une base de données (BD) est un ensemble de données mémorisées sur des supports accessibles
par un ordinateur pour satisfaire simultanément plusieurs utilisateurs de façon sélective et en temps très court.
Elles constituent le cœur du système d’information.
Il existe 4 types de bases de données :
a) BD Hiérarchiques : les plus anciennes fondées sur une modélisation arborescente des données.
b) BD Relationnelles : organisation des données sous forme de tables et exploitation à l’aide d’un
langage déclaratif (ex: Oracle, MySQL, Access).
c) BD Déductives : organisation de données sous forme de table et exploitation à l’aide d’un langage
logique.
d) BD Objets : organisation des données sous forme d’instances de classes hiérarchisées qui possèdent
leurs propres méthodes d’exploitation.
30
Exemple : un fichier peut être enregistré dans un format habituel d’une application donnée, ou bien
dans un format plus générique comme ASCII, texte qui conserve tous les caractères, mais peu de
spécifications de mise en pages. Les champs d’une base de données sont disposés dans un certain ordre lors
de la saisie des données ou de l’élaboration d’un rapport.
Le format des données est caractérisé par le type et la longueur (taille des données)
1.4.1 Le type de données :
Le type de données d'un champ peut s'envisager comme un ensemble de qualités communes à
toutes les valeurs contenues dans le champ et qui déterminent le type de données auquel peuvent
correspondre ces valeurs. Par exemple, les valeurs stockées dans un champ de type Texte ne peuvent
correspondre qu'à des lettres, à des nombres et à un ensemble limité de caractères de ponctuation. En
outre, un champ de type Texte ne peut contenir que 255 caractères, au maximum.
Le type de données d'un champ détermine la nature des données qu'il peut stocker. Par exemple, un
champ dont le type de données est Texte peut stocker des données constituées de texte, de caractères
numériques, alors qu'un champ dont le type de données est Numérique ne peut stocker que des données
numériques.
31
II- COMPOSITION D’UNE BASE DE DONNEES
Une base de données est composée : des tables et leurs enregistrements qui sont les lignes des
tables
Les requêtes, les formulaires, les états et les macros permettent de gérer les données de la base des
données.
2.1 Les tables
Les tables sont les premiers objets de la base de données qu’il faudra créer. Une table permet le
stockage des données de manière ordonnée.
Une table est composée de deux éléments : les champs (références aux colonnes) et les
enregistrements (les lignes – les données elles-mêmes). On peut affecter jusqu’à 255 champs et 2Go
d’enregistrements à une table.
Une base de données doit contenir une ou plusieurs tables. Lorsque plusieurs tables dans une base
de données sont reliées entre elles par des champs communs, il faudra définir pour ces tables des
identificateurs uniques (les clés – primaires ou/et secondaires)
chanson: Table
N° chanson Nom chanson Année de création Interprête
1 Embouteillage 1997 Petit pays
2 Les femmes pleurent 1997 Nguéa la route
3 Edith 1994 Kotto Bass
4 Sai mbog 1972 Jean BIKOKO
Un 5 Esprit de Dieu 2008 Foi et vie
enregistrement 6 My true love 2011 Kelly handsome
7 Paradis blanc 1989 Berger
8 Casser la voix 1990 Bruel
9 Au fur et à mesure 1985 Foly
10 Foule sentiment 1993 Souchon
(NuméroAuto)
Enr:
32
2.3 Les formulaires
Les formulaires sont des objets servant à la saisie, l’affichage et la modification des données dans les
champs. Autrement dit, il s’agit des interfaces graphiques entre la base de données et l’utilisateur. Un
formulaire peut lancer l’exécution d’autres formulaires ou contenir d’autres formulaires. Cela permettra l’ajout
de données dans plusieurs tables de la base.
Exemple :
« Saisie de chansons » basé sur la table chanson
NB :
les tables conduisent au stockage des informations,
les formulaires et les états à leur consultation,
les requêtes à traitement.
33
I- CONCEPTION DES BASES DE DONNEES RELATIONNELLES
Les méthodes de conception préconisent une démarche en étapes et font appel à des
modèles pour représenter les objets qui composent les systèmes d’information, les relations
existantes entre ces objets ainsi que les règles sous-jacentes.
- Les entités
- Les attributs
- Type de relation : cardinalités
- L’identifiant
34
1.3 Les différentes phases de réalisation d’un schéma conceptuel
La construction d’un schéma conceptuel peut se réaliser de la manière suivante :
1.3.1 Déterminer la liste des entités.
Pour chaque entité :
a) établir la liste de ses attributs ;
b) parmi ceux-ci, déterminer un identifiant.
2.1.2 Un type-entité : C’est un ensemble d’entités qui possèdent les mêmes caractéristiques.
Exemple : Classe, Enseignant, Automobile …
Enseignant
35
Exemple : l’entité Véhicule peut avoir pour attribut ou propriété suivants : Numéro Véhicule, Marque, Modèle,
Année
CLIENT VEHICULE CONTRAT ACCIDENT
Num Client Num Véhicule Num Contrat Num Accident
Nom Marque Type Nom
Adresse Modèle Date Adresse
Année
Les attributs ou propriétés des entités sont des champs (colonnes).Après avoir créé un champ et défini
son type de données, vous pouvez définir d'autres propriétés de champ. Par exemple, vous pouvez contrôler
la taille d'un champ Texte en définissant la propriété Taille du champ.
Dans le cas des champs de type Numérique et Monétaire, la propriété Taille du champ s'avère
particulièrement importante, car elle détermine la plage de valeurs du champ. Ainsi, un champ Numérique d'un
bit ne peut stocker que des entiers compris entre 0 et 255.
La propriété Taille du champ détermine également la quantité d'espace disque nécessaire pour chaque
valeur de champ Numérique. Selon la taille du champ, la valeur numérique peut occuper exactement 1, 2, 4,
8, 12 ou 16 octets.
Remarque La taille de la valeur des champs Texte et Mémo est variable. Pour ces types de données, la
propriété Taille du champ définit l'espace maximal disponible pour une valeur individuelle.
Exemple :
L’association est le lien entre les entités ; Les associations sont définies en utilisant un verbe d’action, par
exemple « acheter », « payer ». Entre une table « patients » et « médecins », on aura l’association « soigner »
La description complète d’une association nécessite la définition précise de la cardinalité (Cardinalité =
nombre de participation d’une entité à une relation).
Les relations sont caractérisées comme des entités par un nom et éventuellement des attributs.
Chaque association est caractérisée par un nombre minimum et maximum de participations.
36
si un client ne peut louer qu'une voiture à la fois.
a1 b1
b5
a2 b2
b6
a3 b3
b6
a4 b4
CLIENTS VOITURES
loue
a1 b1
b5
b2
b6
a3 b3
b6
a4 b4
CLIENTS COMPTES
possède
Exemple: l'association "achète" liant deux entités "clients" et "produits" d'un supermarché.
a1 b1
b5
a2 b2
b6
a3 b3
b6
a4 b4
CLIENTS PRODUITS
achète
Remarque
Les cardinalités présentées ci-dessus sont appelées cardinalités maximales dans la mesure où elles
représentent le nombre maximum de participations d’une entité à une relation. En revanche, la cardinalité
minimale est le nombre minimal de participations d’une entité à une relation. La cardinalité minimale peut
être 0 ou 1.
37
Les cardinalités maximales et minimales traduisent les contraintes propres aux entités et relations.
Dans un schéma conceptuel, elles sont représentées comme suit :
(0 ,1) : aucune ou une seule
(1, 1) :une et une seule
0, n) : aucune ou plusieurs
(1, n) : une ou plusieurs
a) Clé primaire
Dans les modèles de données relationnels,
relationnels la clé primaire est un attribut dont le contenu est différent pour
chaque enregistrement de la table, ce qui permet de retrouver un et un seul enregistrement.
b) Clé étrangère
Dans les modèles de données relationnels,
relationnels une clé étrangère est un attribut qui contient une référence à une
donnée connexe - dans les faits la valeur de la clé primaire de la donnée connexe.
38
Les tables sont les entités de votre MCD, ainsi que les associations "n - n".
Les attributs de vos tables et de vos associations leur restent associés.
Pour toute association "1 - n" entre les entités E1 et E2, ajouter un attribut à la table de E1, qui fait
référence à l'identifiant de la table de E2.
Et pour toute association "n - n" entre les entités E1 et E2, ajouter deux attributs à la table de
l'association, faisant référence aux identifiants des tables des entités E1 et E2.
3.1 Domaine : ensemble de valeurs défini en extension ou en intension. Un domaine peut être simple ou
composé.
3.1.1 Domaine simple : si tous les éléments sont atomiques ou décomposables.
Ex : l’ensemble des grades du salarié peut être définit en extension par employé, agent de maîtrise, ou cadre.
3.1.2 Domaine composé : si les éléments peuvent être décomposés.
Ex : les dates sont décomposées d’un jour, un mois et une année.
3.2 Attribut : chaque colonne est appelée attribut et contient un ensemble des valeurs d’un domaine.
Chaque ligne représente un tuple.
3.3 Relation ou table : une relation est un tableau à deux dimensions. Le degré de la relation est le nombre
de colonnes ou des domaines considérés.
3.4 Les contraintes d’intégrité : permettent d’assurer la cohérence des données. Les contraintes d’intégrité
sont :
3.4.1 Contrainte de domaine : restriction de l’ensemble des valeurs possibles d’un attribut.
3.4.2 Contrainte de clé : définit un sous-ensemble
sous ensemble minimal des colonnes tel que la table ne puisse contenir
deux lignes ayant mêmes valeurs pour ces colonnes.
Il existe trois types de clés:
Clé primaire : Ensemble minimum d'attributsd'attributs qui permet de distinguer chaque nn-uplet de la table par
rapport à tous les autres. Chaque table doit avoir une clé primaire.
Clé candidate : Ensemble minimum d'attributs susceptibles de jouer le rôle de la clé primaire.
Clé étrangère : fait référence
rence à la clé primaire d'une autre table.
3.4.3 Contrainte obligatoire : précise qu’un attribut ou plusieurs attributs doivent toujours avoir une valeur.
3.4.5 Contrainte d’intégrité référentielle ou d’inclusion:: lie deux colonnes ou deux ensembles de cocolonnes de
deux tables différentes.
39
Règle I : Toute entité est traduite en une table relationnelle dont les caractéristiques sont les suivantes :
Règle II : Toute relation binaire plusieurs à plusieurs est traduite en une table relationnelle dont les
caractéristiques sont les suivantes :
· le nom de la table est le nom de la relation ;
· la clé de la table estt formée par la concaténation des identifiants des entités participant à la relation ;
· les attributs spécifiques de la relation forment les autres colonnes de la table.
Une contrainte d’intégrité référentielle est générée entre chaque colonne clé de la nouvelle table et la table
d’origine de cette clé.
TRADUCTION DE LA RELATION PLUSIEURS à PLUSIEURS
40
Règle III : Toute relation binaire un à plusieurs est traduite :
1. soit par un report de clé : l’identifiant de l’entité participant à la relation côté N est ajoutée comme
colonne supplémentaire à la table représentant l’autre entité. Cette colonne est parfois appelée clé
étrangère.. Le cas échéant, les attributs spécifiques
spécifiques à la relation sont eux aussi ajoutés à la même
table ;
2. soit par une table spécifique dont les caractéristiques sont les suivantes :
· le nom de la table est le nom de la relation ;
· la clé de la table est l’identifiant de l’entité participent
parti à la relation côté 1 ;
· les attributs spécifiques de la relation forment les autres colonnes de la table.
TRADUCTION DE LA RELATION UN à PLUSIEURS
Règle 4 : Toute relation binaire un à un est traduite, au choix, par l’une des trois solutions
solutions suivantes :
fusion des tables des entités qu’elle relie (choix1) ;
report de clé d’une table dans l’autre (choix2) ;
création d’une table spécifique reliant les clés des deux entités (choix3).
Les attributs spécifiques de cette relation sont ajoutés à la table résultant de la fusion (choix1), reportés avec
la clé (choix2), ou insérés dans la table spécifique (choix3).
TRADUCTION DE LA RELATION UN à UN
41
TRADUCTION D’UN SCHEMA CONCEPTUEL EN SCHEMA RELATIONNEL
Pour organiser un karaoké, une association veut créer une base de données qui lui per permettra
d'enregistrer le contenu de tous les DVD dont elle dispose.
Les organisateurs veulent ensuite pouvoir éditer la liste de tous les chanteurs, de tous les titres et le sommaire
de chaque DVD.
Dessinez le modèle de données correspondant.
42
DVD CHANTEURS
Référence Nom
Titre
CHASSONS
Possède Titre Chante
EXERCICES n°2
IV NIVEAU PHYSIQUE :
Le niveau physique correspond à l’implémentation du modèle logique dans un SGBD particulier (ACCESS ;
MYSQL ; ORACLE…)
43
La Direction Générale des impôts vous sollicite pour développer une application qui calcule le Salaire taxable
net du mois (Stnm) des contribuables assujettis à l’IRPP. Pour cela, on vous donne en annexe 8
l’organigramme de calcul de cet impôt.
Travail à faire
1) Définir les termes suivants : association, cardinalité 2 pts
2) Quel type de cardinalité avons – nous dans la relation de l’annexe 1 ? 2 pts
3) Créer la base de données ACCESS qui porte votre n° de table 2 pts
4) En vous servant du dictionnaire des données (voir annexe 2), créer chaque table (voir annexe 1) 2 pts
5) Procéder à la mise en relation desdites tables (voir annexe 1) 2 pts
6) Créer le formulaire associé à chaque table (voir annexe 3 et 4) 2 pts
7) A l’aide du formulaire approprié, saisir les informations en annexe 5 et 6
8) Créer la requête Salaire taxable net du mois qui s’affiche comme suit :
Matricule Stbm Scm PV:VraiFaux([SCM]<=300000;[Scm]*2,8/100 ;300000*2,8/100) Stnm :70/100*[Stnm]-[PV]-41667
9) On sait que CAC = Stnm*10%
Ajouter ce champ calculé dans la requête précédente 2 pts
10) On admet que le contribuable NJENG a plutôt les éléments de la paie suivante 2 pts
Stbm 3214520
Scm 2541000
Mettre la base de données à jour
Annexe 1
44
Annexe 2
Champs Clé Clé Type de Taille Format Décimale Indexé
primaire secondaire donnée
Matricule Oui Non Texte 30 Oui – sans doublons
Nom Non Non Texte 30 Non
Num Oui Non NuméroAuto Oui – sans doublons
Stbm Non Non Numérique Entier long Standard 0 Non
Scm Non Non Numérique Entier long Standard 0 Non
Annexe 3 Annexe 4
Matricule Matricule
Nom Stbm
Ok Fermer Scm
Ok Fermer
Matricule 0214N
Nom NJENG
Annexe 8
ORGANIGRAMME DE PROMMATION DE L’IRPP
à partir du Salaire Taxable Brut du Mois (Stbm) et du salaire cotisable du Mois (Scm)
DEBUT PROGRAMME
- Introduire Stbm
- Introduire Scm
Oui
45
Dictionnaire DES VARIABLES
Légendes Significations
Scm Salaire cotisable du mois
PV Pension Vieillesse
Stnm Salaire Taxable Net du mois
Stbm Salaire Taxable Brut du mois
On vous sollicite pour concevoir une base de données ACCESS qui permet de saisir les notes des candidats
au Bacc STT.
Travail à faire
1) Définir les termes suivants : Entité, Occurrence 2pts
2) Dans la relation en annexe 1, relever une entité de votre choix. De la même manière, citer deux
Occurrences de votre choix pour la propriété « Epreuve » 2pts
3) Créer la base de données ACCESS qui porte votre n° de table 2pts
4) En vous servant du dictionnaire de données (voir annexe 2), créer chaque table (voir annexe1) 3pts
5) Procéder à la mise en relation desdites tables (voir annexe1) 2pts
6) Créer le formulaire associé à chaque table (voir annexes 3,4 et 5) 2pts
7) A l’aide du formulaire approprié, saisir les informations en annexe 6, 7 et 8 3pts
8) Créer la requête PV qui affiche les notes de chaque candidat comme suit : 2pts
9) A partir de la requête précédente, créer la requête GSI qui affiche seulement les notes de GSI 1pt
10) Quelle eut été la note de Ekoka (NumTable 126) s’il avait eu 13 en fiscalité ? 1pt
NumTable 126
Nom ONGBAMBOK Nadia
Spécialité CG
46
Annexe 8: Notes des candidats
Annexe 2
Champs Clé Clé Type Taille Format Décimale Indexé
primaire secondaire de donnée
Code Epreuve Oui Non Texte 5 Oui – sans doublons
Epreuve Non Non Texte 30 Non
Coéf Nom Non Numérique Entier long Standard 0 Non
Num Oui Non NuméroAuto Oui – sans doublons
NumTable Oui Non Texte 6 Oui – sans doublons
Nom Non Non Texte 30 Standard 0 Non
Spécialité Non Non Texte 10 Non
Note Non Non Numérique Entier long Standard 0 Non
47
Annexe 3 : Formulaire de saisie Annexe 4 : Formulaire de saisie
des Epreuves des Candidats
Code Epreuve NumTable
Epreuve Nom
Coéf Spécialité
Ok Fermer Ok Fermer
NumTable
Code Epreuve
Note
Ok Fermer
Le Directeur de l’hôtel SAWA vous sollicite pour créer une base de données sur Access qui répertorie
les clients par ville et pour chacun, le montant de la note de restaurant. On vous informe qu’un client peut
venir plusieurs fois au restaurant au cours d’une journée.
Travail à faire
1) Créer la base de données en lui donnant votre n° de table ; 1 pt
2) Fermer la base de données ; 1 pt
3) Ouvrir la base de données et désactiver les macros ; 1 pt
4) En vous servant du MLD et du Dictionnaire des données en annexes 1 et 2,
a) Créer la table CLIENTS en mode création 2 pts
b) Créer la table REPAS en mode création 2 pts
5) Mettre les tables en relation. 3 pts
6) Saisir les données des annexes 3 et 4 dans les tables appropriées 3 pts
7) Créer et imprimer une requête qui sélectionne les clients de Yaoundé et
Douala dont le montant de l’addition est supérieur à 20 000 FCFA ; 2 pts
8) Créer à l’aide de l’assistant, un formulaire de saisie permettant d’afficher
les données des clients et dans ce formulaire, créer à l’aide de l’assistant
également, un sous formulaire permettant d’afficher les données de la table
REPAS ; 3 pts
9) Créer un état qui liste les clients en regroupant par ville et en les
imprimant par ordre d’addition décroissant 2 pts
48
Annexe 1 : MLD
CLIENTS CLIENTS
Nomclient 1 N°repas
Civilité Date repas
Ville Nombre repas
Addition
n #Nom client
49
Du MCD au MLD
Exercice 1
Pour organiser un karaoké, une association veut créer une base de données qui lui permettra d'enregistrer le
contenu de tous les DVD dont elle dispose.
Les organisateurs veulent ensuite pouvoir éditer la liste de tous les chanteurs, de tous les titres et le
sommaire de chaque DVD.
Dessinez le modèle de données correspondant.
Faites-le avant de regarder la réponse!
Exercice 2
Un magasin de sport a besoin de stocker ses informations principales dans une base de données.
Il s'agit de stocker toutes les informations relatives à ses produits, ses clients et ses fournisseurs.
Il souhaite que l'organisation soit facilitée par le regroupement des produits en différentes catégories.
Et il souhaite à partir de là pouvoir facilement consulter ses stocks, la liste de ses meilleurs clients,
le top 10 de ses produits vendus, ou la facture d'un client donné...
Créez les MCD et MLD correspondant.
Exercice 3
Un complexe cinématographique a besoin d'une base de données pour gérer la distribution de ses billets de
cinéma.
Les gérants souhaitent ainsi facilement gérer le remplissage de leurs salles.
Et ils souhaitent ensuite pouvoir facilement obtenir des informations sur les films qui marchent le mieux,
les acteurs attirant le plus de public, les heures d'affluence des clients, ou la recette d'une séance précise...
Créer les MCD et MLD correspondant.
Exercice 4
Une agence immobilière a besoin d'une base de données pour gérer ses locations.
Il faut entre autres qu'elle soit capable de cibler les logements pouvant convenir à un client donné.
Elle souhaite également pouvoir facilement dresser la facture d'un client donné,
savoir ce qu'elle doit verser à un propriétaire donné, ou calculer les primes de ses agents.
Créer les MCD et MLD correspondant.
50
I- DEFINITION
Visual Basic pour Applications (VBA) est le langage de programmation des applications de Microsoft
Office (Word, Excel, Access …).
VBA permet d’automatiser les tâches, de créer des applications complètes, de sécuriser vossaisies et
vos documents, de créer de nouveaux menus et de nouvelles fonctions pour boosterefficacement votre
logiciel.
L'éditeur de macro, ou VBE (Visual Basic Editor) est l'environnement de programmation de VBA. Il
se lance par le menu "Outils-Macro-Visual-Basic-Editor- ou par Avertissement de sécurité – option – activer
ce contenu – ok – créer – macro – module de classe - ou encore par le raccourci clavier "Alt+F11".
51
Ecrire le nom de la
macro et faire un
clic sur créer
Le nom des procédures ne doit pas commencer par une lettre et ne doit pas contenir d'espaces.
Utilisez le caractère de soulignement pour séparer les mots. Il est conseillé de les écrire comme des
noms propres.
Pour déclarer une procédure, taper Sub et son nom puis taper Entrée. VBE ajoute
automatiquement les parenthèses et la ligne End Sub.
Une fonction est une procédure qui renvoie une valeur. Elle se déclare de la même façon
qu'une procédure.
52
Exemple de fonction nommée Calcul :
Il est possible d'ajouter des lignes de commentaire entre les lignes d'instruction ou au bout
de celles-ci. Les commentaires sont précédés d'une apostrophe et prennent une couleur différente
(définie dans les options de VBE) :
SubEssai()
Dim Invite as String 'Nom de l'utilisateur
Invite = "Toto"
'Message bonjour à l'utilisateur
MsgBox "Bonjour " & Invite
End Sub
Résultat :
Il n'y a pas de limite de caractères pour chaque ligne d'instruction. Il est toutefois possible
d'écrire une instruction sur plusieurs lignes afin d'augmenter la visibilité du code. Pour cela, il faut
ajouter le caractère de soulignement avant le passage à la ligne (touche Entrée) :
SubEssai()
MsgBox("Aujourd'hui nous sommes le " _
& Date, vbInformation, "Mon Application")
End Sub
Résultat :
L'option "Info express automatique" permet d'afficher les informations de la fonction que
vous venez de taper. Il est également possible d'obtenir de l'aide à tout moment par la combinaison
de touches Crtl+j :
53
La vérification automatique de la syntaxe vous alerte s’il y a une erreur dans l'écriture du code et la
ligne de code change de couleur. Si la vérification automatique de la syntaxe n'est pas activée, la
boite d'alerte ne s'affiche pas.
Chaque procédure Sub ou Function peut être appelée de n'importe qu'elle autre procédure du
projet. Pour restreindre la portée d'une procédure au module, déclarez-la en private :
Private Sub Essai()
MsgBox "Bonjour"
End Sub
Private Function Calcul(Nbre1, Nbre2)
Calcul = Nbre1 + Nbre2
End Function
Il existe souvent de multiples façons d'arriver à un résultat. Une bonne analyse des tâches à
accomplir est nécessaire avant de se lancer dans la création d'une application.
Si vous n'avez aucune expérience en VBA, vous verrez que l'on y prend vite goût et que l'on
arrive très rapidement à de surprenants résultats
V- VOCABULAIRE VBA
VBA manipule les objets de l'application hôte. Chaque objet possède des propriétés et des
méthodes.
54
Pour faire référence à la Feuil2, on va utiliser Worksheets(2) ou Worksheets("Feuil2")
Chaque objet peut avoir ses propres objets. Par exemple, Excel possède des classeurs qui possèdent
des feuilles qui possèdent des cellules. Pour faire référence à une cellule, on pourrait ainsi utiliser :
Application.Workbooks(1).Worksheets("Feuil2").Range("A1")
Une propriété peut également faire référence à un état de l'objet. Par exemple, si on veut
masquer la feuille de calcul "Feuil2", on écrira :
Worksheets("Feuil2").Visible = False
Worksheets("Feuil2").Select
Lorsque l'on fait appel à plusieurs propriétés ou méthodes d'un même objet, on fera appel au
bloc d'instruction With Objet Instructions End With. Cette instruction rend le code souvent plus
facile à lire et plus rapide a exécuter.
55
4.4.1 Les MsgBox
Les MsgBox peuvent simplement donner une information. La procédure est alors stoppée
tant que l'utilisateur n'a pas cliqué sur le bouton.
MsgBox "Bonjour"
Le texte peut-être affiché sur plusieurs lignes en utilisant le code retour chariot chr(13) ou le
code retour ligne chr(10).
MsgBox "Bonjour" & Chr(10) & "Il est " & Time
La syntaxe pour ajouter une icône est MsgBox "Message", attribut icône :
Le titre de la fenêtre (Microsoft Excel) peut être changé. La syntaxe est : MsgBox "Message",
attribut icône, "Titre de la fenêtre" :
56
Les MsgBox peuvent également demander une information à l'utilisateur. Dans ce cas, la
boite de message comprend plusieurs boutons
Les types d'attribut Boutons :
Constante : Boutons :
vbAbortRetryIgnore
vbOKCancel
vbRetryCancel
vbYesNo
vbYesNoCancel
Vous pouvez également y ajouter les icônes et personnaliser le titre de la fenêtre en utilisant
la syntaxe : Msgbox ("Message", attribut bouton + attribut icône, "titre de la fenêtre").
MsgBox ("Voulez-vous continuer ?", vbYesNo + vbQuestion, _
"Mon programme")
57
MsgBox renvoie une valeur différente pour chaque bouton.
Constante : Valeur :
vbOK 1
vbCancel 2
vbAbort 3
vbRetry 4
vbIgnore 5
vbYes 6
vbNo 7
Ainsi, si l'utilisateur clique sur le bouton "OK", MsgBox renvoie la valeur 1, sur le bouton
"Annuler" la valeur 2, sur le bouton "Ignorer" la valeur 5 ...
Cette valeur est récupérée dans une variable.
Comme pour les MsgBox, vous pouvez changer le titre de la fenêtre. Vous pouvez
également entrer une valeur par défaut dans la zone de saisie. La syntaxe devient : InputBox
("Message", "Titre de la fenêtre", "Valeur par défaut"). La valeur saisie peut être récupérée dans une
variable. Si l'utilisateur clique sur le bouton "Annuler", la variable renvoie une chaîne de longueur
nulle ("").
Message = InputBox("Entrez votre nom :", "Mon Programme", _
"Utilisateur 1")
58
Message = InputBox("Entrez votre nom :", "Mon Programme", _
"Utilisateur 1")
'La ligne suivante arrête la procédure si l'utilisateur
'clique sur "Annuler"
If Message = "" Then Exit Sub
'La ligne suivante place la valeur saisie dans la cellule
'A1 de la feuille active
Range("A1").Value = Message
Vous pouvez également écrire un message dans la barre d'état de l'application. La syntaxe est
: Application.StatusBar = "Message"
A la fin de la procédure, pensez à supprimer le message de la barre d'état par la ligne d'instruction:
Application.StatusBar = False.
5. Les variables
Lors d'une procédure, les variables servent à stocker toutes sortes de données (des valeurs
numériques, du texte, des valeurs logiques, des dates ...). Elles peuvent également faire référence à
un objet.
Suivant les données que la variable recevra, on lui affectera un type différent. Les différents types
de variables de VB sont :
59
Type de données: Mot clé : Espace Plage de valeur
Octet Byte 1 octet Entier de 0 à 255
Logique Boolean 2 octets True ou False
Entier Integer 2 octets Entier de -32 768 à 32 768
Entier de -2 147 483 648 et 2 147 483 647 à
Entier Long Long 4 octets
2 147 483 648 et 2 147 483 647
-3,402823E38 à -1,401298E-45 pour les
valeurs négatives
Décimal simple Single 4 octets
1,401298E-45 à 3,402823E38 pour les
valeurs positives.
-1,79769313486231E308 à -
4,94065645841247E-324 pour les valeurs
négatives
Décimal Double Double 8 octets
4,94065645841247E-324 et
1,79769313486231E308 pour les valeurs
positives
de -922 337 203 685 477,5808 et
Monétaire Currency 8 octets 922 337 203 685 477,5807
Pour rendre obligatoire la déclaration de variables, placez l'instuction "Option Explicit" sur
la première ligne du module ou cochez l'option "Déclaration des variables obligatoires" dans le
menu "Outils-Options" de l'éditeur de macros.
La déclaration explicite d'une variable se fait par le mot Dim (abréviation de Dimension). Le
nombre maximum de caractères du nom de la variable est de 255. Il ne doit pas commencer
par un chiffre et ne doit pas contenir d'espaces. La syntaxe est "Dim NomDeLaVariable as Type".
60
Sub Test()
Dim SommeVal As Integer
Dim Val1 As Integer
Dim Val2 As Integer
Val1 = 5
Val2 = 2
SommeVal = Val1 + Val2
MsgBox Somme
End Sub
Vous pouvez également déclarer vos variables sur une même ligne :
Sub Test()
Dim SommeVal As Integer, Val1 As Integer, Val2 As Integer
Val1 = 5
Val2 = 2
SommeVal = Val1 + Val2
MsgBox SommeVal
End Sub
La portée d'une variable est différente suivant l'endroit et la façon dont elle est déclarée.
Une variable déclarée à l'intérieur d'une procédure est dite "Locale". Elle peut-être déclarer
par les mots Dim, Static ou Private. Dès que la procédure est terminée, la variable n'est plus
chargée en mémoire sauf si elle est déclarée par le mot Static. Une variable Locale est
généralement placée juste après la déclaration de la procédure.
Option Explicit
'Les variables Val1 et Val2 sont libérées de la mémoire alors
que la variable SommeVal garde sa valeur à la fin de la
procédure
Sub Test()
Static SommeVal As Integer
Dim As Val1, Integer, Val2 As Integer
'Instructions
End Sub
Une variable peut être "Locale au module" si celle-ci est déclarée avant la première
procédure
d'un module. Toutes les procédures du module peuvent alors lui faire appel. Elle est déclarée
par les mots Dim ou Private.
61
Option Explicit
'Les variables Val1 et Val2 peuvent être utilisées dans toutes
les procédures du module
Dim As Val1, Integer, Val2 As Integer
Sub Test()
Static SommeVal As Integer
SommeVal = Val1 + Val2
End Sub
Sub Test2()
Static DivisVal As Integer
DivisVal = Val1 / Val2
End Sub
Un variable peut également être accessible à tous les modules d'un projet. On dit alors
qu'elle
est publique. Elle est déclarée par le mot Public. Elle ne peut pas être déclarée dans un module
de Feuille ou dans un module de UserForm.
Option Explicit
'Les variables Val1 et Val2 peuvent être utilisées dans toutes
les procédures de tous les modules du projet.
Public As Val1, Integer, Val2 As Integer
Une variable peut garder toujours la même valeur lors de l'exécution d'un programme. Dans
ce cas, elle est déclarée par les mots Const ou Public Const.
Option Explicit
'La variable Chemin gardera toujours la valeur.
Const Chemin as String = "c:\application\excel\"
6. Classeurs, feuilles, cellules
6.1 Les classeurs.
Les classeurs sont désignés par le mot "Workbook". Ils peuvent être ouvert, fermé, enregistré,
activé, masqué, supprimé ... par une instruction VB.
Quelques exemples d'instructions sur les classeurs :
'Ajouter un nouveau classeur
Workbooks.Add
'Fermer un classeur. Le nom du classeur ou son index
peut être indiqué.
Workbooks("NomDuClasseur.xls").Close
'Fermer le classeur actif.
ActiveWorkbook.Close
'Ouvrir un classeur.
Workbooks.Open "c:\Chemin\NomDuFichier.xls"
'Activer un classeur.
Workbooks("NomDuClasseur.xls").Activate
Certaines méthodes de l'objet Workbook possèdent des arguments.
Quelques exemples :
62
'Fermer un classeur sans l'enregistrer
Workbooks("NomDuClasseur.xls").Close False
'Ouvrir un classeur en lecture seule.
Workbooks.Open "c:\Chemin\NomDuFichier.xls", , True
'Enregistrer un classeur sous "Test.xls" avec comme
mot de passe "testpass"
Workbooks(1).SaveAs "test.xls", , "testpass"
6.2 Les feuilles de calcul.
Les feuilles de calcul sont désignées par le mot "Worksheet". Comme les Workbook, ces
objets possèdent de nombreuses propriétés et méthodes.
Quelques exemples d'instructions sur les feuilles :
'Selectionner une feuille
Worksheets("Feuil1").Select
'Récupérer le nom de la feuille active dans une
variable.
MaFeuille = ActiveSheet.Name
'Masquer une feuille.
Worksheets("Feuil1").Visible = False
'Supprimer une Feuille.
Worksheets("Feuil1").Delete
Les exemples précédents font référence aux feuilles du classeur actif. Vous pouvez
également faire référence aux feuilles des autres classeurs ouverts :
'Copier la Feuil2 de Classeur.xls dans un nouveau
classeur
Workbooks("Classeur.xls").Worsheets("Feuil2").Copy
6.3 Les cellules.
Une plage de cellules est désignée par l'objet "Range". Pour faire référence à la plage de
cellule "A1:B10", on utilisera Range("A1:B10").
'Effacer les données et le mise en forme de la plage
de cellule "A1:B10"
Range("A1:B10").Clear
L'objet Range permet également de faire référence à plusieurs plages de cellules non contiguës.
'Séléctionner les plages de cellule "A1:B5" et
"D2:F10"
Range("A1:B5,D2:F10").Select
Pour faire référence à une seule cellule, on utilisera l'objet Range("Référence de la cellule)
ou Cells(Numéro de ligne, Numéro de colonne).
'Ecrire 5 dans la cellule "A3"
Range("A3").Value = 5
'ou
Cells(3, 1).Value = 5
63
Dans l'exemple suivant, nous allons recopier la plage de cellules "A1:B10" de la "Feuil1" du
classeur actif dans la cellule "D5" de la "Feuil2" du classeur "Classeur2". Voici à ce que
l'enregistreur de macro produirait comme code :
Range("A1:B10").Select
Selection.Copy
Windows("Classeur2").Activate
Sheets("Feuil2").Select
Range("D5").Select
ActiveSheet.Paste
Sheets("Feuil1").Select
Application.CutCopyMode = False
Windows("Classeur1").Activate
Voici maintenant le code tel qu'il pourrait être écrit sur une seule ligne de code:
Range("A1:B10").Copy Workbooks("Classeur2"). _
Worksheets("Feuil2").Range("D5")
On peut utiliser une autre syntaxe pour faire référence à une cellule :
'la ligne
Workbooks("Classeur2").Worksheets("Feuil2").Range("D5")
'peut être remplacée par:
Range("[Classeur2]Feuil2!D5")
En utilisant des variables objets (très utiles lorsque votre programme fait souvent référence
aux mêmes plages de cellules), le code pourrait devenir :
64
'Pour écrire 5 dans la cellule "B2", on pourrait
utiliser :
Range("A1").Offset(1, 1) = 5
'Ecrire une valeur à la suite d'une liste de valeur
dans la colonne A:
Dim NbEnreg As Integer
'NbEnreg correspond au nombre d'enregistrement de la
colonne A:
NbEnreg = Range("A1").End(xlDown).Row
Range("A1").Offset(NbEnreg, 0) = 10
Les arguments (Nombre de lignes, Nombre de colonnes) de l'instruction Offset sont
facultatifs et leur valeur par défaut est 0. La dernière ligne de code de l'exemple précédent aurait pu
s'écrire :
Range("A1").Offset(NbEnreg) = 10
7. Les conditions
Les conditions sont très courantes dans les applications VB. Elles peuvent déterminer la
valeur que prennent les variables, arrêter une procédure, appeler une procédure, quitter une boucle,
atteindre une étiquette.
Les exemples suivants vont déterminer la valeur que prendra la variable Mention par rapport
à des notes. Le tableau des notes est :
Notes : Mention :
0 Nul
1à5 Moyen
6 à 10 Passable
11 à 15 Bien
16 à 19 Très bien
20 Excellent
L'instruction la plus courante dans VB est la condition If condition Then valeur vrai :
'La Note se trouve dans la cellule "A1", la mention
est à mettre dans la cellule "B1"
'Pour trouver la valeur de la mention, on pourrait
écrire :
Dim Note As Integer
Dim Mention As String
Note = Range("A1")
If Note = 0 Then Mention = "Nul"
If Note >= 1 And Note <6 Then Mention = "Moyen"
If Note >= 6 And Note <11 Then Mention = "Passable"
If Note >= 11 And Note <16 Then Mention = "Bien"
If Note >= 16 And Note <20 Then Mention = "Très
Bien"
If Note = 20 Then Mention = "Excellent"
Range("B1") = Mention
65
Si la valeur vraie possède plusieurs lignes d'instructions, la syntaxe devient If Condition
Then
Valeur vraie End If.
'Si la note est égale à 0, la mention prend comme
valeur "Nul" et la couleur de la police devient
Rouge:
Dim Note As Integer
Dim Mention As String
Note = Range("A1")
If Note = 0 Then
Mention = "Nul"
Range("B1").Font.Color = RGB(255, 0, 0)
End If
Range("B1") = Mention
Dans notre exemple, l'instruction peut être mieux structurée. La couleur de la police de la
mention est rouge si la note est inférieure à 10 et verte si la note est supérieure à 10 en utilisant la
syntaxe If condition Then valeur vrai Else valeur fausse End If.
If Note < 10 Then
Range("B1").Font.Color = RGB(255, 0, 0)
Else
Range("B1").Font.Color = RGB(255, 0, 0)
End If
Pour calculer la valeur de la mention, on utilisera plus facilement la syntaxe If condition
Then valeur vraie ElseIf condition Then valeur vrai Else valeur vraie End If en ajoutant
autant de fois que nécessaire l'instruction ElseIf.
66
Dim Note As Integer
Dim Mention As String
Note = Range("A1")
Select Case Note
Case 0
Mention = "Nul"
Case 1 To 5
Mention = "Moyen"
Case 6 To 10
Mention = "Passable"
Case 11 To 15
Mention = "Bien"
Case 16 To 19
Mention = "Très Bien"
Case Else
Mention = "Excellent"
End Select
Range("B1") = Mention
Une condition peut appeler une étiquette. Une étiquette représente un endroit de la
procédure.
Elle se déclare par un nom suivi du signe ":". Dans l'exemple suivant, si i prend la valeur 10,
la procédure va directement à la ligne Msgbox "Fin du programme".
Dim i As Integer
instructions
If i = 10 Then GoTo Fin
instructions
Fin:
Msgbox "Fin du programme"
8. Les boucles :
Les boucles le plus souvent utilisés sont les boucles For ... Next. Elles permettent de répéter
un nombre de fois défini un bloc d'instructions. Elles utilisent une variable qui est
incrémentée ou décrémentée à chaque répétition.
Dim i As Integer
'La boucle suivante va écrire les chiffres de 1 à 10
'dans la plage de cellule "A1:A10". La variable i
's'incrémente de 1 à chaque fois
For i = 1 To 10
Range("A1").Offset(i - 1) = i
Next i
La variable peut être incrémentée d'une valeur différente de 1 par le mot Step.
Dim i As Integer, j As Integer
'La boucle suivante va écrire les chiffres pairs
'dans la plage de cellule "A1:A10". La variable i
's'incrémente de 2 à chaque fois
j=0
For i = 2 To 20 Step 2
Range("A1").Offset(j) = i
j=j+1
Next i
67
La variable peut également être décrémentée. Dans ce cas, le mot Step est obligatoire.
Dim i As Integer, j As Integer
'La boucle suivante va écrire les chiffres de 20 à
10
'dans la plage de cellule "A1:A10". La variable i
'se décrémente de 1 à chaque fois
j=0
For i = 20 To 10 Step -1
Range("A1").Offset(j) = i
j=j+1
Next i
A l'intérieur d'un bloc d'instruction For Next, l'instruction Exit For, peut quitter la boucle
avant que la variable n'est atteint sa dernière valeur. Dans le tableau suivant se trouve une liste
d'élèves avec leurs notes.
68
Pour répéter un bloc d'instructions pour chaque objet d'une collection ou pour chaque
élément d'un tableau, on utilisera le bloc d'instruction For Each Objet In Collection Next.
L'exemple suivant mettra la police de couleur rouge si les notes sont inférieures à 10 et de couleur
verte si les notes sont supérieures à10.
Dim Cel As Range, Cel2 As Range
'On affecte la plage de cellules "B2:B15"
'à la variable Cel
Set Cel = Range("B2:B15")
'Pour chaque cellule de la plage de cellule
For Each Cel2 In Cel
If Cel2 < 10 Then
Visual Basic pour Application 2009
23 Master 2 – Hervé Tribet – Septembre 2008
'Police de couleur rouge
Cel2.Font.Color = RGB(0, 255, 0)
Else
'Police de couleur verte
Cel2.Font.Color = RGB(255, 0, 0)
End If
Next
On peut également utiliser l'instruction Exit For pour sortir d'un bloc d'instruction For Each
... Next.
Les boucles While condition Wend exécutent un bloc d'instruction tout pendant que la
condition est vraie.
Dim Calcul As Integer, Compteur As Integer
Compteur = 1
'Le bloc d'instruction suivant va additionner les
' nombres de 1 à 10 (1+2+3+4+5+6+7+8+9+10).
'Tant que la valeur de Compteur est inférieur 11
While Compteur < 11
Calcul = Calcul + Compteur
'Ne pas oublier d'incrémenter le compteur sinon
'la boucle ne pourra pas s'arrêter.
Compteur = Compteur + 1
Wend
Msgbox Calcul
69
Les boucles Do Loop sont mieux structurées que les boucles While Wend. On peut à tout
moment sortir d'une boucle Do Loop par l'instruction Exit Do.
La boucle Do While condition Loop exécute un bloc d'instruction tout pendant que la condition est
vraie. Dans l'exemple suivant, on veut ajouter l'élève Annie à la liste des élèves.
Dim Compteur As Integer
Dim Cel As Range
'On affecte la cellule "A1" à la variable Cel
Set Cel = Range("A1")
Compteur = 1
'Le bloc d'instruction suivant va se répéter
'tant que la cellule n'est pas vide
Do While Cel.Offset(Compteur) <> ""
'Ne pas oublier d'incrémenter le compteur sinon
'la boucle ne pourra pas s'arrêter.
Compteur = Compteur + 1
Loop
Cel.Offset(Compteur) = "ANNIE"
Dans l'exemple précédent, la condition est testée à l'entrée de la boucle. Dans la boucle Do
Loop While condition, le bloc d'instruction est exécuté une fois avant que la condition soit
testée.
Dim Compteur As Integer
Dim Cel As Range
'On affecte la cellule "A1" à la variable Cel
Set Cel = Range("A1")
Compteur = 1
'Le bloc d'instruction suivant va se répéter
'tant que la cellule n'est pas vide
Do
'Ne pas oublier d'incrémenter le compteur sinon
'la boucle ne pourra pas s'arrêter.
Compteur = Compteur + 1
Loop While Cel.Offset(Compteur) <> ""
Cel.Offset(Compteur) = "ANNIE"
70
Pour sortir d'une boucle, on utilise l'instruction Exit Do. Pour recherche la note de André, on
pourrait utiliser :
Dim Compteur As Integer, NoteEleve As integer
Dim Cel As Range
'On affecte la cellule "A1" à la variable Cel
Set Cel = Range("A1")
Compteur = 1
'Le bloc d'instruction suivant va se répéter
'tant que la cellule n'est pas vide
Do While Cel.Offset(Compteur) <> ""
'Si la valeur de la cellule est "ANDRE", on sort
'de la boucle
If Cel.Offset(Compteur) = "ANDRE" Then
Exit Do
End If
'Ne pas oublier d'incrémenter le compteur sinon
'la boucle ne pourra pas s'arrêter.
Compteur = Compteur + 1
Loop
NoteEleve = Cel.Offset(Compteur, 1)
Msgbox "La note de André est " & NoteEleve
Les boucles Do Until sont identiques aux boucles Do While, seulement le bloc d'instruction
est répété tout pendant que la condition n'est pas vraie. La syntaxe est exactement la même, il y a
juste le mot Until qui remplace le mot While. Si on reprend l'exemple précédent, la procédure
deviendrait :
71
1) Sous Access créer le fichier SommedeuxNombres puis passer en VBA 2,5 pts
2) Sous VBA, créer la macro SommedeuxNombres puis saisir le programme ci-après
voir annexe 2,5 pts
3) Sauvegarder le module sous le nom SommedeuxNombres 2,5 pts
4) Exécuter le programme 2,5 pts
Annexe
Sub Sommedeuxnombres()
Dim nom As String '4.2
Dim prénom As String '4.2
Dim nb1 As Single
Dim nb2 As Single
nom = InputBox("saisir votre nom", "SAISIE", "nom?") '4.2
prénom = InputBox("saisir votre prénom", "SAISIE", "prénom?") '4.2
nb1 = InputBox("saisir premier nombre", "SAISIE", 0) '4.2
nb2 = InputBox("saisir deuxième nombre", "SAISIE", 0) '4.2
opération = nb1 + nb2
invite = nom
suite = prénom
MsgBox "Bonjour:" & invite & Chr(1) & suite & Chr(10) & "le résultat est de:" & opération,
vbInformation, "résultat" '5.1
End Sub
72
1) Sous Access créer le fichier Facture puis passer en VBA 2,5 pts
2) Sous VBA, créer la macro MacroFacture puis saisir le programme ci-après
voir annexe 2,5 pts
3) Sauvegarder le module sous le nom MacroFacture 2,5 pts
4) Exécuter le programme
Sub macrofacture ()
Const tauxtva = 0.1925
Const tauxrem = 0.02
Dim brutht As Single
Dim netcomht As Single
Dim tva As Single
Dim ttc As Single
brutht = InputBox("saisir le montant BRUT HT")
'taux=InputBox("saisir le taux de remise en %")
If brutht > 1400 Then
tauxremise = tauxrem
Else
tauxremise = 0
End If
netcomht = brutht * (1 - tauxremise / 100)
tva = netcomht * tauxtva
ttc = netcomht + tva
MsgBox "le net commercial HT est " & netcomht & " FCFA"
MsgBox "le montant de la TVA est " & tva & " FCFA"
MsgBox "le net à payer TTC est " & ttc & " FCFA"
End Sub
73
La société Anonyme MMONICA au capital de 100 000 000 F (10 000 actions de 10 000 F) décide
d’augmenter son capital en émettant 5 000 actions nouvelles de 10 000 F.
Les actions nouvelles sont souscrites ou réparties :
Soit à titre irréductible, c’est à dire proportionnellement au nombre de droits détenus, en tenant compte de
la demande des actionnaires.
Soit à titre réductible, pour les actions laissées par les anciens actionnaires qui n’en veulent pas.
La répartition totale des nouvelles actions figure dans le tableau en annexe 1 (à compléter).
La démarche à suivre pour la répartition des actions nouvelles, figure dans l’organisation de
programmation en annexe 2 (à exploiter)
Travail à faire :
74
TABLEAU DE SOUSCRIPTION DES 5000 ACTIONS NOUVELLES
75
Organigramme de programmation (Annexe 2)
Début programme
Tableau des variables
Entrée des variables
variables désignation
NT Actions anciennes détenues totales
N’T Actions nouvelles émises totales
SATI = NTA x Q NDA Actions demandées par actionnaire
NTA Act. anc. Détenues par actionnaire
Q Quotité = N’T/NT = 5 000/10 000 = 12
SATI Souscription à titre irréductible
SATI OPATI Quote part à titre irréductible
EXC Excédent à partager
DNS Demande non satisfaite
NDA =
0?
OPATI
AT
Fin programme
76
AVIS D’APPEL D’OFFRES NATIONAL RESTREINT
N° 082/AONR/MINTP/CPM-A/2008 DU 19/06/2008
Dans le cadre de ses activités, le Ministère des Travaux Publics, Maître d’ouvrage, lance pour le compte
de la République du Cameroun, un appel d’offres national restreint, pour la réalisation de l’étude des normes
sur les ralentisseurs de vitesse.
La participation à cet appel d’offres est restreinte aux Bureaux d’Etudes Techniques (BET) figurant en
annexe I, retenus à l’issue de l’appel à manifestation d’intérêt n° 0114/AMI/MINTP/2007 du 26 Décembre
2007 pour les prestations susvisées.
Les critères d’évaluation des offres sont les suivants :
a) Offres techniques
Les offres techniques seront notées en fonction des critères essentiels ci-après :
références Désignation Notée sur :
Critère A Qualité de L’offre, organisation, technologie proposées 30 points
Critère B Personnel d’encadrement proposé, CV. Expérience et 50 points
méthodologie de formation interne du prestataire
Critère C Moyens matériels à mettre en place 10 points
Critère D Référence et capacité technique du prestataire 10 points
Une offre est déclarée « irrecevable » si la note technique (NT) est strictement inférieure à 75 points
sur 100 et « recevable » dans le cas contraire.
b) Offres financières
L’analyse des offres financières se fait de la manière suivante :
- Pour l’offre jugée recevable dont le prix est le plus bas, note financière (NF) = 100 points
- Pour les autres offres jugées recevables, la note financière (NF) est calculée en divisant le prix le plus
bas par le prix de l’offre considérée et en multipliant le résultat par 100.
c) Attribution du marché
Le maître d’ouvrage attribuera le marché au soumissionnaire dont l’offre a été reconnue conforme au
dossier d’appel d’offres et qui a soumis l’offre évaluée la mieux-disante par combinaison des critères
techniques et financières selon la formule suivante :
∗ ( ) ∗ è ( )
Note Définitive (ND) =
A l’issue de l’analyse des offres tenue le 14/07/2008, les scores figurant en annexe I ont été enregistrés.
Pour vous aider, les règles d’évaluation ci-dessus ont été traduites sous forme d’organigramme figurant
en annexe 2. Il ne vous reste qu’à traduire en formules de calcul.
77
Travail à faire :
1- Saisir le tableau d’analyse des offres tel qu’il figure en annexe I (3pts)
2- Saisir en F6 la formule permettant de calculer la Note Technique (NT) du prestataire (2pts)
CERBAT SARL puis calculer automatiquement celle des autres.
3- Saisir en G6 la formule permettant de déterminer la décision applicable au prestataire CERBAT SARL puis
déterminer automatiquement celle des autres (3pts)
4- Saisir en I6 la formule suivante = SI(G6=‘’Irrecevable‘’ ;‘’’’;H6) permettant d’extraire le prix des offres
recevables puis calculer automatiquement à l’extraction des prix
des autres (2pts)
5- Saisir en J6 la formule suivante (3pts)
=SI(G6=’’Irrecevable’’;‘’’’;SI(ET(G6=‘’Recevable’’;I6=MIN($I$6 :$I$11));100 ;100*MIN($I$6 :$I$11)/I6))
permettant de calculer la Note Financière (NF) du prestataire CERBAT SARL puis calculer automatiquement
celle des autres.
6- Saisir en K6 la formule permettant de calculer la Note Définitive (ND) du prestataire CERBAT SARL puis
calculer automatiquement celle des autres. (3pts)
7- Filtrer la liste pour ne faire apparaître à l’écran que les soumissionnaires recevables classés par ordre de
mérite décroissant puis mettre en rouge le nom du gagnant
de ce marché (2pts)
8- Quel serait le gagnant dans l’hypothèse suivante : (2pts)
PRIX DES
Critère Critère Critère Critère
prestataires OFFRES
A B C D
(PO)
LE COMPETING 11 46 7 6 52 000 000
INTEGC 28 44 ,5 7 6,5 39 000 000
9- Enregistrer votre travail dans la disquette en lui donnant votre nom comme nom du fichier et en lui
attribuant votre n° de table comme mot de passe.
78
Annexe 2 : Organigramme d’évaluation des offres
DEBUT
Lire critères A, B, C, D, et PO
Recevable Irrecevable
Oui Non
POR = Min(PORi ; PORn) ?
Oui
Autre prestataire ?
Non
FIN
79