Cours Cgao en PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 79

ComPtABIlIte et gestIoN

AssIstee PAr
AssIstees
orDINAteur (C.g.A
(C A.o.)

lIVre D’ACtIVIte
ClAsses 1 &t Cg
ère les

- Volume horaire/semaine : 3 heures


- Minimum annuel : 66 heures
- Coefficient : 3

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.

MODULE I : LE LOGICIEL EXCEL (ETUDE DES FORMULES)


MODULE II : L’ALGORITHMIE
MODULE III:INITIATION AU LOGICIEL ACCESS
MODULE IV:INITIATION AU LANGAGE VISUAL BASIC APPLICATION (VBA)
MODULE V:TP (Anciens sujets d'examens)

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.3 Les formules logiques


Elles contiennent des comparaisons entre des constantes ou des cellules.
Exemple :
=A10>A11
= A10>= A11
Une formule de ce type retourne la valeur vraie si c’est exact ou faux dans le cas contraire.

1.4 Les formules contenant des fonctions


Excel contient un certain nombre de fonction prédéfinies ; par exemple, pour calculer une somme, on utilisera
la fonction prédéfinie = Somme(). De même pour calculer une moyenne, on utilisera la fonction prédéfinie
=Moyenne ().
Remarque
Lorsqu’on utilise des fonctions prédéfinies, il faut respecter la syntaxe de la fonction sous peine d’obtenir un
message d’erreur.
Il existe environ 400 fonctions prédéfinies. Excel met alors à votre disposition un assistant fonction car on ne
peut pas mémoriser toutes les syntaxes. Cet outil a pour mission de vous venir en aide pour saisir des
fonctions.

1.5 Quelques fonctions courantes dans Ms Excel


1.5.1 Fonction SOMME
Rôle : Elle calcule la somme des nombres dans une plage de cellule
Syntaxe : SOMME (Nombre1,Nombre2;…)

1.5.2 Fonction MOYENNE


Rôle : Elle calcule la moyenne (espérance arithmétique) des arguments qui peuvent être des nombres, des
noms, des matrices ou des références contenant des nombres.
Syntaxe : MOYENNE (Nombre1,Nombre2 ;…)

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)

1.5.4 Fonction PRODUIT


Rôle : Elle donne le produit de la multiplication de tous les nombres donnés comme arguments.
Syntaxe : PRODUIT (Nombre1,Nombre2 ;…)

1.5.5 Fonction SOMME.SI


Rôle : Elle additionne des cellules spécifiées selon un critère.
Syntaxe :SOMME.SI (plage;critère;somme_plage)

1.5.6 Fonction JOUR360


Rôle : Elle calcule le nombre de jours entre deux dates sur la base d’une année de 360 jours (12 mois de 30
jours chacun).
Syntaxe : JOUR360 (date_début;date_fin;méthode)

4
1.5.7 Fonction ENT
Rôle : Elle arrondi un nombre à l’entier immédiatement inférieur.
Syntaxe :ENT (nombre)

1.5.8 Fonction NB.SI


Rôle : Elle détermine le nombre de cellules non vide répondant à la condition à l’intérieur d’uneplage.
Syntaxe : NB.SI (plage;critère)

1.5.9 Fonction CONCATERNER


Rôle : Elle assemble plusieurs chaînes de caractères de façon qu’en former qu’une.
Syntaxe : CONCATENER (texte1;texte2;…)

1.5.10 Fonction GAUCHE


Rôle : Elle extrait les premiers caractères à l’extrême gauche d’une chaîne de texte.
Syntaxe :GAUCHE (texte;no_car)

1.5.11 Fonction DROITE


Rôle : Elle extrait les premiers caractères à l’extrême droit d’une chaîne de texte.
Syntaxe : DROITE (texte;no_car)

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;…)

II- CONSTRUCTION D’UNE FORMULE


On rappelle qu’une fonction commence par le signe d’égalité (=), suivi de l’expression à évaluer. La
procédure de construction d’une fonction est la suivante : =Opérande 1>opérateur 1>Opérande 2 >opérateur
2 > …>valider avec la touche entrée.
Exemple : =(E2*H5)+A1

III- L’ASSISTANT FONCTION


L’assistant fonction vous guide lors de la procédure d’insertion d’une fonction. La procédure d’insertion
d’une fonction est la suivante :
 Sélectionner la cellule dans laquelle vous voulez insérer la fonction (vous pouvez insérer une fonction
seule ou une fonction à l’intérieur d’une formule),
 Saisir le signe d’égalité (=),
 Cliquer sur l’icône (fx) se trouvant sur barre de formule,
 Sélectionner dans la liste des formules qui apparaît celle qui vous intéresse,
 Entrer les arguments de la formule,
 Cliquer sur Ok.

5
Exemple :

IV- L’ADRESSAGE DE LA CELLULE


Il existe deux types d’adressage dans les cellules
2.1 L’adressage relatif
Dans ce type d’adressage, il suffit de se positionner dans la cellule et de saisir la formule
Une formule utilisant l’adressage relatif pourra être recopiée dans une autre cellule. La nouvelle
formule s’adaptera automatiquement à la colonne ou à la ligne dans laquelle elle est positionnée.
L’adressage relatif à des cellules permet de gagner du temps dans la mise à jour des documents. Si la
formule est à reproduire plusieurs fois, il suffit de la recopier d’une cellule à une ou plusieurs autres.

2.2 L’adressage absolu


Dans l’adressage absolu(le signe&est placé devant le numéro de ligne et de colonne d’une cellule)
une cellule est spécifiée. Si on recopie le contenu d’une cellule possédant un adressage absolu dans une
autre cellule, cette dernière aura exactement la même formule ou la même saisie.
NB : ce type d’adressage est intéressant lorsque l’on veut transférer une même constante dans une ou
plusieurs cellules.

2.3 L’adressage mixte


Une formule peut combiner un adressage relatif et un adressage absolu : on parlera alors d’un
adressage mixte. Dans le cas d’une recopie, on aura seulement une incrémentation (action d’ajouter) de la
partie relative de la formule.

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

Manipulations et aptitudes du candidat……………………………………………………………. 5 pts


Travail fait ……………………………………………………………………………………………………… 15 pts

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

II- COMMENT ECRIRE UN ALGORITHME

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é.

III- LES VARIABLES

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.

3.2 Déclaration des variables


La première chose à faire avant d’utiliser une variable c’est de la déclarer c'est-à-dire de créer une
boîte et lui coller une étiquette. Ceci se fait au début de l’algorithme avant les instructions proprement dites.
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon les langages.
Toutefois, une règle absolue est qu’ils peuvent comporter des lettres et des chiffres, mais qu’ils excluent la
plupart des signes de ponctuation, en particulier les espaces. Un nom de variable correct commence
impérativement par une lettre. Quant au nombre maximal de signes pour un nom de variable, il dépend du
langage utilisé.
En pseudo-code algorithmique, on est bien sûr libre du nombre de signes pour un nom de variable,
même si pour des raisons purement pratiques, on évite généralement les noms à rallonge.

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 :

Type Numérique Plage


Byte (octet) 0 à 255
Entier simple -32 768 à 32 767
Entier long -2 147 483 648 à 2 147 483 647
Réel simple -3,40E38 à -1,40E-45 pour les valeurs négatives
1,40E-45 à 3,40E38 pour les valeurs positives
Réel double 1,79E308 à -4,94E-324 pour les valeurs négatives
4,94E-324 à 1,79E308 pour les valeurs positives
Pourquoi ne pas déclarer toutes les variables numériques en réel double, histoire de bétonner et d’être certain
qu’il n’y aura pas de problème ? En vertu du principe de l’économie de moyens. Un bon algorithme ne se
contente pas de marcher ; il marche en évitant de gaspiller les ressources de la machine. Sur certains
programmes de grande taille, l’abus de variables surdimensionnées peut entraîner des ralentissements
notables à l’exécution, voire un plantage pur et simple. Alors, autant prendre de bonnes habitudes d’hygiène…

Une déclaration algorithmique de variables aura ainsi cette tête :

Variable g en Entier Long

Variables PrixHT, TauxTVA, PrixTTC en Réel Simple

b) Autres types numériques


Certains langages autorisent d’autres types numériques, notamment :
 le type monétaire (avec strictement deux chiffres après la virgule)
 le type date (jour / mois / année).
Nous n’emploierons pas ces types ici, mais vous ne manquerez pas de les rencontrer en programmation
proprement dite.

c) Types non numériques


Fort heureusement, les boîtes que sont les variables peuvent contenir bien d’autres informations que des
nombres. Sans cela, on serait un peu embêté dès que l’on devrait stocker un nom de famille, par exemple.

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.

IV- L’INSTRUCTION D’AFFECTATION

4.1 Syntaxe et signification


La seule chose qu’on puisse vraiment faire avec une variable, c’est de l’affecter, c’est-à-dire
lui attribuer une valeur. En algorithmique, cette instruction se note avec le signe 
Ainsi :
Toto24

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 :
TutuToto
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.

3.2 Ordre des instructions


Il va de soi que l’ordre dans lequel les instructions sont écrites va jouer un rôle essentiel
dans le résultat final. Considérons les deux algorithmes suivant (notez que ce sont les premiers
algorithmes complets que nous examinerons, comme quoi on avance) :

Variable A en Entier Variable A en Entier

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 :

Variable A en Entier Variable A en Entier

Début Début
A  12 A  34
Fin Fin

Eh bien maintenant, à vous de jouer !

3.3 Expressions et opérateurs

Si on fait le point, on s’aperçoit que dans une instruction d’affectation, on trouve :

 à gauche de la flèche, un nom de variable, et uniquement cela.


 à droite de la flèche, ce qu’on appelle une expression. C’est-à-dire un ensemble de valeurs
liées par des opérateurs, et dont le résultat final est obligatoirement du même type que la variable
située à gauche. Si l’un de ces points n’est pas respecté, la machine sera incapable d’exécuter
l’affectation, et déclenchera une erreur (est-il besoin de dire que si aucun de ces points n’est
respecté, il y aura aussi erreur !)

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 ?

En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96. Rien de difficile là-dedans, que du normal.

b) Opérateur alphanumérique : &


Cet opérateur permet de concaténer, autrement dit d’agglomérer, deux chaînes de caractères.

13
Exemple

Variables A, B, C en Caractère

Début
A  "Gloubi"
B "Boulga"
C A & B
Fin

La valeur de C à la fin de l’algorithme est "GloubiBoulga"

c) Opérateurs logiques :

Il s’agit du ET, du OU et du NON.

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 ! ! !

V- LECTURE ET ECRITURE DES VARIABLES

5.1 Lire une variable


Lire une variable est l’opération qui permet à l’utilisateur de rentrer des valeurs au clavier pour
qu’elles soient utilisées par le programme.

5.2 Ecrire une variable


Ecrire une variable est l’opération qui permet au programme de communiquer des valeurs à
l’utilisateur en les affichant à l’écran.

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.

Pour écrire quelque chose à l’écran, c’est aussi simple que :

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é) :

Ecrire "Entrez votre nom : "

Lire NomFamille

Notez qu’il y a une différence majeure entre afficher un libellé et le contenu d’une variable :

Exemple

Variable Bonjour en Caractère Variable Bonjour en Caractère

Début Début

Bonjour  "Ave Cesar" Bonjour  "Ave Cesar"

Ecrire Bonjour Ecrire "Bonjour"

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.

Si booléen Alors Si booléen Alors


Instructions 1 Instructions
Sinon Finsi
Instruction 2
Finsi

Ceci appelle quelques explications.


Un booléen est une expression dont la valeur est VRAI ou FAUX. Cela peut donc être (il n’y a que deux
possibilités) :
 une variable de type booléen
 une condition
Nous reviendrons dans quelques instants sur ce qu’est une condition en informatique.
Toujours est-il que la structure d’un test est relativement claire. Arrivé à la première ligne (Si…Alors) la
machine examine la valeur du booléen. Si ce booléen a pour valeur VRAI, elle exécute la série d’instructions
1. Cette série d’instructions peut être très brève comme très longue, cela n’a aucune importance. A la fin de
cette série d’instructions, au moment où elle arrive au mot " Sinon ", la machine sautera directement à la
première instruction située après le " Finsi ". De même, au cas où le booléen avait comme valeur " Faux ", la
machine saute directement à la première ligne située après le " Sinon " et exécute l’ensemble des
" instructions 2 ".
La forme simplifiée correspond au cas où l’une des deux " branches " du Si est vide. Dès lors, plutôt qu’écrire
" sinon ne rien faire du tout ", il est plus simple de ne rien écrire.

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 :

Allez tout droit jusqu’au prochain carrefour


Si la rue à droite est autorisée à la circulation Alors
Tournez à droite
Avancez
Prenez la deuxième à gauche
Sinon
Continuez jusqu’à la prochaine rue à droite
Prenez cette rue
Prenez la première à droite
Fin si

II- QU’EST CE QU’UNE CONDITION ?

Une condition est une comparaison. Cette définition est essentielle !


C’est-à-dire qu’elle est composée de trois éléments :

 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 :

"t" < "w" VRAI

"Maman" > "Papa" FAUX

"maman" > "Papa" VRAI

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.

 Il faut se méfier un peu plus du OU. Pour que :

Condition1 OU Condition2 soit VRAI


Il suffit que Condition1 soit VRAIE ou que Condition2 soit VRAIE. Le point important est que si Condition1 est
VRAIE et que Condition2 est VRAIE aussi, Condition1 OU Condition2 est VRAIE. Le OU informatique ne veut
donc pas dire " ou bien " (sauf dans certaines formes rares, dénommées OU exclusif et notées XOR).

On représente fréquemment tout ceci dans des tables de vérité :

 L’opérateur NON inverse une condition :

Condition VRAI ó NON(Condition) FAUX

NON ( X> 15 ) revient à écrire X =< 15

IV- TESTS IMBRIQUES

Graphiquement, on peut très facilement représenter un SI comme un aiguillage de chemin de


fer (ou un aiguillage de train électrique, c’est moins lourd à porter). Un SI ouvre donc deux voies,
correspondant à deux traitements différents. Mais il y a des tas de situations où deux voies ne
suffisent pas. Par exemple, un programme devant donner l’état de l’eau selon sa température doit
pouvoir choisir entre trois réponses possibles (solide, liquide ou gazeuse).

18
Exemple

Variable Temp en Entier


Début
Ecrire "Entrez la température de l’eau :"
Lire Temp
Si Temp =< 0 Alors
Ecrire "C’est de la glace"
Finsi
Si Temp> 0 Et Temp < 100 Alors
Ecrire "C’est du liquide"
Finsi
Si Temp > 100 Alors
Ecrire "C’est de la vapeur"
Finsi
Fin

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

Variable Tempen Entier


Début
Ecrire "Entrez la température de l’eau :"
Lire Temp
Si Temp =< 0 Alors
Ecrire "C’est de la glace"
Sinon
Si Temp < 100 Alors
Ecrire "C’est du liquide"
Sinon
Ecrire "C’est de la vapeur"
Finsi
Finsi
Fin

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.

Les structures de tests imbriqués sont donc un outil indispensable à la simplification et à


l’optimisation des algorithmes.

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

Variable Temp en Entier


Variables A, B en Booléen
Début
Ecrire "Entrez la température de l’eau :"
Lire Temp
A Temp =< 0
B Temp < 100
Si A Alors
Ecrire "C’est de la glace"
Sinon
B Alors
Ecrire "C’est du liquide"
Sinon
Ecrire "C’est de la vapeur"
Finsi
Finsi
Fin

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
AX<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 :

Si il fait trop chaud ET il ne pleut pas Alors


Ouvrir la fenêtre
Sinon
Fermer la fenêtre
Finsi

Cette petite règle pourrait tout autant être formulée comme suit :

Si il ne fait pas trop chaud OU il pleut Alors


Fermer la fenêtre
Sinon
Ouvrir la fenêtre
Finsi

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) :

Si A ET B Alors Si NON A OU NON B Alors


Instructions 1 Instructions 2
Sinon Sinon
Instructions 2 Instructions 1
Finsi Finsi

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

Essayons avec un SI et Voyons ce que ça donne :

Variable Rep en Caractère


Ecrire "Voulez vous un café ? (O/N)"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire "Saisie erronnée. Recommencez"
Lire Rep
FinSi C’est impeccable. Du moins tant que l’utilisateur a le bon goût de ne se tromper qu’une seule fois, et
d’entrer une valeur correcte à la deuxième demande. Si l’on veut également bétonner en cas de deuxième
erreur, il faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI, et écrire un algorithme
aussi lourd qu’une blague des Grosses Têtes, on n’en sortira pas, il y aura toujours moyen qu’un acharné
flanque le programme par terre. C’est donc une impasse.

1.1 Une première structure de boucle

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.

1.2 Boucler en comptant, ou compter en bouclant

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 :

Variable Truc en Entier


Truc  0
TantQue Truc< 15
Truc = Truc + 1
Ecrire "Passage numéro : ", Truc
FinTantQue Equivaut à :

Variable Truc en Entier


Pour Truc = 1 à 15
Ecrire "Passage numéro : ", Truc
Truc Suivant Au sens strict, on pourrait donc s’en dispenser, mais c’est tellement agréable de faire moins
d’efforts…

1.3 Des boucles dans des boucles


On rigole, on rigole ! De même que les poupées russes contiennent d’autres poupées russes, de
même qu’une structure SI … ALORS peut contenir d’autres structures SI … ALORS, une boucle peut contenir
d’autres boucles.

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 :

Variables Truc, Trac en Entier


Pour Truc  1 à 15
Ecrire "Il est passé par ici"
Truc Suivant
Pour Trac  1 à 6
Ecrire "Il repassera par là"
Trac Suivant Ici, il y aura quinze écritures consécutives de "il est passé par ici", puis six écritures
consécutives de "il repassera par là" , et ce sera tout. Si des boucles peuvent être imbriquées (cas n°1) ou
successives (cas n°2), elles ne peuvent jamais, au grand jamais, être croisées. Cela n’aurait aucun sens
logique, et de plus, bien peu de langages vous autoriseraient ne serait-ce qu’à écrire cette structure
aberrante.

Variables Truc, Trac en Entier

Pour Truc...
instructions
Pour Trac  ...
instructions
Truc Suivant

instructions
Trac Suivant

1.4 Et encore une tournée générale !

Variable Truc en Entier


Pour Truc  1 à 15
Truc Truc * 2
Ecrire "Passage numéro : ", Truc
Truc Suivant Vous remarquerez que nous faisons ici gérer " en double " la variable Truc, ces deux gestions
étant contradictoires. D’une part, la ligne " Pour… " augmente la valeur de Truc de 1 à chaque passage.
D’autre part la ligne " Truc Truc * 2 " double la valeur de Truc à chaque passage. Il va sans dire que de
telles manipulations perturbent complètement le déroulement normal de la boucle, et sont sources
d’exécutions erratiques. Le gag de la journée : consiste donc à manipuler, au sein d’une boucle Pour, la
variable qui sert de compteur à cette boucle. Cette technique est à proscrire absolument… sauf bien sûr, si
vous cherchez un prétexte pour régaler tout le monde au bistrot. Mais dans ce cas, n’ayez aucune
inhibition, proposez-le directement, pas besoin de prétexte.

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.

II- NOTATION ET UTILISATION ALGORITHMIQUE.


Dans notre exemple, nous créerons donc un tableau appelé Note (ou N, si on veut aller plus vite). Et
chaque note individuelle sera désignée Note(1), Note(2), etc.

Un tableau doit être déclaré comme tel, en précisant le nombre et le type de valeurs qu’il contiendra.

Tableau Note(12) en Entier


On peut créer des tableaux contenant des variables de tous types : tableaux de numériques, bien sûr, mais
aussi tableaux de caractères, de booléens, de tout ce qui existe dans un langage donné comme type de
variables. Par contre, hormis dans quelques rares langages, on ne peut pas faire un mixage de types
différents de valeurs au sein d’un même tableau.

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 :

Tableau Note(12) en Entier


Variables i, Som en Entier
Variable Moy en Réel
...
Som 0
Pour i 1 à 12
Som = Som + Note(i)
iSuivant

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.

La valeur d’un indice doit toujours :

 ê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).

III- TABLEAUX DYNAMIQUES

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 :

Tableau Notes() en Entier


Variable nb en Entier
Début
Ecrire "Combien y a-t-il de notes à saisir ?"
Lire nb
Redim Notes(nb)
...

IV- TRI D’UN TABLEAU


Ce qui suit est incontournable. Combien de fois au cours d’une carrière (brillante) de
développeur a-t-on besoin de ranger des valeurs dans un ordre donné ? C’est incalculable. Aussi,
plutôt qu’avoir à réinventer à chaque fois la roue, le fusil à tirer dans les coins, le fil à couper le
roquefort et la poudre à maquiller, vaut-il mieux avoir assimilé quelques techniques solidement
éprouvées, même si elles paraissent un peu ardues au départ.

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

On commence par rechercher le plus petit élément. On l’identifie en quatrième position, et on


l’échange alors avec l’élément numéro 1.

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

On recommence à partir du troisième, ce qui donnera in fine :

3 12 21 45 122 78 64 53 89 28 84 46

Et cetera, et cetera, jusqu’à l’avant dernier.

L’algorithme permettant d’effectuer cette tâche est le suivant :

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 !

II- TABLEAUX A DEUX DIMENSIONS

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.

Un tel tableau se déclare ainsi :

Tableau Cases(8, 8) en Entier

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.

III- TABLEAUX AN DIMENSIONS

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.

1.2 Les données


a) Les données sont des informations représentées sous une forme conventionnelle, afin de pouvoir être
traitées automatiquement.
b) Une donnée est une information utile à l’exécution d’un traitement
c) Une donnée est un texte saisi informatiquement.
Exemples :
 Les noms et prénoms, le taux horaire de rémunération, le nombre d’heures de travail, le montant des
primes ainsi que celui des indemnités… sont des données pour utiles pour le calcul du salaire d’un
ouvrier.
 Les noms et prénoms, le grade, la fonction, le poste de travail… sont aussi des données à traiter
automatiquement par le responsable de la gestion des ressources humaines dans une entreprise.

1.3 Valeur d’une donnée


a) “Une valeur est un symbole utilisé pour représenter un fait élémentaire”.
b) C’est l’élément d’un ensemble défini d’objets de donnée qui, dans un contexte donné, est considéré
comme variable ou un type de donnée.
Une donnée peut prendre l’une des valeurs suivantes :
 Numérique,
 Alphabétique,
 Alphanumérique.
Exemple : 4 356 ; Nkock Joël Gilbert ; 20 Mai 1972

1.4 Format d’une donnée


Mode de stockage ou d’affichage d’une donnée, qu’il s’agisse d’un fichier, d’un champ de base de
données, d’une cellule d’un tableur ou d’un texte dans un document.

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.

Il existe dix types de données différents dans Access :


a Pièce jointe : Fichiers, tels que des photos numériques. Il est possible de joindre plusieurs fichiers
par enregistrement. Ce type de données n'est pas disponible dans les versions antérieures d'Access.
b NuméroAuto : Nombres générés automatiquement pour chaque enregistrement.
c Monétaire :Valeurs monétaires.
d Date/Heure :Dates et heures.
e Lien hypertexte :Liens hypertexte, tels que les adresses de messagerie.
f Mémo : Blocs de texte longs avec utilisant une mise en forme. Les champs de type Mémo sont
souvent utilisés pour des descriptions de produit détaillées.
g Numérique :Valeurs numériques, telles que des distances. Notez qu'il existe un type de données
distinct pour les valeurs monétaires.
h Objet OLE : Objets OLE, tels que les documents Word.
i Texte : Valeurs alphanumériques courtes, telles qu'un nom de famille ou une adresse postale.
j Oui/Non : Valeurs booléennes.

1.4.2 Longueur d’une donnée


La longueur ou la taille d’une donnée représente le nombre de caractères que comporte cette donnée.
Exemple :l’expression ˝Etablissements scolaires˝ a une taille de 24 caractères

1.5 Dictionnaire des données


Un dictionnaire des données est une collection de métadonnées ou de données de référence
nécessaire à la conception d'une base de données relationnelle. Il revêt une importance stratégique
particulière, car il est le vocabulaire commun de l'organisation. Il décrit des données aussi importantes que les
clients, les nomenclatures de produits et de services, les annuaires, etc. C'est donc le référentiel principal de
l'entreprise, sur lequel s'appuient les décisions de celle-ci. Il est souvent représenté par un tableau à quatre
colonnes contenant le nom, le code et le type de donnée ainsi que des commentaires.
Un dictionnaire des données doit respecter les contraintes suivantes.
 Tous les noms doivent être monovalués et non décomposables.
 Il ne doit pas y avoir d'homonymes, ni de synonymes.
 Les données y sont regroupées par entité.
 Les identifiants sont complètement précisés,
 Les commentaires doivent être pertinents.

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)

Exemple d’une table :


Un champ

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:

2.2 Les requêtes


Les requêtes sont des outils pour interroger la base de données. Autrement dit, ce sont des questions
sur les données enregistrées dans les tables ou des demandes d’exécution d’une action sur des données.
Il existe plusieurs types de requête :
 Les requête de recherche / sélection / Tri
 Les requêtes de mise à jour de champs selon les critères définis,
 Les requêtes de suppression.
On peut exécuter une requête sur le résultat d’une autre requête. Elles peuvent aussi servir à la
création de formulaires et d’état
Exemple :
On souhaite connaître la liste des chansons créées avant 1990.
Dans la table, nous avons toutes les chansons.
La requête permet d’extraire de la table uniquement les chansons qui répondent au critère : Année de
création < 1990.

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

2.4 Les états


Ce sont des objets qui permettent l’édition des informations mises en forme et organisées. Un état
peut être aussi le résultat d’une requête.
2.5 Les macros
Le terme « macro » est une abréviation de « macro – instruction » utilisée dans l’automatisation des
tâches répétitives.
Exemple
 Ouvrir des formulaires,
 Traiter des commandes identiques,
 Imprimer des étiques de publipostage…
 Exporter des tables vers EXCEL…
Pour les macros complexes, on peut utiliser le langage de programmation VBA

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 BD constituent le cœur du système d’information. La conception de ces bases est la


tâche la plus ardue du processus de développement du système d’information.

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.

La modélisation se réalise en trois étapes principales qui correspondent à trois niveaux


d’abstraction différents :

1.1 Modélisation conceptuel

La modélisation est une étape fondamentale de la conception de la BD dans la mesure


où, d’une part, on y détermine le contenu de la BD et, d’autre part, on y définit la nature des
relations entre les concepts principaux.

a) Niveau conceptuel : représente le contenu de la base en termes conceptuels, indépendamment de


toute considération informatique.
b) Niveau logique relationnelle : résulte de la traduction du schéma conceptuel en un schéma propre à
un type de BD.
c) Niveau physique : est utilisé pour décrire les méthodes d’organisation et d’accès aux données de la
base.

1.2 Les éléments de base du modèle ER (Entité-Relation)


(E ou E-A (Entité -Association)
Association)

- 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.

1.3.2 Déterminer les relations entre les entités.


Pour chaque relation :
a) dresser la liste des attributs propres à la relation ;
b) vérifier la dimension (binaire, ternaire, etc.) ;
c) définir les cardinalités.

1 .3.3 Vérifier le schéma obtenu, notamment :


a) supprimer les transitivités ;
b) s’assurer que le schéma est connexe ;
c) s’assurer qu’il répond aux demandes.

1.3.4 Valider avec les utilisateurs.

II EXEMPLE DE REALISATION D’UN SCHEMA CONCEPTUEL

2.1 Détermination d’entité et type d’entité


2.1.1. Une entité :C’est une chose concrète ou abstraite de la réalité perçue à propos de laquelle on veut
conserver des informations.
Exemples: Client, Véhicules, Contrat, Accident …

CLIENT VEHICULE CONTRAT ACCIDENT

Il existe deux types d’entité :


- l’entité régulière dont l’existence ne dépend pas de l’existence d’une autre entité
- l’entité faible dont l’existence ne dépend pas de l’existence d’une autre entité : exemple l’entité contrat

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 …

Le type entité est représenté de la manière suivante :

Enseignant

2.2 Attribut ou propriété des entités


Chaque entité possède des propriétés particulières appelées attributs.
Encore appelé propriété, un attribut est une caractéristique ou une qualité d’une entité ou d’une
association”. Il peut prendre une (ou plusieurs) valeur (s)”.
L’ensemble des valeurs prises par un élément d’une entité s’appelle une occurrence

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 :

Clé Clé Type de Masque de


Champ Taille format indexé
primaire secondaire donnée saisie
Matricule Oui sans
oui non 10 texte
élève doublon
Téléphone non non 10 texte 00/00/00/00 non
Conseil
Parfois, les données contenues dans un champ peuvent s'apparenter à un type de données, alors
qu'elles correspondent à un autre. Par exemple, un champ peut sembler contenir des valeurs numériques
alors qu'il s'agit en fait de valeurs texte, telles que des numéros de chambre. Il est souvent possible d'utiliser
une expression pour comparer ou convertir des valeurs de types de données différents.

2.3 Association (ou relation)

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.

Il existe différents types d'associations:

2.3.1 Cardinalité (1, 1)


A une occurrence de l'entité E1 peut correspondre au plus une occurrence de l'entité E2, et vice versa.
Exemple: l'association "loue" liant deux entités "clients" et "voitures" d'une agence de locations de
voitures,

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

2.3.2 Cardinalité (1, n)


A une occurrence de l'entité E1 peuvent correspondre plusieurs occurrences de l'entité E2,
mais à une occurrence de l'entité E2 peut correspondre au plus une occurrence de l'entité E1.
Exemple: l'association "possède" liant deux entités "clients" et "comptes" d'une banque.

a1 b1
b5
b2
b6
a3 b3
b6
a4 b4

CLIENTS COMPTES
possède

2.3.3 Cardinalité (n, n)


A une occurrence de l'entité E1 peuvent correspondre plusieurs occurrences de l'entité E2, et vice versa.

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

2.4 Identifiant ou clé


Parmi tous les attributs de l’entité, l’identifiant est un attribut ou un ensemble d’attributs permettant de
déterminer une et une seule entité à l’intérieur de l’ensemble. Graphiquement les identifiants sont les attributs
soulignés. L’entité faible aura unn identifiant composé de l’identifiant de l’entité dont elle dépend et d’un autre
attribut.

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.

III NIVEAU LOGIQUE RELATIONNELLE

Il résulte de la traduction du schéma conceptuel en un schéma propre à un type de BD : les entités


du schéma conceptuel sont nt transformées en tableaux à deux dimensions. Le modèle
relationnel s’appui sur trois concepts fondamentaux : le domaine, l’attribut et la relation ou
table.
Le modèle logique des données d "MLD" est directement utilisable pour créer les tables qui
constitueront la structure de votre Base de Données Relationnelle.
Il s'agit pour cela de "mettre à plat" votre MCD, en le transformant en une liste de tables, et de leurs attributs
associés:
nomTable( attribut1 , attribut2 , ... )

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.

DESCRIPTION D’UNE TABLE à DEUX DIMENSIONS D’UNE BASE DE DONNEE

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.

Règles à suivre pour concevoir un schéma relationnel


Les règles principales de transformation d’un schéma conceptuel Entité-Relation
Entité Relation en un schéma relationnel
sont :

39
Règle I : Toute entité est traduite en une table relationnelle dont les caractéristiques sont les suivantes :

 le nom de la table est le nom de l’entité ;


 la clé de la table est l’identifiant de l’entité ;
 les autres attributs de la table forment les autres colonnes de la table.

TRADUCTION DE LA RELATION PLUSIEURS à PLUSIEURS

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

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

Transformer le schéma ER de la gestion de la bibliothèque de l’exercice n°1 en


schéma relationnel.

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

Annexe 5 : Liste des contribuables


Matricule 0124M Annexe 6: Fiche des salaires
Nom OWONA Matricule 0124M Matricule 3210P
Stbm 312005 Stbm 365102
Matricule 0125L Scm 310000 Scm 236400
Nom HELES
Matricule 0125L Matricule 0214N
Matricule 3210P Stbm 327400 Stbm 584000
Nom BIMOU Scm 273613 Scm 325000

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

1° Détermination de la pension vielle (PV)


Non
Scm≤300000 ?

Oui

PV = Scm x 2,8% PV = 300000 x 2,8%


= 8400

1° Détermination du salaire taxable net du mois (Stnm)

Stnm = 70%Stbm – PV – 41667 = K

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

NumTable Nom Code Epreuve Note Coéf Note*Coéf : à déterminer

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

Annexe 6 : Liste des épreuves Annexe 7 : Liste des candidats

Code Epreuve EP1 NumTable 124


Epreuve Gestion Comptable Nom LIBOG Pathé
Coéf 5 Spécialité CG

Code Epreuve EP2 NumTable 125


Epreuve Sciences économiques Nom SOKENG Fabrice
Coéf 2 Spécialité CG

NumTable 126
Nom ONGBAMBOK Nadia
Spécialité CG

46
Annexe 8: Notes des candidats

NumTable 124 NumTable 124


Code Epreuve EP1 Code Epreuve EP2
Note 15 Note 10

NumTable 125 NumTable 125


Code Epreuve EP1 Code Epreuve EP2
Note 08 Note 14

NumTable 126 NumTable 126


Code Epreuve EP1 Code Epreuve EP2
Note 16 Note 12

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

Annexe 5 : Formulaire de saisie


desnotes

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

Annexe 2 : Dictionnaire des données


Champs Type Taille Indexé
de donnée
Nom client Texte 20 Oui – sans doublons
Civilité Texte 15 Non
Ville Texte 25 Non
N° repas NuméroAuto Oui – sans doublons
Date repas Date/Heure Non
Nombre repas Numérique Non
Addition Numérique Non

Annexe 3 : Mouvements de la table CLIENTS


Nom client Civilité Ville
Embolo Valère Monsieur Mbalmayo
Fossi Monsieur Douala
Kesseng Monsieur Bafoussam
Touko Faustin Monsieur Douala
Eboutou Ivan Monsieur Yaoundé
Eboutou Rose Madame Yaoundé

Annexe 4 : Mouvements de la table REPAS


N° repas Nombre repas Addition Nom client
1 01/12/N-1 1 10000 Embolo Valère
2 15/03/N 3 27000 Fossi
3 24/06/N 2 15000 Kesseng
4 13/07/N 1 12000 Touko Faustin
5 09/09/N 3 30000 Eboutou Ivan
6 09/08/N 3 30000 Eboutou Rose
7 09/10/N 5 40000 Eboutou Ivan
8 09/12/N 7 55000 Eboutou Ivan

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.

II- VISUAL BASIC EDITOR (VBE)

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".

Faire un clic sur outil,


en suite sur macro

51
Ecrire le nom de la
macro et faire un
clic sur créer

III- FENETRE CODE


Elle est utilisée pour écrire le programme.

Ecrire le programme ici

IV- CODE VBA


Une procédure ou un programme) est une suite d'instructions effectuant des actions. Elle
commence par Sub + NomDeLaProcédure et se termine par End Sub.

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.

Exemple de Procédure nommée Essai :

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 :

En général, on écrit une instruction par ligne.

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

A l'intérieur de vos procédures, écrivez vos instructions en minuscules, VBE se chargera de


transformer votre code par des majuscules.

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.

4.1 Les objets :


Chaque objet représente un élément de l'application. Sous Excel, un classeur, une feuille de
calcul, une cellule, un bouton, etc ... sont des objets.
Par exemple, Excel représente l'objet Application, Workbook l'objet classeur, Worksheet
l'objet feuille de calcul etc...
Tous les objets de même type forment une collection comme, par exemple, toutes les
feuilles de calcul d'un classeur. Chaque élément est alors identifié par son nom ou par un index.

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")

4.2 Les propriétés :


Une propriété correspond à une particularité de l'objet. La valeur d'une cellule, sa couleur, sa
taille, etc... sont des propriétés de l'objet Range.
Les objets sont séparés de leurs propriétés par un point. On écrira ainsi
Cellule. Propriété=valeur :

'Mettre la valeur 10 dans la cellule A1


Range("A1").Value = 10

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

4.3 Les méthodes:


On peut considérer qu'une méthode est une opération que réalise un objet. Les méthodes
peuvent être considérées comme des verbes tels que ouvrir, fermer, sélectionner, enregistrer,
imprimer, effacer, etc...
Les objets sont séparés de leurs méthodes par un point. Par exemple, pour sélectionner la
feuille de calcul nommé "Feuil2", on écrira :

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.

'Mettre la valeur 10 dans la cellule A1, la police en gras


et en italique et copier la cellule.
With Worksheets("Feuil2").Range("A1")
.Value = 10
.Font.Bold = True
.Font.Italic = True
.Copy
End With

4.4 Les messages VBA

Lors d'une procédure, les messages servent à communiquer avec l'utilisateur.


Il existe des messages qui donnent de l'information et d'autres qui en demandent.

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

Vous pouvez ajouter une icône concernant le type de message à afficher.


Les types d'attribut icône :
Constante : Icône:

vbCritical Pour une erreur fatale

vbExclamation Pour une remarque

vbInformation Pour une information

vbQuestion Pour une question

La syntaxe pour ajouter une icône est MsgBox "Message", attribut icône :

MsgBox "Traitement terminé", vbInformation

Le titre de la fenêtre (Microsoft Excel) peut être changé. La syntaxe est : MsgBox "Message",
attribut icône, "Titre de la fenêtre" :

MsgBox "Traitement terminé", vbInformation, "Mon Programme"

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

La syntaxe est MsgBox ("Message", attribut bouton):

MsgBox ("Voulez-vous continuer ?", vbYesNo)

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.

'Dans la ligne d'instruction suivante, si l'utilisateur


'clique sur le bouton "Oui", Reponse prendra comme valeur
'6 sinon Reponse prendra comme valeur 7.
Reponse = MsgBox ("Voulez-vous continuer ?", vbYesNo)
'La ligne suivante arrête la procédure si l'utilisateur
'clique sur "Non"
If Reponse = 7 Then Exit Sub

4.4.2 Les InputBox


Les InputBox sont des boites de dialogue dans lesquelles l'utilisateur est invité à entrer des
données. La syntaxe est : InputBox ("Message").
InputBox ("Entrez votre nom :")

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"

Application.StatusBar = "Traitement en cours ..."

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

Date Date 8 octets 1er Janvier 100 au 31 décembre 9999


+/-79 228 162 514 264 337 593 543 950 335
sans point décimal
Decimal Decimal 12 octets +/-7,9228162514264337593543950335
avec
28 décimales.
Objet Object 4 octets toute référence à des objets
Chaîne de caractères 10 octets
à longueur variable +
String de 0 à 2 milliards de caractères
longueur
de chaîne
Longueur 1 à 65 400 caractères
Chaîne de caractères
String de la
à longueur
chaîne
fixe
Variant avec chiffres Variant 16 octets Valeur numérique jusqu'au type double.
22 octets Même plage que pour un String de longueur
Variant + variable
avec Variant longueur
caractères de la
chaîne
Défini par Identique au type de données.
Type Variable
l'utilisateur

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 :

Dim Cel1 As Range, Cel2 As Range


Set Cel1 = Range("A1:B1")
Set Cel2 = Workbooks("Classeur2"). _
Worksheets("Feuil3").Range("D5")
Cel1.Copy Cel2
VB vous permet également de changer le format des cellules (polices, couleur, encadrement
...). L'exemple suivant applique la police "courrier" en taille 10, en gras, en italique et de couleur
rouge. Notez l'utilisation du bloc d'instruction With - End With faisant référence à
l'objet Font(police) de l'obljet Cel1
Dim Cel1 As Range
Set Cel1 = Range("A1")
With Cel1.Font
.Bold = True
.Italic = True
.Name = "Courier"
.Size = 10
.Color = RGB(255, 0, 0)
End With
A partir d'une cellule de référence, vous pouvez faire appel aux autres cellules par
l'instruction
"Offset". La syntaxe est Range(Cellule de référence).Offset(Nombre de lignes, Nombre de
colonne).

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.

Dim Note As Integer


Dim Mention As String
Note = Range("A1")
If Note = 0 Then
Mention = "Nul"
ElseIf Note >= 1 And Note <6 Then
Mention = "Moyen"
ElseIf Note >= 6 And Note <11 Then
Mention = "Passable"
ElseIf Note >= 11 And Note <16 Then
Mention = "Bien"
ElseIf Note >= 16 And Note <20 Then
Mention = "Très Bien"
Else
Mention = "Excellent"
End If
Range("B1") = Mention
Dans le cas de conditions multiples, comme dans notre exemple, on préférera le bloc
d'instruction Select Case expression Case valeur expression Case Else End Select.

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.

Pour connaître la note de Paul, on pourrait utiliser :


Dim i As Integer
Dim NbreEleve As Integer, NoteEleve As integer
Dim Cel As Range
'On affecte la cellule "A1" à la variable Cel
Set Cel = Range("A1")
'La derniere ligne - 1 correspond au nombre d'élèves
NbreEleve = Cel.End(Xldown).Row - 1
For i = 1 To NbreEleve
If Cel.Offset(i) = "PAUL" Then
'On récupère la note
NoteEleve = Cel.Offset(i, 1)
'puis on sort de la boucle
Exit For
End If
Next i
Msgbox "La note de Paul est " & NoteEleve

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.

9. Les boucles conditionnelles:

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 :

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 Until Cel.Offset(Compteur) = "ANDRE"
'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
---

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 :

1 – Lancer le tableur Excel (1pt)


2 – Saisir le tableau de souscription des actions nouvelles tel qu’il figure en annexe 1 (4pts)
3 – Introduire en D4 la formule permettant de calculer automatiquement la souscription à titre irréductible
(SATTI) de l’actionnaire ATEBA, puis obtenir par recopie celle des autres actionnaires (4pts).
4 – Compléter automatiquement les cellules E, F, et G en vous servant des formules figurant dans
l’organigramme de l’annexe 2 (4pts)
5 – Représenter un graphique de type histogramme groupé les actions excédentaires à partager (4pts)
6 – Sauvegarder votre travail en lui donnant votre nom (1pt)
7 – Imprimer votre travail (1pt)
8 – Fermer le tableur Excel (1pt)

74
TABLEAU DE SOUSCRIPTION DES 5000 ACTIONS NOUVELLES

SOUSCRIPTIO QUOTE PART DEMANDE


ACTIONS ACTIONS EXCEDENT A
ACTIONNAIRES N A TITRE A TITRE NON
DETENUES DEMANDEES PARTAGER
IRREDUCTIBLE IRREDUCTIBLE SATISFAITE

ATEBA 2 000 1 000


OWONA 1 000 0
DIKANDA 500 200
IROKO 1 500 750
ETOUKE 800 0
FOTSO 1 200 800
MOUSSA 1 000 750
NGUEMBOU 2 000 1 500
TOTAL 10 000 5 000

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?

QPATI = 0 SATI =QPATI

OPATI

EXC = SATI - QPATI

DNS = NDA - QPATI

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.

Annexe I : TABLEAU D’ANALYSE DES OFFRES

78
Annexe 2 : Organigramme d’évaluation des offres
DEBUT

Lire critères A, B, C, D, et PO

1- Calcul de la Note Technique (NT)

NT = Note Critère A + Note Critère B + Note Critère C + Note Critère D

2- Décision relative à la Note Technique


Non Oui
NT < 75 ?

Recevable Irrecevable

3- Extraction des prix des offres recevables (POR)

POR = PO des offres recevables

4- Calcul de la Note Financière (NF)

Oui Non
POR = Min(PORi ; PORn) ?

NF = 100 NF = 100* Min(PORi ; PORn)/POR

5- Calcul de la Note Définitive (ND)


∗ ∗
ND =

Oui
Autre prestataire ?

Non

FIN

79

Vous aimerez peut-être aussi