Vous êtes sur la page 1sur 82

REMY LENTZNER

BIEN DÉBUTER EN PROGRAMMATION


EDITIONS REMYLENT, Paris, 1ère édition, 2021
R.C.S. 399 397 892 Paris
25 rue de la Tour d’Auvergne - 75009 Paris
REMYLENT@GMAIL.COM
www.REMYLENT.FR

ISBN EPUB : 978-2-490275-43-4


Le Code de la propriété intellectuelle interdit les copies ou reproductions destinées à une
utilisation collective. Toute représentation ou reproduction intégrale ou partielle faite par
quelque procédé que ce soit, sans le consentement de l’auteur ou de ses ayants droit ou ayants
cause, est illicite et constitue une contrefaçon, aux termes des articles L.335-2 et suivants du
Code de la propriété intellectuelle.

Couverture : Anna Lentzner - www.lheuredelasieste.fr


Un très grand merci à Raymond, Anne et Isabelle pour la
relecture
Un immense merci à Anna pour la couverture
Dans la même collection
Les tableaux croisés dynamiques avec Excel
Excel, les macros, initiation à VBA
Excel, remise à niveau et perfectionnement
Mieux maîtriser Word
Mieux maîtriser Access
Mieux maîtriser Outlook
Mieux maîtriser PowerPoint
OpenOf ce Writer
OpenOf ce Calc
OpenOf ce Impress
OpenOf ce Base
Les macros avec OpenOf ce CALC
Migration vers Of ce 365
Google Sheets
Google Docs
Google Slides
Google Gmail
Les macros avec Google Sheets
Bien débuter avec HTML
Bien débuter avec JAVASCRIPT
Bien débuter avec PHP et MySQL
Bien débuter avec WordPress
www.REMYLENT.FR
Un très grand merci à Raymond, Anne et Isabelle pour la
relecture
Un immense merci à Anna pour la couverture
INTRODUCTION
Ce livre s’adresse à toutes les personnes qui cherchent à
comprendre comment écrire un programme
informatique. Les informaticiens et informaticiennes
passent beaucoup de temps à réfléchir au déroulement
des actions qu’ils souhaitent automatiser avant de coder
dans un langage spéci que. En réalité, la phase d’écriture
d’un programme est la dernière étape d’un cheminement
intellectuel personnel ou collectif. Avant de coder, il faut
mettre à plat, sur le papier, les différents modules que
contiendra la future application.
Si on analyse le fonctionnement d’un tableur ou d’un
traitement de texte, on comprend assez vite que le
premier sera exclusivement adapté aux nombres et le
deuxième au texte. Les modules qui traiteront les
nombres seront orientés vers le calcul et ceux qui
manipuleront du texte seront portés à bien organiser la
mise en page.Ces applications très complexes comme
Microsoft Excel, Google Sheets, OpenOf ce Calc,
Microsoft Word, Google Docs ou OpenOf ce Writer sont
l’aboutissement d’une collaboration entre des centaines
de programmeurs et programmeuses sur des dizaines
d’années.
Un programme, aussi compliqué soit-il, est toujours une
série de modules de codes que l’on peut utiliser
séparément. Par exemple, dans la messagerie Google
Gmail, lorsque vous décidez de créer un nouveau
message, Gmail va chercher le module qui s’en occupe, le
met en mémoire, l’active et c’est à ce moment là que vous
pouvez saisir vos informations. Et ce principe est
toujours le même. Des fonctions sont disponibles, elles
sont appelées en fournissant un service, puis elles se
terminent, jusqu’au prochain tour. Ecrire des programmes
requiert de la rigueur pour éviter les redondances et les
erreurs. C’est une activité qui peut sembler ardue, mais
au fond elle reste passionnante car elle rend service.
Une approche globale de la programmation nécessite
aussi de s’approprier l’univers de l’ordinateur, son
fonctionnement et un peu de son histoire. C’est en
fouillant le passé qu’on découvre la fantastique évolution
des techniques informatiques, surtout à l’heure d’Internet.
Ce livre est structuré en 4 chapitres.
Le chapitre 1 rappelle quelques notions historiques, décrit
la conception d’un ordinateur et les unités en
informatique, puis rappelle la diversité des langages de
programmation.
Le chapitre 2 détaille la signi cation des algorithmes,
c’est à dire les étapes à penser pour établir une suite de
tâches répétitives. Vous découvrirez la manière d’établir
une recette d’un soufflé au fromage et vous pourrez
comparer deux langages de programmation : Excel VBA
et JavaScript avec Google Sheets. Vous étudierez un tri à
bulles pour une liste de nombres et une recherche d’une
valeur dans un tableau.
Le chapitre 3 reprend en profondeur les notions de
programmation étudiées précédemment, à l’aide de
l’environnement du langage Excel VBA sous Windows.
Vous apprendrez à créer des macros, à manipuler des
variables, des structures de contrôle ainsi que les
fonctions. Vous travaillerez également sur les objets du
tableur Excel.
Le chapitre 4 expose les techniques d’écriture des pages
Internet grâce aux langages HTML et CSS.
J’espère que la lecture de ce livre vous intéressera et
vous permettra de mieux comprendre ce qu’est la
programmation.
N’hésitez pas à me contacter à REMYLENT@GMAIL.COM
ou sur le site www.REMYLENT.FR si vous avez des
remarques sur ce livre ou bien des questions.
Je ne manquerai pas de vous répondre.
Bonne lecture.
L’auteur
TABLE DES MATIÈRES
Chapitre 1
Un peu de recul
1.1 Une lente évolution
1.2 Qu’y-a-t-il dans un ordinateur ?
1.2.1 L’architecture des entrées/sorties
1.2.2 Les unités en informatique
1.2.3 Les langages
1.2.4 HTML
Chapitre 2
L’analyse et les algorithmes
2.1 Penser et analyser avant d’agir
2.1.1 Analyse de la recette du soufflé au fromage
2.1.2 Analyse d’un tri
2.2 Exemples de programmation du tri à bulles
2.2.1 Avec le langage VBA d’Excel
2.2.2 Avec le langage JavaScript de Google Sheets
2.3 Deux algorithmes de recherche de données
2.3.1 La recherche séquentielle
2.3.2 La recherche dichotomique
Chapitre 3
Bien débuter avec
Excel VBA
3.1 L’environnement de développement VBA
3.1.1 Les outils pour manipuler les macros
3.1.2 Le type de fichier XLSM et la sécurité des macros
3.1.3 Utiliser les références relatives
3.2 Gestion des macros
3.2.1 Créer une macro qui vide des cellules
3.2.2 Exécuter une macro
3.2.3 Modifier une macro enregistrée
3.2.4 Le code peut toujours être amélioré
3.2.5 Exécuter une macro à partir d’un bouton poussoir
3.2.6 Apprendre le langage en enregistrant des macros
3.3 VBA est un langage orienté objet
3.3.1 L’explorateur d’objets
3.3.2 Les bibliothèques de composants
3.4 Les procédures
3.4.1 Appel de plusieurs procédures
3.4.2 Eviter les redondances
3.5 Les variables et le débogage
3.5.1 Les types de variables
3.5.2 La portée des variables
3.5.3 Les opérateurs
3.6 Les structures de contrôle
3.6.1 Les structures de branchement
3.6.2 Les structures de boucle
3.7 Les boîtes de dialogue interactives
3.7.1 La fonction MsgBox
3.7.2 La fonction InputBox
3.8 Les fonctions
3.8.1 Syntaxe d’une fonction
3.8.2 Passage de paramètres dans une procédure
3.9 Le débogage
3.9.1 Le mode pas à pas et les points d’arrêt
3.9.2 Réinitialiser le code après un plantage
3.9.3 La fenêtre Espions scrute les variables
3.9.4 La fenêtre Exécution
3.9.5 La fenêtre des variables locales
3.9.6 Le gestionnaire d’erreurs On Error Goto
Chapitre 4
Présentation de HTML
4.1 Un langage de balisage
4.2 HTML est un langage de script
4.3 Les feuilles de styles CSS
4.3.1 Appel d’une feuille de styles
4.3.2 La cascade
4.3.3 L’héritage
Chapitre 1
Un peu de recul
Depuis fort longtemps, les personnes comptent et
calculent de plusieurs manières. D’abord sur les doigts,
ensuite avec des cailloux, plus tard avec des roues et des
engrenages et ainsi de suite jusqu’aux machines à
calculer puis aux ordinateurs mais aussi mentalement et
avec un crayon quand il y a des coupures d’électricité. Ce
chapitre rappelle certaines étapes historiques qui nous
ont menés jusqu’à Internet et au formidable
développement qui s’en est suivi.

1.1 Une lente évolution


On peut imaginer que les hommes et les femmes
préhistoriques comptaient avec les doigts et certaines
parties du corps, comme les phalanges des mains. On
sait par contre, qu’ils entaillaient des traits sur des os ou
du bois, surement pour compter plus facilement le bétail
ou autre chose. Plus tard, les gestionnaires de l’époque
ont amélioré leurs compétences en utilisant des graines,
des coquillages, des boules, des jetons mais surtout des
cailloux qui se dit calculi en latin. Pour pouvoir calculer
rapidement les nombres, nos comptables ont manipulé
pendant plus de 2000 ans des abaques ou tables à
compter. On trouve aussi des bouliers, où les boules
glissent sur un support permettant de trouver plus
facilement des résultats, grâce au système de la retenue.
A partir du 17ème siècle, des machines à calculer ont vu
le jour, comme la Pascaline, la machine arithmétique de
Blaise Pascal créée vers 1642. Le progrès a été
l’utilisation des roues et des engrenages.
Le jeune Pascal a inventé sa machine pour faciliter les
calculs nanciers de son père, collecteur des impôts à
l’époque de Richelieu, en Normandie.

Figure 1.1 : La Pascaline


Dans un tel dispositif, les roues sont numérotées et
reliées les unes aux autres par des engrenages, avec un
mécanisme interne qui bascule la retenue de roue en
roue. D’autres inventions plus complexes ont été créées
par la suite pour faire des multiplications, mais il n’y avait
pas de tâche répétitive dans ce genre de machines.
L’utilisation des cartes perforées dans le métier à tisser
de Joseph-Marie Jacquard a permis de contrôler la
machine pour tisser n’importe quel motif, puisqu’il
suf sait de changer le groupe des cartes.

Figure 1.2 : Des cartes perforées pour la programmation du


métier à tisser
L’idée était de repérer la présence ou l’absence d’un trou à
certains endroits pour transmettre l’information au
dispositif mécanique de traitement des ls. On retrouvera
ce principe de cartes dans les pianos mécaniques,
puisqu’une mélodie pouvait être mémorisée dans des
cartes plus complexes.
Figure 1.3 : Un système de déroulement à carte pour un
piano mécanique
Un trou donne une information ou son absence une
information contraire. C’est donc le principe du “je passe
ou je ne passe pas”. La n du 19ème siècle a été riche en
développements théoriques de cette logique, en
particulier avec Georges BOOLE (1815-1864) professeur
au Queen’s College en Irlande, qui a dé ni une nouvelle
approche logique, fondée sur trois opérateurs OU, ET et
NON. À la question “Est-ce que 1=1 est vrai”, on répond
forcément oui, (true en Anglais). À la question “Est-ce que
3=1 est vrai”, on répond non (ou false). Cette logique
Booléenne permet ainsi de dé nir des états logiques et
des tables de vérité, dé nis dans l’algèbre de BOOLE.

Figure 1.4 : Des tables de vérité


Cette logique binaire (1 ou 0) se retrouve tout
naturellement dans les propriétés du courant électrique,
qui passe ou qui ne passe pas dans un circuit. C’est cette
logique qui sera appliquée aux ordinateurs.
L’histoire de l’informatique montre que l’évolution des
machines ne s’est effectuée que parallèlement à
l’évolution des technologies. En 1946, un énorme
calculateur nommé ENIAC (Electronic Numerical
Integrator and Calculator), à l’université de Pennsylvanie,
réalisait des calculs balistiques pour les militaires. Cette
machine pesait 30 tonnes sur 165 m2.
Figure 1.5 : Le calculateur ENIAC en 1946
Il a fallu beaucoup de temps et d’efforts pour que ces
machines soient aujourd’hui complètement intégrées à
notre environnement, car celles de l’époque n’étaient ni
petites ni puissantes. Comme ces lointains techniciens
du calculateur ENIAC, d’innombrables personnes ont
travaillé extrêmement dur pendant des décennies pour
apprendre des langages informatiques et développer des
applications qui ont permis l’apparition de l’Internet, du
téléphone mobile, des tablettes, des produits Apple ou
Microsoft, de Facebook, de la télévision numérique, des
mails, du GPS, du four à micro ondes et de bien d’autres
dispositifs.

1.2 Qu’y-a-t-il dans un ordinateur ?


Un ordinateur est une machine qui contient des
composants hard et soft, autrement dit, du matériel
physique et des programmes qu’on appelle aussi des
logiciels. Le coeur d’un ordinateur est un
microprocesseur ou CPU, pour Central Processing Unit.
Cette puce électronique est chargée d’exécuter les
traitements arithmétiques et logiques sur des quantités
astronomiques de valeurs binaires 1 et de 0. Par exemple,
lorsque vous appuyez sur une touche de votre clavier, elle
est transformée immédiatement en un code, puis en 1 ou
0. Le microprocesseur ne sait lire que du binaire et c’est
la raison pour laquelle les puces sont créées
physiquement avec des broches qui permettent à
l’information de rentrer et de sortir à une vitesse
extrêmement élevée. Un microprocesseur est capable de
manipuler des millions d’opérations par seconde.

1.2.1 L’architecture des


entrées/sorties
L’architecture des ordinateurs repose sur le modèle dit de
Von Neumann. John Von Neumann (1903-1957) était un
mathématicien américain d’origine hongroise qui travailla
dans le projet ENIAC, puis participa à la création de la
première bombe atomique à Los Alamos. Avec ses
collègues, il eut l’idée de séparer les données proprement
dites (les 1 et les 0 qui forment ensuite des nombres, des
textes, des images, du son, des vidéos, etc.) des
programmes, c’est à dire des instructions qui permettent
de manipuler les données.
Le principal composant d’un ordinateur est la carte mère
qui contient un très grand nombre de puces
électroniques regroupant tous les dispositifs nécessaires
à l’entrée et à la sortie des informations. Par exemple, si
des nombres ou des images doivent être af chés sur
l’écran, on parlera de sortie d’une donnée vers le
périphérique écran de l’ordinateur ou de la tablette tactile.
Une carte mère contient des puces pour la mémoire, une
puce pour le microprocesseur qui manipulera les
milliards d’informations par seconde et bien d’autres
dispositifs qui doivent gérer les périphériques.

Figure 1.6 : Une carte mère


Les périphériques d’entrée d’un ordinateur dépendent du
type de matériel que vous utilisez. La plupart du temps,
vous manipulez un clavier, un scanner, une souris, un
câble d’imprimante, un câble pour le réseau Internet, un
câble électrique et un jack pour les haut- parleurs. Les
grand-mères qui utilisent les tablettes n’ont pas tous ces
périphériques, parce que le mode de communication
entre le processeur et le monde extérieur se fait par
ondes radios qu’on appelle aussi WI-FI ou Wireless File
(protocoles de communication sans l). C’est le même
dispositif que les voiturettes ou les avions
télécommandés, sauf que l’antenne est intégrée dans la
tablette. De même, pour les téléphones mobiles, le
transfert d’informations entre le processeur interne et le
réseau téléphonique s’effectue par ondes radios. Tout
fonctionne très bien, sauf en cas de coupures
d’électricité, par le vent ou par une mauvaise
manipulation d’entretien (dans le cas des travaux
publics).

1.2.2 Les unités en informatique


Notre alphabet comporte 26 lettres mais le langage
informatique ne comprend que deux éléments 0 et 1.

On appelle bit (binary digit) un chiffre 0 ou 1. Un bit


ne propose que deux possibilités.
Un octet (byte en anglais) contient 8 bits, avec
lequel on peut écrire une lettre. Par exemple, A
correspond à 01000001. Un octet permet de
dé nir 28 possibilités de 1 et de 0, c’est à dire
2*2*2*2*2*2*2*2 soit 256 bits. Du coup, avec un
octet, vous pouvez dé nir les 26 lettres de
l’alphabet mais aussi bien autre chose comme les
valeurs numériques, le fait d’être en minuscule ou
en majuscule, les caractères de ponctuation, les
touches de fonctions du clavier, etc. Avec un
groupe d’octets, vous pouvez créer des mots, des
phrases, des livres et en n des histoires.
Un kilo-octet contient 1024 octets soit 1024*8 soit
8192 bits. Il est assez courant de manipuler des
chiers d’une telle taille.
Un méga-octet (Mo) est égal à 1024*1024 octets
soit 1 048 576 octets. C’est le nombre maximal de
lignes que vous pouvez utiliser dans le tableur
Excel. Ce qui nous fait 8 388 608 possibilités de 1
et de 0. Au début de ma carrière de programmeur
en 1986, je travaillais sur une machine IBM  23 de
45cm de haut sur 70 cm de large avec seulement
20 Mo de mémoire et des disquettes de 5 1/4
pouces (15cm de large). Nous écrivions des
programmes de comptabilité et de gestion en
langage BASIC avec très peu de mémoire.
Aujourd’hui, un simple CD a une capacité de 700
Mo.
Un Giga-octet est égal à 1024 *1024*1024 octets
soit un total de 8 589 934 592 bits. Ce chiffre est
encore compréhensible, il est même inférieur au
budget de la France qui est d’environ 1000
milliards d’euros. Un DVD vierge a une capacité
d’environ 4,7 Go. Les clés USB ont maintenant la
capacité du giga-octet.

Figure 1.7 : Un ordinateur avec 20 Mo de mémoire

Un Téra-octet est égal 1024*1024*1024*1024


octets soit 8796093000000 bits. Les ordinateurs
qui gèrent les données dans le Cloud utilisent très
couramment le téra-octet comme capacité de
stockage. On peut acheter des disques durs de 2
téra-octets pour seulement une centaine d’euros.
1.2.3 Les langages
Les ingénieurs du début du XXe siècle ont longtemps
utilisé des cartes perforées pour envoyer des instructions
aux machines qu’ils voulaient contrôler, dans des
programmes de comptabilité ou de gestion ou dans des
processus industriels.
Les actions étaient programmées de manière
séquentielle, c’est-à-dire les unes après les autres, jusqu’à
la n.
Grâce aux progrès fulgurants de l’électronique, dès les
années 50, les cartes perforées ont été remplacées par
des instructions écrites directement dans le langage que
la machine comprenait, c’est-à-dire des 1 et des 0. Ce
langage a été appelé le langage machine. Vous pouvez
imaginer la dif culté d’écrire ce genre de phrase binaire.
Pour que l’ordinateur (et donc le microprocesseur) puisse
exécuter des calculs répétitifs, il fallait vraiment taper au
clavier des 1 et des 0, comme
001001000001110001110000001010, etc.
Très vite, les informaticiens inventèrent une espèce de
langage très pauvre, mais comprenant des mots et des
instructions permettant d’assembler ces horribles suites
de 1 et de 0.
On l’a appelé langage assembleur. Chaque machine
contenait son propre langage assembleur, qui dépendait
du constructeur et surtout du microprocesseur. À chaque
nouvelle puce, de nouvelles instructions étaient rajoutées.
Les ordinateurs de l’époque était plutôt destinés à
l’industrie, à la recherche et aux militaires. Mais toutes les
personnes travaillant dans ces secteurs avaient malgré
tout besoin d’échanger des informations et par
conséquent des programmes.
Le besoin d’un langage plus simple, moins dépendant de
la machine, plus accessible et moins technique se t de
plus en plus sentir. La création de langage de haut niveau
(par opposition au langage de bas niveau du
microprocesseur) et utilisable sur de nombreuses
machines ne pouvait se réaliser qu’avec le
développement et l’accroissement de la capacité
mémoire.
Des langages ont été développés en fonction du métier :
par exemple, dans les années 50-60, pour les calculs
scienti ques imposant des calculs extrêmement précis.
Le langage FORTRAN a été longtemps utilisé, dans la
recherche spatiale ou pour les constructeurs
d’automobiles. Dans la gestion ou la banque, c’est le
COBOL qui a eu la primeur sur les gros systèmes.
D’autres ont vu le jour pendant cette décennie : ALGOL,
APL, SIMULA, C, BASIC, PL/I.
A partir des années 70, le langage SQL s’est imposé
comme langage de requêtes procédurales et pendant la
décennie 80, ce sont des langages comme ADA, C++, Perl
qui ont capté l’attention de la communauté des
informaticiens et des constructeurs.
Puis vint l’Internet à partir des années 90.
Depuis les années 50, la recherche a concentré ses
efforts sur les moyens de transmettre des données, d’un
point à un autre, sans perte d’informations. En 1958, les
laboratoires Bell créent le premier modem (modulateur-
démodulateur) permettant de transmettre des données
binaires sur une simple ligne téléphonique. Par la suite,
dans les années 60 et à cause de la guerre froide, les
militaires américains ont favorisé le développement d’un
réseau global de réseaux (Arpanet) dont l’objectif était de
résister à une attaque nucléaire de la part des Russes. En
1971, plusieurs ordinateurs ont été reliés ensemble sur le
réseau.
Quelques années après, le protocole de communication
TCP/IP ou Transmission Control Protocol/Internet Protocol
a été mis en place et c’est à partir de 1990 que le mot
Internet a été plébiscité et a remplacé le terme Arpanet.
De très nombreux universitaires et étudiants ont
immédiatement réalisé l’intérêt que cela pouvait apporter
pour leur communauté, en terme de partage
d’informations. Depuis ces années, des milliards de sites
Web ont été développés à l’aide des navigateurs Web. On
trouve aujourd’hui des sites scienti ques mais aussi
commerciaux ou simplement d’information.

1.2.4 HTML
Le langage informatique HTML ou HyperText Markup
Language a permis de développer des pages Web, sur la
majeure partie des matériels informatiques, mais
toujours en relation avec un navigateur qu’on appelle
aussi un Browser. HTML est un langage à balises qui
indique à l’ordinateur ce qu’il doit af cher. Par exemple, le
corps de la page Web est dé ni entre les balises <body>
et </body>. Ce marquage par balise est nécessaire parce
que les ordinateurs ignorent si un texte sera un titre, un
en-tête, un paragraphe ou un résumé. Sans codage, le
navigateur Internet ne sait pas af cher le texte pour qu’il
ressemble au document réel souhaité.
Le langage HTML fait une distinction très importante : la
structure des éléments et leur présentation. Lorsque vous
dé nissez un texte qui doit être considéré comme un
titre, avec les balises <title> et </title>, vous ne dites rien
de la présentation. Vous n’indiquez pas si le titre sera
dans une police spéci que avec une taille donnée. Ces
caractéristiques de présentation sont dé nies ailleurs
dans une autre structure qu’on appelle des styles et qui
est dé nie entre les balises <style> et </style>. On parle
souvent de feuilles de style quand les styles sont intégrés
dans un chier externe.
Quand vous naviguez sur Internet, vous tapez une
adresse dans le navigateur pour accéder à une page
précise. Par exemple, si vous souhaitez consulter des
horaires de train en France, vous accédez au portail de la
SNCF. Cette page Web a été créée par des développeurs
et est stockée sur un serveur accessible à tous. La page
possède donc des informations (des données) et une
présentation. Il peut y avoir un menu avec différents
choix, des publicités, des boutons sur lesquels on peut
cliquer pour rechercher des informations.
Au moment de la création de la page Web, les données
sont séparées de la présentation, parce qu’il est plus
facile de faire des mises à jour par la suite.
Cette distinction entre structure et présentation est
importante, parce qu’elle permet aussi la lecture du code
HTML dans un environnement issu de différentes plates-
formes. Par exemple, une page Web peut être lue sur un
Mac, un PC, un système Unix, un système Linux ou
d’autres encore. De même, en ce qui concerne les
navigateurs, vous pouvez travailler avec Google Chrome,
Safari, Opéra, Internet Explorer, Firefox, etc. Les
informations contenues sur les pages Web doivent
pouvoir être af chées quel que soit le support, ce qui
n’était pas toujours le cas dans le passé. Les pages
s’af chaient mal d’un navigateur à l’autre, la présentation
n’était pas parfaite, les pages ne se cadraient pas
automatiquement en fonction de la largeur de l’écran.
Grâce à l’amélioration du langage HTML et des
composants externes qui peuvent s’y rajouter, ces
problèmes techniques sont dé nitivement oubliés et
aujourd’hui, les pages Internet sont présentes sur les
ordinateurs mais aussi sur les tablettes, les iphones et les
smartphones. Le code de la présentation des données
est mieux séparé de celui de la structure. Les pages
HTML sont maintenant plus robustes avec des balises
proposant de nombreuses fonctionnalités.
Le langage HTML est un langage par script, c’est à dire
que vous écrivez les instructions les unes sous les autres,
puis vous testez l’ensemble dans un navigateur pour voir
le résultat.
Vous devez connaître la syntaxe et la grammaire du
langage, mais il faut aussi réfléchir aux différentes étapes
qui vont structurer le code. En d’autres termes, penser
l’architecture d’un programme est un passage obligé,
avant de commencer à écrire des lignes. Bien décrire le
déroulé des algorithmes vous aidera dans la réalisation
de vos applications.
En résumé
L’essor des machines à calculer a été lent et a suivi
l’évolution des technologies. A partir du début du 20ème
siècle, les ordinateurs ont amélioré considérablement le
traitement des tâches répétitives dans tous les
domaines. Le développement de l’Internet a favorisé
considérablement la communication entre tous.
Le prochain chapitre portera sur les méthodes de
conception d’un programme.
Chapitre 2
L’analyse et les algorithmes
Dans ce chapitre, vous étudiez les notions d’analyse et d’algorithme, c’est à dire
l’ensemble des opérations ordonnées qu’il faut mettre en œuvre pour résoudre un
problème spéci que, comme une recette de cuisine, un tri de nombres, un calcul qui se
répète des centaines de fois, un regroupement d’opérations comptables ou encore l’envoi
d’une fusée dans l’espace. Pour aboutir à un résultat, il faut souvent dé nir des étapes qui
font partie d’un processus plus général. Par exemple, les personnes des services
informatiques qui développent des programmes doivent analyser les besoins de leurs
clients. Les ingénieurs des constructeurs d’automobiles sont tenus de dé nir des
procédures de réalisation de chaque partie d’une voiture. Ce travail d’analyse est très
important car il dé nit les éléments d’un ensemble plus global que l’on regroupe dans un
algorithme.

2.1 Penser et analyser avant d’agir


Monsieur Mohammed Ibn Musa Al-Khwarizmi (780-850) était un mathématicien qui
habitait en Perse à Bagdad et qui avait étudié (entre autres choses) une manière de
résoudre les équations du premier et du deuxième degré. Un de ses ouvrages écrit en
arabe a posé les fondements de l’algèbre. Ses écrits ont par la suite été traduits en latin
dans l’Occident du XIIème siècle et son nom est devenu célèbre puisque sa traduction a
donné Al-gorithmi puis Algorithme.

2.1.1 Analyse de la recette du soufflé au fromage


La gure 2.1 montre un soufflé au fromage. Nous allons analyser les différentes étapes
pour le réaliser puis les intégrer dans un algorithme.

Figure 2.1 : Un soufflé au fromage


La réalisation d’un mets ressemble à une certaine forme de programmation, une recette
dans le jargon de la cuisine. Chaque étape est bien déterminée et s’inscrit dans un
processus global, on pourrait dire dans un protocole.
La création d’un soufflé au fromage impose de dé nir deux parties séparées : les
ingrédients et la réalisation technique. On dé nit ainsi deux fonctions : la fonction
INGREDIENT() et la fonction REALISATION().

Si vous devez cuisiner un soufflé pour 8 personnes, ce n’est pas la même chose que pour
24 invités. Il faut prendre en compte le paramétrage du problème, c’est à dire les quantités
d’ingrédients à acheter, le temps de cuisson, la préparation du mets et en n la présence
des invités dès la n de cuisson, car le soufflé retombe très vite dès qu’il sort du four.
La gure 2.2 montre les paramètres du soufflé dans un tableau Excel.
Figure 2.2 : Les ingrédients de la recette
La liste suivante détaille la procédure de réalisation du soufflé.

Véri ez que tous les ingrédients sont disponibles.


Mettez la noix de muscade dans le lait et portez-le à ébullition.
Faites fondre le beurre.
Mettez toute la farine dans un bol.
Placez le beurre fondu dans la farine et remuez a n de bien l’incorporer. Cet
ensemble s’appelle un roux qui est un élément composé en parts égales de beurre
et de farine.
Cuire le roux 2 à 3 minutes à petit feu. Attention à ne pas le faire roussir.
Laissez refroidir le roux.
Faites bouillir le lait.
Hors du feu, versez le lait bouillant sur le roux froid.
Cuisez cette sauce à feu moyen pendant 4 à 5 minutes. Vous obtenez ce qu’on
appelle une sauce béchamel.
Séparez les jaunes des blancs d’œufs.
Ajoutez les jaunes d’œufs à la béchamel et cuisez encore pendant 2 à 3 minutes.
Placez la sauce béchamel dans un récipient et laissez refroidir.
Ajoutez le gruyère rappé. Vous obtenez ce qu’on appelle une sauce Mornay.
Montez les blancs en neige avec une pincée de sel. Les blancs doivent être bien
fermes.
Incorporez à la sauce Mornay un peu de blanc en neige à l’aide d’un fouet. Cette
opération détend la sauce.
Incorporez délicatement le restant des blancs en neige avec une spatule en bois, en
effectuant des mouvements de rotation.
Beurrez et farinez un moule à soufflé ou des ramequins.
Enfournez à four chaud (200°). Laissez cuire 20 minutes environ. Le soufflé se
colore puis gonfle.
Au terme de la cuisson, sortez le mets du four et servez-le immédiatement. Un
soufflé ne peut attendre car en refroidissant, il s’essouffle puis retombe.

La gure 2.3 montre l’algorithme qui reprend les modules du soufflé au fromage.
Figure 2.3 : Les modules

2.1.2 Analyse d’un tri


Trier un groupe de noms (ou de nombres) n’est pas si évident que cela. Votre cerveau
peut trier rapidement un petit groupe d’éléments mais pas une liste de 80 noms.
D’ailleurs, qui a besoin de trier des noms, dans la vie de tous les jours ?
Si vous souhaitez envoyer plusieurs centaines de lettres, la Poste peut vous proposer un
tarif dégressif à la condition que les enveloppes soient triées par code postal. Comme
l’informatique peut vous aider à imprimer des étiquettes autocollantes, il vous suf t de
rentrer les adresses dans le tableur de votre choix (Excel, Calc, Sheets) et de lui demander
de trier toutes les lignes par rapport au code postal, du plus petit au plus grand. Par la
suite, vous utiliserez un traitement de texte qui préparera un modèle de format
d’étiquettes et vous enverrez les données du tableur vers le modèle a n d’imprimer toutes
les étiquettes sur des feuilles A4. Cette façon de faire fonctionne bien et on ne se pose
pas la question de savoir comment le tableur trie des centaines de noms, de la même
manière qu’on ne s’interroge pas sur le fonctionnement interne d’une voiture.
Et si malgré tout, on cherchait à comprendre comment l’ordinateur arrive à trier ?
Quand vous saisissez des données dans le tableur Excel, vous pouvez y entrer des
informations de 1 à 1 048 576 lignes (c’est la limite du moment).
Si vous tentez de trier dans l’ordre alphabétique décroissant une suite de nombres allant
de 1 à 1048576 dans une seule colonne, Excel ne mettra pas plus de 3 secondes (test
avec un ordinateur Mac).
La gure 2.4 montre le début des lignes et le résultat.

Figure 2.4 : Tri de nombres


Quand une application informatique doit trier du texte, l’ordinateur transforme d’abord
tous les caractères alphabétiques en nombres, par exemple, la lettre A est changée en 65,
le B est changé en 66, etc. Le clavier est complètement codi é en fonction d’une norme
internationale appelée ASCII ou American Standard Code for Information Interchange. Ainsi,
quelle que soit la position d’une touche sur un clavier, l’ordinateur pourra la manipuler.
Il existe plusieurs manières de trier des nombres, comme le tri à bulles (bubble sort), le tri
rapide (quick sort) et bien d’autres encore.
Le tri à bulles
Il s’agit d’un algorithme de tri qui consiste à comparer de manière répétitive, les nombres
d’un tableau en les prenant par deux, du début jusqu’à la n. On permute les nombres
lorsqu’ils sont mal triés. Cet algorithme déplace rapidement les plus grands nombres vers
la n du tableau, comme des bulles d’air qui remonteraient vers la surface d’un liquide.
Une fois le plus grand nombre descendu, on recommence l’opération du début jusqu’à la
n -1, puisque le dernier n’est plus à trier.
Le tri à bulles est facile à comprendre.
Prenons 5 nombres et considérons les deux premiers.
Étape 1 : On commence à comparer deux par deux.
( 7 1 9 2 8 ) devient ( 1 7 9 2 8 ) comme 7>1, il y a échange.
( 1 7 9 2 8 ) devient ( 1 7 9 2 8 ) comme 7<9, pas d’échange.
( 1 7 9 2 8 ) devient ( 1 7 2 9 8 ) comme 9>2, il y a échange.
( 1 7 2 9 8 ) devient ( 1 7 2 8 9 ) comme 9>8, il y a échange.
On voit que le plus grand nombre (9) s’est déplacé vers la n.
Étape 2 : On recommence.
( 1 7 2 8 9 ) devient ( 1 7 2 8 9 ) comme 1<7, pas d’échange.
( 1 7 2 8 9 ) devient ( 1 2 7 8 9 ) comme 7>2, il y a échange.
( 1 2 7 8 9 ) devient ( 1 2 7 8 9 ) comme 7<8, pas d’échange.
( 1 2 7 8 9 ) devient ( 1 2 7 8 9 ) comme 8<9, pas d’échange.
Les nombres ont trouvé leur place et le tri est terminé.
Qu’est-ce qu’un indice ?
Un indice est la position d’un nombre dans une liste.
Par exemple, dans le groupe ( 1 7 2 8 9 ), la valeur 1 a pour indice 1, la valeur 7 a pour
indice 2, la valeur 2 a pour indice 3, la valeur 8 a pour indice 4 et en n la valeur 9 a pour
indice 5.
Donc, on peut dire que l’indice varie de 1 à 5. L’avant dernier nombre a pour indice
ledernier-1.
Si on veut décrire ce mécanisme de tri à bulles qui peut s’appliquer sur n’importe quel
tableau de nombres, on écrira la procédure en français de la manière suivante :
pour un indice I allant de la fin du tableau au début
pour un autre_indice J allant de 1 à I - 1
je mémorise la valeur de la cellule correspondant à l’indice J+1
je mémorise la valeur de la cellule correspondant à l’indice J
si la cellule à J+1 < cellule à J alors
on échange les valeurs des deux cellules
fin du si
fin du 1er pour

fin du 2ème pour

Dans cet algorithme, on a deux boucles qui utilisent des indices qu’on appelle plus
communément des pointeurs. A chaque fois qu’on utilise le mot pour, on dé nit une
boucle, c’est à dire un mécanisme de répétition d’instructions. En fonction des langages,
les boucles peuvent s’écrire de manière très différente.
Les pointeurs, les boucles, les fonctions et les procédures seront étudiés plus en
profondeur au chapitre 3.

2.2 Exemples de programmation du tri à bulles


Les exemples suivants de code montrent comment vous pourriez programmer le tri à
bulles avec deux langages différents : VBA du tableur Excel et JavaScript de Google
Sheets.

2.2.1 Avec le langage VBA d’Excel


La gure 2.5 montre les données présentes dans les cellules d’une feuille DATA.

Figure 2.5 : Les valeurs à trier avec Excel


Le programme VBA est le suivant :
Sub TRI_avec_VBA()
With Sheets(“DATA”)
FOR I = 5 To 1 STEP -1
FOR J = 1 To I - 1
‘je mémorise les valeurs
V2 = .Range(“A” & J + 1)
V1 = .Range(“A” & J)
IF V2 < V1 Then
.Range(“A” & J + 1) = V1
.Range(“A” & J) = V2
END IF
NEXT J
NEXT I
End With
End Sub

Le mot sub signi e procédure. Une macro Excel est une procédure c’est à dire une
suite d’instructions qu’Excel va exécuter séquentiellement.
L’expression Sheets(“DATA”) indique la feuille de calcul DATA où se trouvent les
données.
Le mot With permet d’éviter de retaper le nom de la feuille dans le code.
L’instruction Step-1 doit être employée parce qu’on fait évoluer le pointeur de 5 à 1.
L’expression .Range(“A” & J + 1) est équivalente à l’expression
Sheets(“DATA”).Range(“A” & J + 1)
Le mot FOR commence une boucle et se termine par NEXT.
Le mot IF permet de comparer des valeurs ou des variables.

Étudions le même programme en JavaScript adapté au tableur Google Sheets.

2.2.2 Avec le langage JavaScript de Google Sheets


La gure 2.6 montre les mêmes données avec Sheets.

Figure 2.6 : Les données à trier dans Google Sheets


La programmation s’effectue avec le langage JavaScript qui est bien connu de ceux qui
développent des pages Web. En général, JavaScript permet de contrôler les interactions
entre un navigateur Internet et l’utilisateur. Mais il est aussi employé dans les applications
qui fonctionnent dans n’importe quel navigateur, comme Google Sheets, Google Docs,
Google Slides et bien d’autres.
Dans le cas du tableur, JavaScript est capable de reconnaître les lignes, les colonnes, les
feuilles de calcul et les cellules dans lesquelles sont placées les données. Les
programmes s’écrivent dans des fonctions et sont enregistrés dans le Drive, tout comme
la feuille de calcul.
La fonction ci-dessous effectue un tri à bulles sur les données.
function montri_bulle()
{
//je pointe sur le classeur actif
var classeur = SpreadsheetApp.getActiveSpreadsheet()
// je définis une variable feuille qui pointe sur la feuille DATA
var mafeuille = classeur.getSheetByName(“DATA”)
// j’active la feuille
mafeuille.activate()
// je définis deux pointeurs
var I, J
// je définis deux variables
var HAUT,BAS
// je réalise les boucles
// je répète de l’avant dernière ligne à la 1ère
for (I=5;I>=1;I- -)
{
for (J=1;J<=I-1;J++)
{
//je mémorise les valeurs des cellules
HAUT=mafeuille.getRange(J,1).getValues()
BAS=mafeuille.getRange(J+1,1).getValues()
// je teste le contenu des variables et je les change de place si besoin
if(HAUT>BAS)
{
mafeuille.getRange(J+1,1).setValue(HAUT)
mafeuille.getRange(J,1).setValue(BAS)
}
}
}
}

Le mot function commence le programme. On parle de macro commande dans


l’environnement du tableur.
Chaque structure de contrôle contient un bloc d’expressions qui commence par
une accolade ouvrante { et se termine par une accolade fermante }. On aura donc
des accolades après le mot function, après le mot for pour la boucle et après le mot
if qui sert à effectuer un test entre des valeurs.
Chaque variable doit être dé nie par le mot var.
Un commentaire est précédé des signes //.

La gure 2.7 montre deux livres qui peuvent vous aider à aller plus loin dans la
programmation Excel VBA ou JavaScript pour Google Sheets.
Figure 2.7 : Deux livres qui peuvent vous aider

2.3 Deux algorithmes de recherche de données


Avec le tableur Excel, vous pouvez saisir de nombreuses informations dans une ou
plusieurs colonnes, par exemple le nom, le prénom, le poste de travail, le salaire, la date de
naissance, etc. Lorsque vous souhaitez retrouver une information, Excel met à votre
disposition une option qui s’appelle Recherche ou Ctrl F qui est le raccourci clavier. Vous
indiquez ce que vous souhaitez trouver dans une boîte de dialogue, puis vous validez la
recherche.
Si elle est réussie, le pointeur se place immédiatement sur la ligne de la première
occurrence. Vous pouvez, par la suite, vous déplacer sur la deuxième occurrence et ainsi
de suite.
Mais comment cela peut-il fonctionner ? Comment le programme Excel fait-il pour
retrouver une information ?
Il y a de très nombreux algorithmes de recherche d’informations qui ont été développés
depuis de nombreuses années, mais deux sont faciles à comprendre : la recherche
séquentielle et la recherche dichotomique.

2.3.1 La recherche séquentielle


Imaginez que vous vous transformiez en berger ou bergère dans la montagne, avec 100
moutons qui vaquent à leurs occupations et un chien pour les surveiller. A un instant
donné, vous recherchez le mouton malade de la èvre charbonneuse que vous aviez
repéré quelques semaines auparavant. Sa maladie le fait trembler et s’essouffler.
Par quel mécanisme mental, allez-vous trouver votre mouton ?
1. Faisons l’hypothèse que votre troupeau est pratiquement immobile parce que les
moutons broutent.
2. Vous regardez le 1er mouton et vous regardez s’il tremble ?
3. Vous avez donc deux possibilités : oui ou non.
4. Si non, vous passez au deuxième mouton et vous vous reposez la question.
5. Si oui, vous redoublez d’attention pour éviter une erreur.
Cette recherche d’une information, du début jusqu’à la n, s’appelle une recherche
séquentielle. Elle s’arrête quand il n’y a plus de moutons à analyser. La gure 2.8 montre
l’algorithme de recherche séquentielle :
Figure 2.8 : Recherche séquentielle
Du point de vue de la programmation, on a une boucle qui permet de répéter une série
d’instructions avec un test logique. Si le test est positif, alors la boucle s’arrête. Si le test
est négatif, le programme revient au début et la recherche continue. Ce genre de dispositif
assez élémentaire est constamment utilisé dans les navigateurs Internet qui recherchent
une information dans une base de données stockée sur un serveur à distance.
Maintenant, considérez une longue suite de noms de livres, ainsi que des nombres
indiquant pour chacun d’eux le stock en cours. Vous recherchez un livre en utilisant un
programme de recherche séquentielle. Si le programme le trouve, il af chera la valeur du
stock immédiatement.
Sur la gure 2.9, vous voyez les deux colonnes Livres et Stock dans un tableau Excel.

Figure 2.9 : Un tableau avec des noms et des stocks


Pour réaliser un tel programme, vous devrez prendre en considération le début de la liste
qui est xe et la n qui est variable. En effet, de nouveaux livres pourront s’ajouter par la
suite. Il vous faudra rechercher la dernière ligne du tableau par le code. Une fois ces
éléments en main, la boucle de recherche pourra travailler de ligne en ligne, de haut en
bas, et le pointeur sera donc le numéro de ligne.Lorsque le nom du livre est trouvé, vous
pouvez trouver la valeur du stock dans la colonne d’à côté.
La gure 2.10 montre l’algorithme d’une telle recherche. Il est complètement indépendant
du langage utilisé pour programmer. Ainsi, vous pouvez penser d’abord le mécanisme,
puis ensuite écrire les instructions qui manipulent les informations. Si vous employez le
tableur Excel, vous programmerez avec le langage VBA. Si vous travaillez avec Google
Sheets, vous écrirez en JavaScript. Si vous manipulez OpenOf ce CALC, vous utiliserez le
BASIC.

Figure 2.10 : Un algorithme de recherche plus élaboré


Les exemples suivants montrent le programme écrit avec deux différents langages.
Programmation avec Excel VBA
Sub RECHERCHE_LIVRES_AVEC_VBA()
‘je déclare une variable objet qui pointe sur la feuille DATA
Set mafeuille = ActiveWorkbook.Worksheets(“DATA”)
‘je stocke la valeur du livre cherché qui se trouve dans la cellule E2
monlivre = mafeuille.Range(“E2”)
‘je définis deux variables pour les extrémités
Dim ligne_depart, ligne_fin
‘je stocke dans une variable le numéro de la ligne de départ du tableau
ligne_depart = mafeuille.Range(“A3”).Row
‘je recherche la fin du tableau qui peut être variable
‘je vais à la cellule A1048576 et je remonte en faisant un Ctrl flèche haut
ligne_fin = mafeuille.Range(“A1048576”).End(xlUp).Row
‘Je définis une variable pointeur
Dim P
‘je boucle du début à la fin
For P = ligne_depart To ligne_fin
‘je teste si le livre cherché est sur la ligne du tableau
If monlivre = mafeuille.Range(“A” & P) Then
‘je récupère la valeur du stock dans une variable
Dim ST
ST = mafeuille.Range(“B” & P)
‘j’affiche la valeur du stock dans la cellule F6
mafeuille.Range(“E6”) = ST
‘je quitte le programme en sortant de la boucle
Exit Sub
End If
‘je remonte au début de la boucle
Next P
MsgBox “Le livre n’existe pas dans la liste.”
End Sub

Programmation avec JavaScript pour Google Sheets


La gure 2.11 montre le même tableau dans l’environnement du tableur Google Sheets.

Figure 2.11 : Les données dans Google Sheets


Le code suivant montre une programmation de recherche séquentielle en JavaScript
adaptée au tableur.
function recherche_avec_javascript()
{
//je déclare une variable objet qui pointe sur le classeur actif
var classeur = SpreadsheetApp.getActiveSpreadsheet()
// je définis une variable feuille qui pointe sur la feuille DATA
var mafeuille = classeur.getSheetByName(“DATA”)
// j’active la feuille
mafeuille.activate()
//je stocke la valeur du livre cherché qui se trouve dans la cellule E1
var monlivre
monlivre=mafeuille.getRange(“E1”).getValues()
//je définis deux variables pour les extrémités du tableau de livres
var ligne_depart, ligne_fin
//je stocke dans une variable le numéro de la ligne de départ du tableau
ligne_depart = mafeuille.getRange(“A2”).getRow()
//je recherche la fin du tableau qui peut être variable
//je descends à la dernière ligne du tableau
mafeuille.getRange(“A”+mafeuille.getMaxRows()).activate()
//je remonte comme si je faisais un ctrl flèche haut
mafeuille.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.UP).activate()
//je stocke le numéro de la ligne
ligne_fin=mafeuille.getCurrentCell().getRow()
//j’affiche le numéro de la derniere ligne pour contrôle
var P
//je boucle du début à la fin
for (P=ligne_depart;P<=ligne_fin;P++)
{
//je teste si le livre cherché est sur la ligne du tableau
var recup
recup=mafeuille.getRange(“A” + P).getValue()
if (monlivre == recup)
{
//je récupère la valeur du stock dans une variable ST
var ST
ST = mafeuille.getRange(“B” + P).getValues()
//j’affiche la valeur du stock dans la cellule E3
mafeuille.getRange(“E3”).setValue(ST)
//je place le pointeur sur la cellule E3
mafeuille.getRange(“A1”).activate()
//je quitte le programme en sortant de la boucle
return
}
//je remonte au début de la boucle
}
Browser.msgBox(“Le livre n’existe pas dans la liste.”)
// fin de la fonction
}

2.3.2 La recherche dichotomique


Reprenons l’exemple des moutons dans la montagne (page  35) dans lequel vous
cherchez votre animal malade. Au lieu de les tester un par un, considérez l’ensemble du
troupeau puis coupez-le en deux avec une ligne imaginaire (deux en grec se dit dikha).
Regardez si le mouton se trouve sur cette ligne. Si c’est le cas, vous arrêtez la recherche.
Si non, prenez chaque partie du troupeau à gauche et à droite et recoupez-les en deux
(couper en grec se dit tomos). Regardez de nouveau la ligne imaginaire de chaque partie
et continuez les comparaisons.
Cette manière de diviser les éléments à rechercher s’appelle une recherche dichotomique
(dikha tomos).
En informatique, on applique cette méthode dans le cas où des nombres sont déjà triés,
parce que cela accélère considérablement la recherche dans des listes qui peuvent être
très importantes.
L’idée est donc de réduire en deux parties l’espace de recherche à chaque étape.
Voici un exemple d’algorithme pour cette recherche dichotomique

1. Repérer la position du début de la liste.


2. Repérer la position du dernier de la liste.
3. Calculer le milieu de la liste.
4. Tester si la position du début de la liste est égale à celle de la n de la liste. Si c’est
oui, le programme s’arrête et si c’est non, on continue.
5. Tester si la valeur cherchée est inférieure à celle du milieu.
6. Si c’est oui, reprendre la liste des nombres du début jusqu’au milieu - 1.
7. Si c’est non, reprendre la liste des nombres du milieu jusqu’à la n.
8. Recommencer la séquence.

Exemple pas à pas


Voici un exemple de recherche d’une valeur dans une liste de nombres triés.
34 36 43 50 60 61 70 500 530 590 600 612 700 900
Je recherche le nombre 50.
Je repère d’abord la position du premier nombre dans la liste :
Pos gauche=1
Je repère ensuite la position du dernier :
Pos droite = 14
Je teste si la Pos gauche = Pos droite :
Si oui, c’est trouvé, le programme s’arrête, sinon, on continue
Je calcule la position du milieu :
milieu = partie entière de (pos gauche + pos droite) /2
donc milieu = (1+14)/2 =partie entière (7,5) = 7
Je teste la valeur cherchée avec le nombre correspondant au milieu :
Est-ce que 50 <= 70 (inférieur ou égal) ?
La réponse est oui.
Je recommence la séquence avec une nouvelle liste de nombres dans la partie gauche de
la liste, sans prendre le milieu.
34 36 43 50 60 61
Je repère d’abord la position du premier :
Pos gauche=1
Je repère ensuite la position du dernier :
Pos droite = 6
Je teste si la Pos gauche = Pos droite :
Si oui, c’est trouvé, le programme s’arrête, sinon, on continue
Je calcule la position du milieu :
milieu = partie entière de (pos gauche + pos droite) /2
donc milieu = (1+6)/2 =partie entière (3,5) = 3
Je teste la valeur cherchée avec le nombre correspondant au milieu :
Est-ce que 50 <= 43 ?
La réponse est non.
Je recommence la séquence avec une nouvelle liste de nombres dans la partie droite de
la liste sans prendre le milieu.
50 60 61
Je repère d’abord la position du premier :
Pos gauche=1
Je repère ensuite la position du dernier :
Pos droite = 3
Je teste si la Pos gauche = Pos droite :
Si oui, c’est trouvé, le programme s’arrête, sinon, on continue
Je calcule la position du milieu :
milieu = partie entière de (pos gauche + pos droite) /2
donc milieu = (1+3)/2 =partie entière (4) = 2
Je teste la valeur cherchée avec le nombre correspondant au milieu :
Est-ce que 50 <= 60 ?
La réponse est oui.
Je recommence la séquence avec une nouvelle liste de nombres dans la partie gauche de
la liste sans prendre le milieu.
50 60
Je repère d’abord la position du premier :
Pos gauche=1
Je repère ensuite la position du dernier :
Pos droite = 2
Je teste si la Pos gauche = Pos droite :
Si oui, c’est trouvé, le programme s’arrête, sinon, on continue
Je calcule la position du milieu :
milieu = partie entière de (pos gauche + pos droite) /2
donc milieu = (1+2)/2 =partie entière (1,5) = 1
Je teste la valeur cherchée avec le nombre correspondant au milieu :
Est-ce que 50 <= 50 ?
La réponse est oui
Je recommence la séquence avec une nouvelle liste de nombres dans la partie gauche de
la liste sans prendre le milieu.
50
Je repère d’abord la position du premier :
Pos gauche=1
Je repère ensuite la position du dernier :
Pos droite = 1
Je teste si la Pos gauche = Pos droite :
Si oui, c’est trouvé, le programme s’arrête, sinon, on continue
Le programme s’arrête.
Et en mathématique ?
Mathématiquement, la recherche d’une valeur dans un tableau de N éléments nécessite
Log2(N) comparaisons.

pour un tableau de 22 nombres, il faudra Log2(22)=4 comparaisons.


pour un tableau de 100 nombres, il faudra Log2(100)=6 comparaisons.
pour un tableau de 10 000 nombres, il faudra Log2(10000)=13 comparaisons.
pour un tableau de 1 000 000 nombres, il faudraLog2(1000000)=19 comparaisons.
etc

Conclusion : la recherche dichotomique est bien plus ef cace que la recherche


séquentielle.
Programmation en Excel VBA
La gure 2.12 montre les données et le code à rechercher en appliquant une recherche
dichotomique.

Figure 2.12 : Les données


Sub RECH_DICHO_avec_VBA()
‘je déclare une variable objet qui pointe sur la feuille DATA
Set mafeuille = ActiveWorkbook.Worksheets(“DATA”)
‘je vide le résultat
mafeuille.Range(“E2”).ClearContents
‘je stocke la valeur du code qui se trouve dans la cellule D2
code = mafeuille.Range(“D2”)
‘je définis deux variables pour les extrémités
Dim ligne_depart, ligne_fin
‘je stocke dans une variable le numéro de la ligne de départ du tableau
premier = mafeuille.Range(“A1”).Row
ligne_depart = premier
‘je recherche la fin du tableau qui peut être variable
‘je vais à la cellule A1048576 et je remonte en faisant un Ctrl flèche haut
dernier = mafeuille.Range(“A1048576”).End(xlUp).Row
ligne_fin = dernier
‘Je définis une variable pour le milieu
‘je boucle : tant que debut<fin
Do While ligne_depart < ligne_fin And (ligne_fin - ligne_depart) > 1
‘je définis le milieu en prenant la partie entière sans arrondir
m = Fix((ligne_depart + ligne_fin) / 2)
‘je teste si la valeur du milieu est égale à la valeur dans D2
If mafeuille.Range(“A” & m) = mafeuille.Range(“D2”) Then
‘je place la valeur trouvée dans E2
mafeuille.Range(“E2”) = mafeuille.Range(“B” & m)
‘je sors de la procédure
Exit Sub
End If
‘je teste si la valeur du milieu est supérieure à la valeur dans D2
If mafeuille.Range(“A” & m) > mafeuille.Range(“D2”) Then
‘la position finale devient le milieu
ligne_fin = m
End If
‘je teste si la valeur du milieu est inférieure à la valeur dans D2
If mafeuille.Range(“A” & m) < mafeuille.Range(“D2”) Then
‘le milieu devient la position de départ
ligne_depart = m
End If
Loop
‘je teste le dernier
If ligne_depart = dernier - 1 Then
mafeuille.Range(“E2”) = mafeuille.Range(“B” & dernier)
End If
‘je teste le premier
If ligne_fin = premier + 1 Then
mafeuille.Range(“E2”) = mafeuille.Range(“B” & premier)
End If
End Sub

Programmation en JavaScript pour Google Sheets


function RECH_DICHO_avec_JavaScript()
{
//je déclare une variable objet qui pointe sur le classeur
var classeur = SpreadsheetApp.getActiveSpreadsheet()
// je définis une variable qui pointe sur la feuille DATA
var mafeuille = classeur.getSheetByName(“DATA”)
// j’active la feuille
mafeuille.activate()
//je vide le résultat
mafeuille.getRange(“E2”).setValue(””)
//je stocke la valeur du code recherché qui se trouve dans la cellule D2
code = mafeuille.getRange(“D2”).getValues()
//je définis deux variables pour les extrémités
var ligne_depart, ligne_fin
//je stocke dans une variable le numéro de la ligne de départ du tableau
var premier
premier= mafeuille.getRange(“A1”).getRow()
var ligne_depart = premier
//je recherche la fin du tableau qui peut être variable
//je descends à la dernière ligne du tableau
mafeuille.getRange(“A”+mafeuille.getMaxRows()).activate()
//je remonte comme si je faisais un ctrl flèche haut
mafeuille.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.UP).activate()
//je stocke le numéro de la ligne
dernier=mafeuille.getCurrentCell().getRow()
var ligne_fin=dernier
//je boucle
while ((ligne_depart < ligne_fin) && ((ligne_fin - ligne_depart) > 1))
{
//je définis le milieu en prenant la partie entière sans arrondir
m = Math.trunc((ligne_depart + ligne_fin) / 2)
//je teste si la valeur du milieu est égale à la valeur dans D2
if (mafeuille.getRange(“A” + m).getValues() == mafeuille.getRange(“D2”).getValues())
{
//je place la valeur trouvée dans E2
mafeuille.getRange(“E2”).setValue(mafeuille.getRange(“B” + m).getValues())
//je sors de la procédure
return
}// fin du si
//je teste si la valeur du milieu est supérieure à la valeur dans D2
if (mafeuille.getRange(“A” + m).getValues() > mafeuille.getRange(“D2”).getValues())
{
//la position finale devient le milieu
ligne_fin = m
mafeuille.getRange(“E6”).setValue(ligne_fin)
}//fin du si
//je teste si la valeur du milieu est inférieure à la valeur dans D2
if (mafeuille.getRange(“A” + m).getValues() < mafeuille.getRange(“D2”).getValues())
{
//le milieu devient la position de départ
ligne_depart = m
mafeuille.getRange(“E5”).setValue(ligne_depart)
}// fin du si
} // fin de la boucle
//je teste le dernier
if (ligne_depart == dernier - 1)
{
mafeuille.getRange(“E2”).setValue(mafeuille.getRange(“B” + dernier).getValues())
}
//je teste le premier
if (ligne_fin == premier + 1)
{
mafeuille.getRange(“E2”).setValue(mafeuille.Range(“B” + premier).getValues())
}
}

En résumé
Avant de programmer une série d’actions répétitives, il faut écrire les différentes étapes en
français, puis écrire l’algorithme qui permet une vision intellectuelle claire du programme.
Le langage utilisé dépend de la plate-forme sur laquelle les données sont stockées.
Le chapitre 3 revient sur le langage VBA avec les notions de variables, de procédures, de
fonctions et de boucles, tout en détaillant les objets qu’on utilise dans le tableur Excel.
Chapitre 3
Bien débuter avec
Excel VBA
Ce chapitre reprend plus en profondeur les notions de programmation étudiées
précédemment. Vous découvrirez l’environnement de travail du langage VBA, vous
apprendrez à créer des macros, à manipuler des variables, des structures de contrôle ainsi
que des fonctions. Vous travaillerez également sur les objets du tableur. La version utilisée
dans ce chapitre est Excel 2019 sous Windows.

3.1 L’environnement de développement VBA


Un programme VBA permet d’automatiser des tâches répétitives. Dans le tableur Excel, on
parle plus communément de macros ou de macro-commandes. Par exemple, pour faire une
facture à partir de plusieurs éléments présents dans une feuille de calcul, on peut
développer un programme qui prendra les éléments de la facture puis qui les formatera
correctement avant l’impression. On pourrait même créer une macro qui crée un chier PDF
dans un dossier particulier si on ne souhaite pas imprimer.
La première chose à faire pour créer une macro est d’af cher l’environnement de
développement, car il n’est pas installé par défaut.

Fichier / Options / Personnaliser le ruban.


Cochez la case Développeur à droite dans la boîte de dialogue.
Terminez par le bouton OK.

Constatez l’apparition du nouveau menu comme le montre la gure 3.1 ci-dessous.

Figure 3.1 : Le menu développeur


Le menu Développeur est structuré en plusieurs parties. La première, à gauche de l’écran,
concerne la gestion des macros. La deuxième partie, au centre, permet de gérer les
compléments dans Excel. Un complément est un groupe de fonctions ou d’applications
extérieures que l’on peut programmer ou insérer dans le tableur. Par exemple, dans la
dernière version d’Excel, le complément Cartes Bing de Microsoft facilite l’ajout de valeurs
numériques sous forme graphique sur une carte du monde.
La troisième partie (bouton Insérer) s’intéresse aux contrôles que l’on peut insérer dans les
feuilles de calcul ou bien dans les formulaires utilisateurs appelés UserForm. Il s’agit
essentiellement de cases à cocher, de boutons d’options, de listes modi ables et de bien
d’autres dispositifs qui sont programmables. Les contrôles de formulaires sont plutôt
simples à utiliser, mais pauvres en propriétés. Les contrôles ActiveX (norme Microsoft pour
les objets) sont riches en propriétés et programmables par le langage Visual Basic pour
Excel.
En n, la dernière partie (à droite du menu) gère les dispositifs qui permettent de contrôler
des documents dynamiques en relation avec un flux de travail. En d’autres termes, vous
gérez des données de l’extérieur (des informations boursières par exemple) qui arrivent en
flux et que vous souhaitez intégrer dans Excel en continu. Cette mise en place s’effectue par
l’intermédiaire du langage XML et par l’insertion d’un kit d’extension XML. Pour dire les
choses autrement, il s’agit de développer des applications qui mélangent du VBA avec des
balises HTML, à l’intérieur d’une structure XML.
3.1.1 Les outils pour manipuler les macros
Plusieurs outils du menu Développeur vous permettent de gérer très facilement la création,
la modi cation et la suppression des macros.

L’icône Visual Basic vous permet d’accéder à l’environnement de développement


intégré du langage VBA. C’est ici que vous manipulerez le code écrit
automatiquement par l’enregistreur de macros. En cliquant sur cette icône, vous
faites apparaître une fenêtre coupée en deux, la partie gauche proposant une liste de
feuilles qui représente le projet VBA, avec des propriétés situées dans la partie
inférieure. La partie droite de la fenêtre peut être vide ou bien comporter des lignes de
code. C’est dans cet environnement que l’on programme des applications qui
interfèrent directement avec les données présentes dans les feuilles de calcul. Quand
vous fermez cette fenêtre, vous revenez immédiatement dans l’environnement
d’Excel.
On peut basculer d’Excel à VBA, et réciproquement, par la composition des touches
ALT F11.
L’icône Macros fait apparaître une boîte de dialogue qui af che les macros déjà
créées. Le bouton Exécuter lance tout simplement les instructions stockées dans une
macro pré-enregistrée. Le bouton Pas à pas détaillé ouvre l’environnement de
développement intégré et af che une surbrillance en jaune sur la première instruction
de la macro. Utilisez la touche F8 pour exécuter la ligne suivante. Cette opération
exécute le code en pas à pas, c’est à dire ligne par ligne. On dit que la macro se trouve
en mode débogage. Une macro est en réalité une procédure, c’est-à-dire des lignes de
code stockées entre les mots Sub et End Sub.
Le bouton Modi er ouvre la procédure que vous pouvez changer à cet emplacement.
Le bouton Supprimer supprime la macro. Le bouton Options vous permet de dé nir
une touche de raccourci qui exécutera la macro à partir du clavier.
Le lien Enregistrer une macro ouvre une boîte de dialogue très importante. Vous devez
indiquer un nom de macro en respectant certaines règles. Il est interdit de placer des
espaces dans le nom. Préférez les noms simples et explicites. Ne commencez pas le
nom par un chiffre. Une macro est une procédure qui commence par le mot Sub et se
termine par le mot End Sub. Vous pouvez également indiquer une touche de
raccourci. La liste modi able Enregistrer la macro dans vous permet de stocker vos
futures instructions soit dans le classeur en cours, soit dans un classeur de macros
personnelles, soit dans un nouveau classeur.
Un classeur de macros personnelles est un classeur spéci que PERSONAL.XLSB qui
est une sorte de conteneur public de macros. Il est caché par défaut à l’ouverture
d’Excel. Les macros qu’il contient sont accessibles à partir de n’importe quel classeur
ouvert. Il est généralement stocké dans le répertoire XLSTART qui permet de démarrer
automatiquement des classeurs dès le démarrage d’Excel. La position de ce dossier
XLSTART varie en fonction des versions d’Excel.
Si vous enregistrez une macro dans ce classeur PERSONAL.XLSB, Excel le créera
automatiquement la première fois. Il est aussi possible de le rendre visible par la
commande Af chage/Af cher. Les macros (ou procédures) sont visibles dans
l’environnement de développement au sein du projet VBAProject (Personal.XLSB). Pour
supprimer ce classeur de macros personnelles, il faut  : fermer Excel, trouver le
répertoire XLSTART, puis le supprimer à la main. Pour résumer, si vous avez besoin
d’une macro qui doit être disponible pour plusieurs classeurs, stockez-la dans le
classeur de macros personnelles.
En général, les macros sont stockées dans un conteneur de macros qu’on appelle
Module. Excel stocke les macros au fur et à mesure dans les modules. Un numéro est
donné aux différents modules, comme Module1, Module2, etc.
3.1.2 Le type de fichier XLSM et la sécurité des macros
Pour développer des macros dans Excel, vous devez enregistrer le classeur avec un format
spéci que XLSM, c’est à dire un classeur prenant en charge les macros. Par défaut, lorsque
vous enregistrez un classeur, le type de format est XLSX. Ce format a été mis en place à
partir de la version Excel 2007. Pour les versions précédentes, le format était .XLS. Si vous
développez des macros dans un classeur de type XLSX, au moment de l’enregistrement du
classeur, Excel vous demandera de l’enregistrer dans le format adéquat.
D’une manière générale, les macros sont désactivées par souci de sécurité et vous ne
pouvez pas les créer sans modi er un paramètre particulier. Pour permettre la création
d’une macro, cliquez sur le petit triangle jaune (Sécurité des macros) dans le menu
Développeur, vous ferez apparaître alors la boîte de dialogue Centre de gestion de la
con dentialité. Cliquez ensuite sur le lien Paramètres des macros, vous verrez quatre
paramètres décrits dans la liste ci-dessous :

Désactivez toutes les macros sans noti cation. Les macros et les alertes de sécurité
associées aux macros ne fonctionnent pas.
Désactivez toutes les macros avec noti cation. Les macros sont désactivées, mais les
alertes de sécurité s’af chent si des macros sont présentes.
Désactivez toutes les macros à l’exception des macros signées numériquement. Si une
macro est signée numériquement par un éditeur approuvé, elle est exécutée.
Activer toutes les macros (non recommandé : risque d’exécution de code potentiellement
dangereux). Toutes les macros s’exécutent.
Accès approuvé au modèle d’objet du projet VBA. Vous pouvez interdire ou non l’accès
au modèle objet. Ce paramètre est utilisé pour rendre plus dif cile l’accès à VBA.

Une macro est un dispositif qui automatise des tâches fréquemment utilisées. Le code se
trouve, la plupart du temps, au sein d’une procédure Sub, mais on utilise aussi des fonctions
appelées Function qui peuvent aussi stocker du code. Dans le cadre des exemples de ce
chapitre, choisissez le paramètre Activer toutes les macros et cochez Accès approuvé au
modèle d’objet du projet VBA.

3.1.3 Utiliser les références relatives


Lorsque vous enregistrez les tâches à répéter à partir du clavier ou de la souris, vous placez
votre pointeur à un endroit précis. Cette position est mémorisée par la macro, et par défaut
considérée comme absolue. En d’autres termes, lorsque vous exécuterez la macro, l’action
démarrera à partir de cette position initiale, même si le pointeur se trouve ailleurs au
moment de l’exécution. Vous pouvez proposer à Excel d’effectuer les commandes à partir
de la position relative du pointeur grâce au paramètre Utiliser les références relatives du menu
Développeur. Ce paramétrage enregistre alors d’autres instructions.
Avant de rentrer dans la mécanique de création des macros, voici un exemple de code VBA
qui effectue une action de recopie de cellules, d’un emplacement vers un autre. On tente de
recopier le contenu des cellules A1:C1 vers la cellule F1.
A) Si on utilise des références absolues, on écrira le code suivant.
Sub ABSOLU()
‘Je sélectionne le groupe de cellules de A1 à C1
Range(“A1:C1”).Select
‘Je copie en mémoire
Selection.Copy
‘Je sélectionne la cellule de réception
Range(“F1”).Select
‘Je colle
ActiveSheet.Paste
‘j’active une autre cellule
Range(“F4”).Activate
End Sub

Quelle que soit la position du pointeur au moment où cette macro est exécutée, le groupe
de cellules A1:C1 sera recopié vers la cellule F1.
B) Si on utilise des références relatives, le code sera différent et le résultat de la copie
dépendra de la position du pointeur au moment de l’exécution du code.
Sub RELATIVE()
‘je sélectionne le groupe de cellules A1:C1
Range(“A1:C1”).Copy
‘je sélectionne la cellule active
ActiveCell.Select
‘je colle
ActiveSheet.Paste
End Sub

L’instruction ActiveCell.Select indique à VBA de sélectionner la cellule active. ActiveCell est un


objet et Select est un verbe d’action, qu’on appelle aussi une méthode. Le point entre les
deux mots sert à les relier. On dit que VBA est un langage orienté objet et à point.
Cette notion de position relative est intéressante, parce qu’elle permet de lancer un
programme qui prend en compte des cellules dé nies par l’utilisateur. Par exemple, si vous
souhaitez imprimer une facture, vous sélectionnez les lignes qui correspondent à cette
facture et la macro les place automatiquement à la bonne place dans le format prêt à
imprimer.
Voyons maintenant comment créer une macro à partir du menu Développeur.

3.2 Gestion des macros


Une macro est un enregistrement de tâches effectuées, soit au clavier, soit avec la souris
soit avec la voix pour les systèmes d’exploitation qui reconnaissent la dictée vocale. Tout
est mémorisé, même les erreurs de frappe, il faut donc réfléchir avant de démarrer
l’enregistrement à partir du menu Développeur. Une fois les tâches enregistrées, on arrête le
dispositif, puis on exécute la séquence. S’il est nécessaire de modi er les tâches, un bouton
Modi er permet d’accéder à l’environnement de développement VBA où le code a été stocké
dans un module. Excel écrit toujours le code VBA des macros enregistrées dans un module,
c’est à dire un conteneur de procédures.

3.2.1 Créer une macro qui vide des cellules


La gure 3.2 montre un formulaire dans une feuille de calcul.

Figure 3.2 : Un formulaire à réinitialiser


La liste suivante détaille les différentes étapes qui vous permettent de créer une macro dont
l’objectif est de vider des cellules déjà remplies.

Créez un nouveau classeur.


Enregistrez-le avec le type XLSM (Classeur prenant en charge les macros), par exemple
nommez-le M_VIDE.XLSM.
Sélectionnez le menu Développeur.
Cliquez sur le lien Enregistrer une macro.
Renseignez un nom de macro mais ne mettez pas d’espace dans le nom. Par
exemple, vous pouvez appeler la macro VIDE.
Indiquez une touche de raccourci, par exemple la lettre m en minuscule.
Enregistrez la macro dans Ce classeur et non pas dans le Classeur de macros
personnelles (qui crée un classeur invisible en arrière- plan, ouvert systématiquement
lors de l’ouverture d’Excel.) Dans l’exemple, vous stockez la macro VIDE dans Ce
classeur.
Vous pouvez indiquer une description facultative.
Terminez par le bouton OK.
Effacez les zones de saisie une par une.
Sélectionnez ensuite le menu Développeur.
Cliquez sur le lien Arrêter l’enregistrement.

Remettez des valeurs dans les zones de saisie. Vous allez maintenant exécuter la macro
VIDE.

3.2.2 Exécuter une macro


Pour exécuter la macro, suivez les commandes suivantes :

Sélectionnez le menu Développeur.


Cliquez sur le bouton Macros.
Dans la boîte de dialogue qui apparaît, sélectionnez la macro VIDE puis cliquez sur le
bouton Exécuter. Vous constaterez que les zones saisies disparaissent
immédiatement.

En cas d’erreur, vous pouvez recommencer la création de la macro en indiquant le même


nom de macro. Excel vous demandera alors de con rmer le remplacement. Pour exécuter
la macro à partir des touches de raccourci (dé nies dans la boîte de dialogue) enfoncez les
touches CTRL m. Vous pouvez créer, exécuter, modi er et supprimer autant de macros que
vous le désirez.

3.2.3 Modifier une macro enregistrée


Une fois la macro effectuée, vous pouvez voir son contenu ou encore le modi er. La macro
est stockée dans un module au sein de l’environnement de développement intégré de VBA.
Pour modi er une macro, effectuez les opérations suivantes :

Sélectionnez le menu Développeur.


Cliquez sur le bouton Macros.
Sélectionnez la macro que vous souhaitez modi er.
Cliquez sur le bouton Modi er. Excel ouvre une fenêtre spéci que qu’on appelle
Environnement de développement intégré. C’est à cet endroit qu’on modi e les macros
dans les procédures.

La gure 3.3 montre le contenu de cette fenêtre qui est, par défaut, scindée en deux parties.
La partie gauche présente le projet VBA avec l’af chage des noms de feuilles de calcul du
classeur ainsi que les différents modules.
Figure 3.3 : L’environnement de développement
Les macros enregistrées sont toujours stockées dans des modules numérotés
automatiquement par Excel. Il peut y avoir plusieurs modules, créés au fur et à mesure de
l’enregistrement des macros. La partie droite af che le code de la macro qui est toujours
contenu entre les mots Sub et End Sub. C’est ce qu’on appelle une procédure. Vous pouvez
modi er n’importe quelle ligne de code.
Remarque. Si la partie gauche de l’environnement de développement ne s’af che pas, vous
pouvez la faire réapparaître par les options de menu Af chage / Explorateur de projet.

3.2.4 Le code peut toujours être amélioré


En fonction des touches que vous avez utilisées pour réaliser la macro, le code peut être
très différent et parfois abscons. Il ne sera jamais aussi bien écrit que par vous-même. En
effet, le langage VBA possède de nombreuses instructions que vous pouvez employer pour
rendre votre code clair et ef cace. L’usage des commentaires est toujours une bonne
pratique car ils expliquent bien votre objectif. Un commentaire est précédé d’une
apostrophe. Vous pouvez le placer en début de phrase ou après la dernière instruction.
Sub VIDE()
‘ cette macro vide les cellules
‘ Touche de raccourci du clavier: Ctrl+m
Range(“B1”).Select ‘je sélectionne la cellule B1
Selection.ClearContents ‘je vide la cellule
‘je sélectionne la cellule B3
Range(“B3”).Select
‘je vide
Selection.ClearContents
Range(“B5”).Select ‘je sélectionne la cellule B5
Selection.ClearContents ‘je vide la sélection
‘je sélectionne la cellule B7
Range(“B7”).Select
Selection.ClearContents ‘je vide
Range(“B9”).Select ‘je sélectionne la cellule B9
Selection.ClearContents ‘je vide
End Sub

Pour vider les cellules B1, B3, B5, B7 et B9, on aurait pu écrire la commande suivante :
Sub VIDE2()
‘je vide un groupe de cellules spécifiques
Range(“B1,B3,B5,B7,B9”).ClearContents
End Sub

Le mot Range signi e la plage, l’étendue et le verbe ClearContents indique de vider le contenu
des cellules. Dans cet exemple, on n’a pas indiqué le nom de la feuille.
Le code suivant vide des cellules appartenant à une feuille DATA. La désignation de la feuille
de calcul a été rajoutée dans l’instruction Sheets.
Sub VIDE3()
‘je vide un groupe de cellules spécifiques
Sheets(“DATA”).Range(“B1,B3,B5,B7,B9”).ClearContents
End Sub

Remarque. Lorsque vous écrivez ou modi ez du code VBA dans une macro, vous pouvez
l’exécuter directement grâce à la touche de fonction F5. N’oubliez pas de placer votre
pointeur dans la procédure avant d’enfoncer cette touche. Vous pouvez aussi passer par le
menu Exécution / Exécuter Sub/UserForm.

3.2.5 Exécuter une macro à partir d’un bouton poussoir


Le menu Développeur possède une option Insérer qui propose d’insérer des objets dans une
feuille de calcul. Il peut s’agir d’un bouton de commande, d’une liste modi able, d’une case à
cocher, d’une toupie, d’une zone de liste, d’un groupe de boutons d’options, d’une zone de
texte, d’une barre de dé lement, d’une image, d’un bouton bascule et d’autres encore.
La gure 3.4 montre cette option de menu Insérer.

Figure 3.4 : Le menu Insérer.


Vous pouvez exécuter des macros à partir d’un bouton de commande qu’on appelle aussi
Contrôle. Il existe des contrôles de formulaire et des contrôles ActiveX. Les premiers sont
simples à manipuler, n’imposent pas de programmation et sont utilisés dans les feuilles de
calculs. Les seconds proviennent d’une bibliothèque de contrôle qu’on va retrouver dans les
autres applications Of ce. Ils possèdent de très nombreuses caractéristiques, sont
totalement programmables et demandent un peu plus d’attention.
Le mot ActiveX désigne une norme créée par Microsoft qui dé nit des objets, comme des
listes déroulantes, des boutons poussoirs, des cases à cocher, et d’autres encore. Plus
précisément, ActiveX désigne une technologie du Component Object Model utilisée en
programmation pour faciliter le dialogue entre les programmes. Par exemple, lorsqu’on veut
automatiser des tâches entre Excel et Word, on utilise des instructions et des commandes
fournies par les objets ActiveX. On parle souvent de classes ou composants logiciels
intégrables dans des programmes externes.
Pour insérer un bouton de commande dans la feuille, suivez les étapes suivantes :

Sélectionnez le menu Développeur.


Cliquez sur l’icône Insérer.
Cliquez sur le 1er bouton en haut à gauche dans les contrôles de formulaire.
Cliquez n’importe où dans la feuille de calcul.
Dans la boîte de dialogue qui apparaît alors, cliquez sur le nom de la macro VIDE,
dé nie précédemment.
Terminez par le bouton OK.

Un objet bouton en forme de rectangle apparaît. Vous pouvez modi er sa largeur et sa


hauteur grâce à la souris, par l’intermédiaire des “poignées” horizontales et verticales. Vous
pouvez aussi le déplacer en plaçant délicatement le pointeur au milieu du bouton. Une fois
celui-ci correctement placé, cliquez sur une cellule vierge puis de nouveau sur le bouton.
Vous constaterez que la macro VIDE s’exécute. Pour modi er de nouveau la taille et la
position du bouton, cliquez sur le bouton droit, les poignées réapparaîtront.
Pour changer le texte du bouton, suivez les instructions ci-dessous :

Cliquez avec le bouton droit sur le bouton.


Cliquez sur le lien Modi er le texte puis changez le texte.
Terminez en cliquant sur une cellule vierge.

3.2.6 Apprendre le langage en enregistrant des macros


Une macro sert à automatiser des actions répétitives. Par exemple supprimer des lignes,
copier des données, créer des formules de toute pièce, extraire des informations d’un
classeur externe ou encore créer de nouvelles fonctionnalités. Le système d’enregistrement
est un bon moyen pour apprendre la syntaxe et la grammaire du langage VBA, puisqu’il
s’agit simplement de l’étudier une fois la macro terminée. Si vous avez oublié une syntaxe
particulière pour une action spéci que, faites la macro et consultez le code créé.

Figure 3.5 : Une macro permet de découvrir le code VBA.

3.3 VBA est un langage orienté objet


Lorsque vous travaillez avec Excel, vous manipulez des objets qui sont des composants du
tableur. Par exemple, une feuille de calcul s’appelle sheets ou worksheets, une plage de
cellules est dé nie par le mot range, un classeur est spéci é par le mot workbook. Tous ces
composants possèdent des propriétés, comme la couleur du fond d’une cellule ou la taille
de la police de caractères. Certaines caractéristiques sont modi ables et d’autres non. Pour
voir d’un seul coup d’oeil l’ensemble de ces composants, vous pouvez af cher l’explorateur
d’objets.

3.3.1 L’explorateur d’objets


Suivez les étapes ci-dessous pour voir les composants qui forment l’ossature d’Excel.

Sélectionnez le menu Développeur.


Cliquez sur l’icône Visual Basic.
Dans le menu, cliquez sur Af chage / Explorateur d’objets.

Figure 3.6 : L’explorateur d’objets


L’explorateur d’objets permet de consulter des bibliothèques de commandes. La gure 1.6
montre la bibliothèque Excel avec des classes d’objets ou composants ActiveX. Chaque
composant est matérialisé par une petite molécule de couleur et un nom spéci que. A
l’intérieur du composant, des verbes d’action sont présents et repérables par un petit carré
vert en mouvement, et les caractéristiques ou propriétés du composant par une petite main.
En n des commandes événementielles sont visibles par un petit éclair jaune. Un événement
est une action qui se produit à un instant donné et qui peut être contrôlé par un programme.
Par exemple, lorsque vous cliquez sur le nom d’une feuille, vous af chez immédiatement
son contenu. On pourrait imaginer contrôler l’événement activate de la feuille en plaçant le
pointeur sur une cellule bien spéci que.
La liste suivante rappelle les principales notions du langage orienté objet.

L’objet. C’est ce que vous manipulez dans Excel : un classeur, une feuille de calcul, une
cellule, une colonne ou encore un groupe de lignes. Ils sont manipulables par macro
ou par des programmes que vous écrivez vous-même.
La propriété. Il s’agit d’une caractéristique, d’une spéci cité. Par exemple, la couleur
du fond d’une cellule, la taille d’une colonne ou la couleur d’un onglet. Une propriété
peut être modi ée à la main, par macro ou bien directement par un programme que
vous écrivez en VBA. Il existe de très nombreuses propriétés pour tous les objets que
vous manipulez .
Le verbe d’action. On l’appelle aussi une méthode. Lorsque vous décidez de supprimer
le contenu de plusieurs cellules, vous effectuez l’action de suppression. Le mot
ClearContents est une méthode qui supprime un objet.
La classe et la bibliothèque. Un groupe d’objets peut être stocké dans un conteneur
qu’on appelle une classe d’objets. Un groupe de classes peut être stocké dans un
conteneur qu’on appelle une bibliothèque.

Quand on manipule des macros, on s’intéresse aux commandes qui agissent sur les objets.
La plupart du temps, les personnes qui réalisent des macros ont besoin de répéter des
actions qui sont transformées en ligne de code VBA. Si vous ne connaissez pas la syntaxe
d’une commande VBA, vous pouvez enregistrer l’action, puis étudier le code créé par
l’enregistreur.

3.3.2 Les bibliothèques de composants


Quand on travaille avec Excel, on utilise la bibliothèque de composants spéci ques du
tableur. Quand on travaille avec Word, on utilise la bibliothèque de composants spéci ques
du traitement de texte. Quand on travaille avec Outlook, on utilise la bibliothèque de
composants spéci ques de la messagerie. Si vous voulez créer un programme qui envoie
des informations d’Excel vers Outlook ou d’Excel vers Word, tout en contrôlant la
messagerie ou le traitement de texte par l’intermédiaire du code, vous avez besoin des
instructions de ces deux applications externes.
Il vous faut donc ajouter les deux bibliothèques de composants pour accéder aux classes
d’objets qui proviennent de Word et de Outlook.
Voici la procédure qui permet d’ajouter des bibliothèques de composants :

Sélectionnez le menu Développeur.


Cliquez sur l’icône Visual Basic.
Outils / Références
Cliquez sur la flèche du bas pour af cher la nouvelle bibliothèque (Word par
exemple). Son nom dépend de la version de Microsoft Of ce que vous avez installée.
Cochez la case puis terminez par le bouton OK.

La gure 3.7 montre les deux bibliothèques Microsoft Word 16.0 Object Library et Microsoft
Outlook 16.0 Object Library qui ont été installées.
Figure 3.7 : Ajout d’une bibliothèque de composants
Après cette installation, vous pouvez consulter les commandes VBA de Word et de Outlook
dans l’explorateur d’objets au niveau de la liste déroulante des bibliothèques.

Figure 3.8 : La liste des bibliothèques de composants dans l’explorateur d’objets


Le code suivant montre un exemple de programmation VBA où l’application Outlook est
appelée par programme avec un remplissage automatique de l’objet, du corps du texte, du
destinataire A:, d’une pièce jointe et nalement de l’envoi du mail. Cet exemple ne peut
fonctionner que si la bibliothèque de composants a bien été ajoutée dans la boîte de
dialogue des références.
Sub envoi_avec_piecejointe()
‘j’installe Outlook en mémoire
Set instance = CreateObject(“Outlook.Application”)
‘je crée un environnement pour les paramètres
Set M = instance.CreateItem(olMailItem)
‘je renseigne l’objet
M.Subject = “subject”
‘je renseigne le corps du message
M.Body = “Body text”
‘j’attache la pièce jointe
M.Attachments.Add “C:\DATA\CAMILLE.XLSX”
‘j’indique l’adresse A:
M.to = “remylent@gmail.com”
‘j’affiche l’application Outlook
M.Display
‘j’envoie
M.Send
End Sub

3.4 Les procédures


Quand vous créez une macro, une procédure Sub…End Sub est écrite automatiquement
dans un module, au sein de l’environnement de développement de VBA (Application Visual
Basic). Mais vous pouvez aussi créer vos propres procédures sans passer par
l’enregistrement des macros.
Voici la manière de créer une procédure :
Sélectionnez le menu Développeur.
Cliquez sur l’icône Visual Basic.
Af chage / Explorateur de projets
Double-cliquez sur ThisWorkbook. Vous verrez une fenêtre blanche dans laquelle se
trouveront les procédures.
Tapez le mot Sub puis le nom de la procédure (par exemple PRINCIPAL) et enfoncez la
touche Entrée. Vous verrez apparaître immédiatement les mots End Sub.

La gure 3.9 montre cette nouvelle procédure dans laquelle vous pourrez écrire votre code.

Figure 3.9 : La procédure Sub


L’exemple de code suivant écrit dans une feuille DATA des informations et des calculs.
Renommez auparavant la feuille Feuil1 par DATA.
Sub PRINCIPAL()
‘je définis ma feuille DATA
Set mafeuille = Sheets(“DATA”)
‘je vide les cellules
mafeuille.Range(“A1:F200”).ClearContents
‘j’écris les informations dans la feuille
‘pour tester le code => touche F5
mafeuille.Range(“A1”) = “CLIENTS”
mafeuille.Range(“A2”) = “ALINE”
mafeuille.Range(“A3”) = “JOELLE”
mafeuille.Range(“A4”) = “CARINE”
mafeuille.Range(“B1”) = “CA 2019”
mafeuille.Range(“C1”) = “CA 2020”
mafeuille.Range(“D1”) = “DIFF”
mafeuille.Range(“E1”) = “%”
‘je place les CA 2019
mafeuille.Range(“B2”) = 2000
mafeuille.Range(“B3”) = 1500
mafeuille.Range(“B4”) = 780.56
‘je place les CA 2020
mafeuille.Range(“C2”) = 3000
mafeuille.Range(“C3”) = 1200
mafeuille.Range(“C4”) = 1100
‘je place les calculs pour la différence
‘j’écris la formule en direct
mafeuille.Range(“D2”) = “=C2-B2”
‘ou bien je simule la fonction sum
mafeuille.Range(“D3”) = WorksheetFunction.Sum(Range(“B3:C3”))
‘ou bien je copie la première formule de D2 vers D4
mafeuille.Range(“D2”).Copy ‘je copie
mafeuille.Range(“D4”).Activate
ActiveWorkbook.ActiveSheet.Paste ‘je colle la formule
‘j’enlève le clignotement
Application.CutCopyMode = xlCut
‘je calcule le pourcentage dans E2
‘la formule est valeurFinale/valeurInitiale-1
mafeuille.Range(“E2”) = “=C2/B2-1”
‘je recopie E2 vers E3:E4
mafeuille.Range(“E2”).Copy
‘je sélectionne la destination
mafeuille.Range(“E3:E4”).Select
‘je colle
ActiveWorkbook.ActiveSheet.Paste ‘je colle la formule
‘j’enlève le clignotement
Application.CutCopyMode = xlCut
‘je centre toutes les cellules
‘je sélectionne tout le tableau en simulant un CTR A
mafeuille.Range(“A1”).CurrentRegion.Select
Selection.HorizontalAlignment = xlCenter
‘je formate en pourcentage
mafeuille.Range(“E2:E4”).NumberFormat = “0.00%”
‘je replace le pointeur sur A1
mafeuille.Range(“A1”).Select
End Sub

La gure 3.10 montre le résultat.

Figure 3.10 : Un tableau créé par VBA

3.4.1 Appel de plusieurs procédures


Le code précédent est contenu dans une seule procédure Sub. Mais on aurait pu aussi
découper le programme en plusieurs procédures placées les unes sous les autres. Un
programme principal appelle alors les différentes procédures à l’aide de l’instruction call.
Dans l’exemple précédent, la feuille DATA a été dé nie par une variable objet appelée
mafeuille.
Set mafeuille = Sheets(“DATA”)

Une variable est un conteneur d’une seule valeur qui peut être alphabétique, numérique,
date ou un objet Excel. Elle n’existe que dans la procédure. On dit que sa portée est locale. Si
on découpe le code en plusieurs procédures, la variable objet devra être reconnue par toutes
les procédures et on devra écrire le code autrement. Il faudra déclarer une variable globale
qui sera reconnue par toutes les procédures. Cette déclaration s’effectue avant toutes les
procédures, comme le montre la gure 3.11. L’instruction Dim mafeuille déclare la variable
comme étant globale. Constatez le trait de séparation.

Figure 3.11 : Dé nition d’une variable globale


Le code ci-dessous montre le découpage en plusieurs procédures.
Dim mafeuille ‘je définis une variable globale
Sub PRINCIPAL()
‘je définis ma feuille DATA
Set mafeuille = Sheets(“DATA”)
‘j’appelle les procédures
Call ECRITURE_ENTETES
Call ECRITURE_VALEURS
Call ECRITURE_FORMULES
Call FORMATAGE_CELLULES
End Sub
Sub ECRITURE_ENTETES()
‘je vide les cellules
mafeuille.Range(“A1:F200”).ClearContents
‘j’écris les informations dans la feuille
‘pour tester le code => touche F5
mafeuille.Range(“A1”) = “CLIENTS”
mafeuille.Range(“A2”) = “ALINE”
mafeuille.Range(“A3”) = “JOELLE”
mafeuille.Range(“A4”) = “CARINE”
mafeuille.Range(“B1”) = “CA 2019”
mafeuille.Range(“C1”) = “CA 2020”
mafeuille.Range(“D1”) = “DIFF”
mafeuille.Range(“E1”) = “%”
End Sub
Sub ECRITURE_VALEURS()
‘je place les CA 2019
mafeuille.Range(“B2”) = 2000
mafeuille.Range(“B3”) = 1500
mafeuille.Range(“B4”) = 780.56
‘je place les CA 2020
mafeuille.Range(“C2”) = 3000
mafeuille.Range(“C3”) = 1200
mafeuille.Range(“C4”) = 1100
End Sub
Sub ECRITURE_FORMULES()
‘je place les calculs pour la différence
‘j’écris la formule en direct
mafeuille.Range(“D2”) = “=C2-B2”
‘ou bien je simule la fonction sum
mafeuille.Range(“D3”) = WorksheetFunction.Sum(Range(“B3:C3”))
‘ou bien je copie la première formule de D2 vers D4
mafeuille.Range(“D2”).Copy ‘je copie
mafeuille.Range(“D4”).Activate
ActiveWorkbook.ActiveSheet.Paste ‘je colle la formule
‘j’enlève le clignotement
Application.CutCopyMode = xlCut
‘je calcule le pourcentage dans E2
‘la formule est valeurFinale/valeurInitiale-1
mafeuille.Range(“E2”) = “=C2/B2-1”
‘je recopie E2 vers E3:E4
mafeuille.Range(“E2”).Copy
‘je sélectionne la destination
mafeuille.Range(“E3:E4”).Select
‘je colle
ActiveWorkbook.ActiveSheet.Paste ‘je colle la formule
‘j’enlève le clignotement
Application.CutCopyMode = xlCut
End Sub
Sub FORMATAGE_CELLULES()
‘je sélectionne tout le tableau en simulant un CTR A
mafeuille.Range(“A1”).CurrentRegion.Select
‘je centre toutes les cellules
Selection.HorizontalAlignment = xlCenter
‘je formate en pourcentage
mafeuille.Range(“E2:E4”).NumberFormat = “0.00%”
‘je replace le pointeur sur A1
mafeuille.Range(“A1”).Select
End Sub

3.4.2 Eviter les redondances


On remarque que l’expression mafeuille revient systématiquement sur chaque ligne de code.
Il y a redondance. VBA propose une structure de contrôle appelée With … End With qui
permet d’éviter ce problème de redite. Etudiez le code ci-dessous :
Sub ECRITURE_ENTETES()
With mafeuille
‘je vide les cellules
.Range(“A1:F200”).ClearContents
‘j’écris les informations dans la feuille
‘pour tester le code => touche F5
.Range(“A1”) = “CLIENTS”
.Range(“A2”) = “ALINE”
.Range(“A3”) = “JOELLE”
.Range(“A4”) = “CARINE”
.Range(“B1”) = “CA 2019”
.Range(“C1”) = “CA 2020”
.Range(“D1”) = “DIFF”
.Range(“E1”) = “%”
End with
End Sub

Le mot mafeuille est placé au début du code et a été supprimé de chaque ligne. Remarquez
le point qui précède chaque expression.

3.5 Les variables et le débogage


Une variable est un conteneur, c’est à dire une boîte dans laquelle vous ne placez qu’une
seule valeur, comme si une boîte à chaussures n’en contenait qu’une. Une variable se
déclare avec un groupe de lettres et l’instruction DIM qui signi e Dimension ou réservation
d’une certaine quantité de la mémoire de l’ordinateur pendant un certain moment. On
déclare une variable avec un type comme un entier ou une date. Voici quelques exemples de
déclaration de variables.
dim A as integer ‘déclare la variable A en tant qu’entier
DIM G as string ‘ déclare la variable G en tant que chaîne de caractères.
dim B as number
dim D1 as date

Une variable possède un nom bien spéci que qui peut comprendre jusqu’à 255 caractères.
Le premier de ces caractères doit être une lettre entre A et Z ou a et z. Les chiffres peuvent
également être utilisés dans ces noms, mais pas au début. Les signes de ponctuation et les
caractères spéciaux (/,:,etc) ne sont pas autorisés, sauf le caractère de soulignage (_). Les
identi cateurs de variables ne respectent pas la casse, vous pouvez ainsi les écrire soit en
majuscules soit en minuscules.
Il n’est pas nécessaire de déclarer les variables explicitement, mais il est préférable de le
faire a n de programmer de manière rigoureuse.Par exemple, DIM P est une expression qui
dé nit une variable sans type particulier. On dit que cette variable est un variant, c’est à dire
qu’elle peut contenir n’importe quelle valeur, de type numérique, date ou autre.
Par défaut, VBA vous autorise à travailler avec des variables qui peuvent ne pas être
dé nies. Par exemple, vous pourriez écrire A=1 sans dé nir la variable A.
Cette façon de faire n’est pas vraiment recommandée et si vous souhaitez ne pas oublier
une déclaration, vous pouvez vous forcer à déclarer toutes les variables, en plaçant avant la
zone d’écriture des procédures, l’expression Option Explicit.
Option Explicit
Sub test_variables
‘dim P
‘j’affecte la valeur 1 à la variable P
p=1
‘je montre le contenu de la variable P dans une boîte de dialogue
msgbox P
End Sub

3.5.1 Les types de variables


VBA supporte plusieurs classes de variables : chaîne, numérique, date, booléenne, tableau et
objet.

Les variables de type chaîne (String)

Le code suivant déclare 3 variables et les colle avec l’opérateur de collage &.
Sub test2()
‘je déclare 3 variables
Dim P1 As String
Dim P2 As String
Dim P3 As String
‘j’affecte des valeurs
P1 = “J” & ”’” & “aime “
P2 = “coder en VBA “
‘je colle les variables ensemble
P3 = P1 & P2
‘je colle en insérant un signe ” au milieu de l’expression résultante
MsgBox P3
End Sub

Les variables numériques sont de type Integer, Long Integer, Single, Double et
Currency. Une variable de type Integer (entier) peut stocker n’importe quel nombre
entre -32768 et 32767. On les utilise la plupart du temps pour des compteurs.
Une variable de type Long Integer (Entier long) peut stocker n’importe quel nombre
entre –2147483648 et 2147483647.
Une variable de type Single peut stocker n’importe quel nombre positif ou négatif à
virgule flottante. Les valeurs sont contenues dans l’intervalle 3.402823 x 1038 et
1.401298 x 10-45.
Une variable de type Double peut stocker n’importe quel nombre positif ou négatif à
virgule flottante entre 1.79769313486232 x 10308 et 4.94065645841247 x 10-324.
Une variable de type Currency peut contenir jusqu’à 15 décimales et peut stocker un
nombre entre -922337203685477.5808 et +922337203685477.5807. Ces variables
sont employées dans le cas de calculs qui produisent des erreurs d’arrondis
imprévisibles à cause de l’utilisation des nombres à virgule flottante.
Les variables de type booléen ne peuvent contenir que ces deux valeurs True ou
False.
Les variables de type Date et Time peuvent contenir des dates et des valeurs de
temps.
Les tableaux peuvent contenir plusieurs variables de type identique ou différent. Le
code suivant montre la manière de remplir un tableau avec des variables.
La variables de type String acceptent des caractères alphabétiques.

Sub test4()
‘je déclare un tableau de 3 cases
Dim T(3) As String
T(1) = “Janvier”
T(2) = “Février”
T(3) = “Mars”
‘je relis chaque élément du tableau
For I = 1 To 3
MsgBox T(I)
Next I
End Sub

On peut aussi dé nir un tableau qui contient des variables de type différent.
Sub test5()
‘je déclare un tableau de 3 cases
Dim T(2)
‘j’affecte un format numérique spécifique
T(0) = Format(-2354.7, “0.00 €”)
‘j’affecte un format date spécifique
T(1) = Format(“30/05/1992”, “dd-mmmm-yyyy”)
‘j’affecte un format heure spécifique (11h 23 minutes et 45 secondes
T(2) = TimeSerial(11, 23, 45)
For I = 0 To 2
MsgBox T(I)
Next I
End Sub

Les variables de type Object. Il s’agit des variables qui pointent sur les objets de CALC
comme : le classeur, la feuille de calcul, les cellules, les valeurs et les propriétés
diverses.

Sub test5()
‘je déclare une variable de type Sheet
Dim F As Object
‘j’affecte le nom d’une feuille
Set F = Sheets(“DATA”)
‘je récupère la valeur contenue dans la cellule A5
MsgBox F.Range(“A5”)
End Sub

3.5.2 La portée des variables


Une variable dé nie dans une procédure Sub reste valide uniquement jusqu’à la fermeture
de la procédure. On dit qu’il s’agit d’une variable locale. Pour qu’une variable puisse être
accessible par plusieurs procédures dans un module, vous pouvez la déclarer au tout début
d’un module ou avant toutes les procédures.
Dim A as integer ‘cette variable sera accessible par toutes les procédures
Sub appel_machine
machine1 ‘j’appelle la procédure Machine1
‘ou call machine1
machine2 ‘j’appelle la procédure Machine2
call machine3 ‘j’appelle la procédure Machine3
End Sub
Sub Machine1
A=inputbox(“Entrez la valeur”)
msgbox A
End sub
Sub Machine2
A=A+3
msgbox A
End sub
Sub Machine3
A=A-4
msgbox A
End sub

On peut aussi employer le mot clé Global à la place de Dim. La variable garde alors la
dernière valeur même après la n des procédures.

3.5.3 Les opérateurs


On distingue des opérateurs mathématiques, logiques et de comparaison.
Opérateurs Description

* Multiplication

+ Addition

- Soustraction

/ Division

\ Division de nombre entier (divise des nombres et renvoie la partie entière du résultat)

^ Élévation à une puissance

Mod Modulo (le reste d’une opération de division)

< Plus petit que

> Plus grand que

<= Inférieur ou égal à

>= Supérieur ou égal à

= Égal à

<> Différent

& Concaténation de deux chaînes

And Opérateur Et

Or Opérateur Ou

Not Opérateur Négation

Xor Opérateur Ou exclusif

Eqv Opérateur Equivalent

3.6 Les structures de contrôle


Les structures de contrôle permettent de contrôler le déroulement du code ou de répéter
des morceaux de programme en fonction d’une condition logique. On distingue des
structures de branchement ou des structures de boucle.

3.6.1 Les structures de branchement


Il s’agit des instructions classiques suivantes :

IF…END IF
Une expression logique est testée. Si celle-ci est vraie, le code contenu entre IF et END IF
s’exécute. Sinon, le code continue après END IF.
Voici un exemple :
Sub PROG1()
Dim X
X = InputBox(“Entrez le code 1 ou 2”, “gestion”, 1, 1000, 4400)
‘Je teste si la valeur saisie est 1
If X = “1” Then
‘affiche le résultat dans une boîte qui affiche un seul bouton plus une icône critique
MsgBox “Paris”, 0 + 16, “résultat”
End If
‘Je teste si la valeur saisie est 2
If X = “2” Then
‘affiche le résultat dans une boîte qui affiche un seul bouton plus une icône d’information
MsgBox “Lyon”, 0 + 64, “résultat”
End If
End Sub

IF…ELSE…END IF

Si l’expression logique testée est vraie, le code contenu entre IF et ELSE s’exécute. Dans le
cas contraire, c’est le code contenu entre ELSE et END IF qui est traité.
Sub PROG2()
‘je déclare une variable de type variant
Dim D1
D1 = InputBox(“Entrez votre date de naissance”, “ATTENTION”)
‘je teste si la valeur saisie est bien de type date
If IsDate(D1) = True Then
‘j’affiche le nombre d’années
MsgBox “vous avez ” & DateDiff(“yyyy”, D1, Date) & ” ans”
Else
MsgBox “vous avez entré une mauvaise date”
End If
End Sub

IIF

variable=IIF(condition1,expression1,expression2)
L’intérêt de cette structure est qu’elle teste la condition classique Si… Alors…Sinon sur une
même ligne, tout en plaçant un résultat dans une variable. Si la condition1 est véri ée, c’est
l’expression1 qui sera affectée à la variable. Si la condition1 est fausse, c’est l’expression2
qui sera affectée à la variable.
Sub PROG3()
Dim x
Dim A
x = InputBox(“Entrez le code secret”, “Attention”)
A = IIf(x = “VBA”, “1245”, “Essaie encore”)
MsgBox A
End Sub

Deux conditions IIF peuvent être imbriquées, mais faites attention aux parenthèses.

IF… THEN…ELSEIF

Cette structure de contrôle permet d’effectuer des conditions multiples. Avec cette syntaxe,
quand une condition est vraie, les instructions conditionnelles sont exécutées, et la
construction IF…THEN… ELSEIF se termine. Les autres conditions ne sont pas évaluées.
Le code suivant montre la programmation de conditions multiples, avec cette structure.
Sub PROG4()
Dim X
X = InputBox(“Entrez l’année de sortie des écritures comptables”)
If X = “2020” Then
A = “bonne année”
ElseIf X = “2017” Then
A = “mauvaise année”
Else
A = “pas d’avis”
End If
MsgBox A
End Sub

SELECT…CASE
Cette autre construction permet de choisir parmi plusieurs conditions. Elle représente une
autre alternative à la structure IF… THEN… ELSE.
La syntaxe est la suivante :
Select Case variable
Case valeur 1 pour la variable
expression1
Case valeur 2 pour la variable
expression2
Case valeur 3 pour la variable
expression3
Case Else
Autre expression
End Select

Voici un exemple :
Sub PROG5()
Dim X
X = InputBox(“Entrez l’année de sortie des écritures comptables”)
Select Case X
Case “2018”
A = “Bonne année”
Case “2017”
A = “Mauvaise année”
Case Else
A = “pas d’avis”
End Select
MsgBox A
End Sub

3.6.2 Les structures de boucle


Les boucles permettent de répéter une suite d’instructions en testant une condition logique.

DO WHILE … LOOP

La boucle Do While… Loop permet de répéter une série d’instructions, tant qu’une condition
logique est vraie.
Sub PROG6()
‘répète tant que la réponse n’est pas la chaîne BASIC
Do While X <> “BASIC”
‘je pose une question
X = InputBox(“Entrez le code secret”)
‘je teste la réponse
If X = “VBA” Then
‘je sors de la procédure
Exit Sub
End If
‘retour à la boucle DO
Loop
End Sub

DO UNTIL … LOOP et DO … LOOP UNTIL

La boucle Do Until Loop permet de répéter une série d’instructions, jusqu’à ce qu’une
condition logique soit vraie. L’expression Do… Loop revient à dire : “Effectue une action
jusqu’à ce que j’arrive à quelque chose”.
Sub PROG7()
Dim X
X=0
‘répète jusqu’à ce que X>10
Do Until X > 10
X=X+1
‘je stocke la valeur de X dans la cellule A1 et je descends d’une case
Sheets(“Feuil1”).Cells(X, 1) = X
Loop
MsgBox X
End Sub

ou bien
Sub PROG8()
Dim X
X=0
‘répète jusqu’à ce que X>10
Do
X=X+1
‘je stocke la valeur de X dans la cellule A1 et je descends d’une case
Sheets(“Feuil1”).Cells(X, 1) = X
Loop Until X > 10
MsgBox X
End Sub

Dans le premier cas, la condition est d’abord testée avant l’écriture de la valeur dans la
cellule. Dans le deuxième cas, il y a d’abord écriture de la valeur avant que le test
n’intervienne.

FOR…NEXT

Cette instruction très connue permet de répéter des lignes de code un nombre de fois bien
déterminé. Par exemple, l’instruction suivante répète 12 fois le mot Bonjour.
Sub PROG9()
‘je répète 10 fois
FOR P=1 to 10
msgbox “Bonjour”
NEXT P
End Sub

P est une variable qui augmente de 1 en 1 jusqu’à 10.

WHILE … WEND

Cette boucle impose une condition logique pour en sortir.


While X<=10
msgbox X
X=X+1
Wend

3.7 Les boîtes de dialogue interactives


VBA propose deux boîtes de dialogue faciles à utiliser pour af cher ou demander un
message.

3.7.1 La fonction MsgBox


Cette instruction contient de nombreux paramètres qui modi ent sa présentation. MsgBox
peut agir soit en tant que fonction, c’est à dire en renvoyant une valeur, soit comme boîte de
dialogue d’information. Vous pouvez paramétrer cette boîte en dé nissant le nombre de
boutons poussoirs, l’icône de la boîte et le bouton par défaut, c’est-à-dire celui qui sera
enfoncé quand vous appuierez sur la touche Entrée.
La syntaxe de l’instruction MsgBox est la suivante :
Variable=MsgBox(“Message”,Type, “Titre de la fenêtre”)

Variable. Il s’agit de la variable qui reçoit la valeur du bouton.


Message. C’est la chaîne de caractères af chée comme message dans la boîte de
dialogue.
Type. C’est une expression numérique qui contrôle les boutons et les icônes à
af cher. Le paramètre représente l’addition de plusieurs constantes intégrées.
Titre. C’est l’expression chaîne qui est af chée dans la barre de titre de la boîte de
dialogue.

Les tableaux ci-dessous détaillent les différentes constantes de MSGBOX.


Les constantes qui déterminent le nombre de boutons.
Constante Description

0 Af che le bouton OK uniquement.

1 Af che les boutons OK et Annuler.

2 Af che les boutons Abandonner, Répéter et Ignorer.

3 Af che les boutons Oui, Non et Annuler.

4 Af che les boutons Oui et Non.

5 Af che les boutons Répéter et Annuler.

Les constantes qui déterminent l’affichage des icônes.


Constante Description

16 Af che l’icône Message critique.

32 Af che l’icône Requête question.


48 Af che l’icône Message d’avertissement.

64 Af che l’icône Message d’information.

Les constantes qui définissent les boutons par défaut.


Constante Description

10 Le premier bouton est le bouton par défaut.

256 Le deuxième bouton est le bouton par défaut.

512 Le troisième bouton est le bouton par défaut.

768 Le quatrième bouton est le bouton par défaut.

D’autres constantes pour MsgBox


Constante Description

0 Boîte de dialogue modale (valeur par défaut)

16384 Ajoute le bouton Aide à la boîte de dialogue.

524288 Le texte est aligné à droite.

1048576 Indique que le texte doit s’af cher de droite à gauche, sur les systèmes en langue arabe et hébraïque.

65536 Désigne la fenêtre de la boîte de dialogue comme fenêtre de premier plan.

4096 Boîte de dialogue modale système. Une boîte de dialogue modale est un dispositif qui force l’utilisateur à fermer la boîte pour accéder aux
autres fenêtres de l’application.

Les constantes renvoyées par l’instruction MsgBox


Constante Description

1 OK

2 Annuler

3 Abandonner

4 Réessayer

5 Ignorer

6 Oui

7 Non

Voici un exemple de code qui af che une boîte de dialogue MSGBOX avec deux boutons
Oui/Non.
Sub INFO()
DIM REP
‘je pose une question
‘la valeur 4 correspond aux deux boutons Oui/Non.
‘La valeur 32 correspond à l’icône point d’interrogation
‘La valeur 256 est le bouton par défaut
REP=Msgbox(“Affichez la date du système”,4+32+256,“ATTENTION”)
‘je teste si j’appuie sur le bouton Oui
If Rep=6 then
‘j’affiche la date
msgbox “Aujourd’hui nous sommes le ” & date
END IF
End Sub

La gure 3.12 montre la boîte dialogue en action.


Figure 3.12 : Une boîte de dialogue Oui/Non

3.7.2 La fonction InputBox


Cette instruction permet de saisir des valeurs dans une boîte de dialogue directement en
mémoire. La programmation permet de l’af cher à une position particulière sur l’écran. Vous
terminez la saisie en appuyant sur des boutons intégrés à la boîte.
La syntaxe de cette instruction est la suivante :
Variable = Inputbox(“Message” , “Titre fenêtre”, Valeur par défaut ,
position X, position Y)

Variable. Cette variable reçoit la valeur saisie dans la boîte de dialogue après un clic
sur le bouton OK.
Message. C’est une chaîne de caractères qui s’af che comme message, dans la boîte
de dialogue.
Titre fenêtre. C’est la chaîne de caractères qui s’af che dans la barre de titre de la
fenêtre.
Valeur défaut. C’est une valeur par défaut qui s’af che dans la zone de saisie.
Position X. Il s’agit d’une expression numérique qui spéci e la distance horizontale
entre la partie gauche de l’écran et le côté gauche de la boîte de dialogue.
Position Y. Il s’agit d’une expression numérique qui spéci e la distance verticale entre
le bord supérieur de l’écran et le côté haut de la boîte de dialogue.

Les valeurs de X et Y sont exprimées en twips (twentieth of a point). La position des objets,
dans les fenêtres de Windows est toujours dé nie en twips (unité de mesure de longueur,
utilisée en PAO).
Un twip est égal à 1/20ème de point, soit 1/1440ème de pouce.
Un pouce correspond à 2.54 centimètres.
Le code suivant montre un exemple de la fonction InputBox.
Sub emprunt()
Dim capital
Capital=INPUTBOX(“Entrez le capital que vous souhaitez emprunter”,“ATTENTION”,2000,1500,4000)
‘je teste le bouton Annuler
If capital=”” then
msgbox ” vous avez annulé la saisie”
Exit sub
End If
Msgbox “Contactez votre banquière”
End Sub

Dans ce code, la valeur 2000 est la valeur qui s’af che par défaut. La valeur 1500 est la
position horizontale tandis que la valeur 4000 correspond à la position verticale.
La gure 3.13 montre l’af chage de cette boîte de dialogue Inputbox.

Figure 3.13 : La fonction InputBox en action

3.8 Les fonctions


Une fonction est un mécanisme qui renvoie un résultat après avoir absorbé des paramètres.
Imaginez un tuyau dans lequel vous entrez des données. Celles-ci sont modi ées et
ressortent par l’autre bout. La fonction fournit ainsi un nouveau résultat. Par exemple, une
fonction pourrait calculer le volume d’un cube. On y entrerait la hauteur, la largeur et la
longueur et une formule calculerait hauteur*largeur*longueur.

3.8.1 Syntaxe d’une fonction


Le code suivant montre la syntaxe générale d’une fonction. Le nom de la fonction est utilisé
deux fois.
Function nom-de-la-fonction(paramètre1 as type1, paramètre2 as type2, etc) as type_fonction
Code de la fonction
‘fin de la fonction avec sortie des résultats
nom-de-la-fonction=Résultat
End Function

Le résultat d’une fonction est toujours affecté à son nom. Le code ci-dessous montre une
fonction qui calcule un volume.
Function volume_cube(vlongueur as integer, vlargeur as integer, vhauteur as integer) as double
‘je calcule le volume
volume_cube=vlongueur * vhauteur * vlargeur
End Function

La procédure ci-dessous demande des paramètres, puis appelle la fonction pour récupérer
le résultat.
Sub Test_cube
‘je demande la hauteur du cube
vhaut=Inputbox(“Entrez la hauteur”)
‘je demande la largeur du cube
vlar=Inputbox(“Entrez la largeur”)
‘je demande la longueur du cube
vlong=inputbox(“Entrez la longueur”)
‘j’appelle la fonction qui calcule le volume
Msgbox “le volume est ” & volume_cube(vlong,vlar,vhaut)
End Sub

3.8.2 Passage de paramètres dans une procédure


On peut aussi passer des paramètres lors d’un appel à une procédure, mais celle-ci ne
renverra pas de résultats comme dans une fonction. Par exemple, le code suivant calcule le
même volume que dans l’exemple précédent, mais en utilisant une procédure.
Sub calcule_volume(vlongueur as integer, vlargeur as integer, vhauteur as integer)
‘j’affiche le résultat
Msgbox “le volume est : ” & vlongueur * vlargeur * vhauteur
End Sub

La procédure ci-dessous demande les informations, puis appelle la procédure précédente.


Sub Saisir_Data()
‘je déclare les variables
Dim vhaut As Integer
Dim vlar As Integer
Dim vlon As Integer
‘je demande la hauteur du cube
vhaut = InputBox(“Entrez la hauteur”)
‘je demande la largeur du cube
vlar = InputBox(“Entrez la largeur”)
‘je demande la longueur du cube
vlon = InputBox(“Entrez la longueur”)
‘j’appelle la procédure en passant les paramètres
calcule_volume vlon, vlar, vhaut
‘ou bien
Call calcule_volume(vlon, vlar, vhaut)
‘avec l’instruction call, il faut mettre des parenthèses
End Sub

L’intérêt des fonctions est donc de créer des boîtes à outils qui peuvent être réutilisées.

3.9 Le débogage
Cette section s’intéresse au débogage et à la gestion des erreurs qui sont inévitables au
cours du développement d’un programme simple ou complexe. Pour les éviter, on peut :
utiliser le déroulement du programme en pas à pas, consulter le contenu des variables
locales dans une fenêtre spéci que ou encore dérouter le programme vers un gestionnaire
d’erreurs On Error Goto.
Lorsque vous écrivez un programme, vous pouvez faire des erreurs d’orthographe ou bien
des erreurs de grammaire. Par exemple, si vous écrivez MGTBOX à la place de MSGBOX,
vous faites une erreur d’orthographe. Si vous oubliez une virgule dans une fonction ou bien
une parenthèse dans une expression IF, il s’agit de grammaire. En supposant aucune erreur
dans un programme, ce dernier peut quand même s’arrêter à cause d’une erreur qu’on
appelle erreur d’exécution. Par exemple, si votre programme tente d’imprimer sur une
imprimante qui n’est pas connectée, une erreur d’exécution se produit. VBA propose
différents dispositifs pouvant aider à repérer ces erreurs.

3.9.1 Le mode pas à pas et les points d’arrêt


Dans l’environnement de développement, vous exécutez un programme grâce à la touche
F5 ou en passant par le menu Exécution / Exécuter. VBA lit alors chaque instruction du code
présente entre les mot Sub et End Sub. L’exécution est séquentielle et au cours du
déroulement, la syntaxe et la grammaire sont contrôlées.
Grâce à la touche F8 (ou par le menu Débogage / Pas à pas détaillé) vous demandez à VBA
d’exécuter le code en pas à pas, c’est à dire ligne par ligne, avec la possibilité d’étudier ce qui
se passe. Par exemple, il est possible de consulter le contenu d’une variable en survolant
celle-ci avec la souris. Au fur et à mesure du déroulement en pas à pas, une flèche jaune
apparaît en début de ligne, là où l’exécution s’est arrêtée.
Vous pouvez aussi af cher la fenêtre où se trouvent les données, à côté de la fenêtre VBA,
pour mieux étudier le programme. En plaçant des points d’arrêt, vous forcez le programme à
s’arrêter, après son démarrage par la touche F5. Pour placer un point d’arrêt, cliquez
simplement dans la barre grise verticale de la fenêtre du code. Un point ocre s’af chera sur
la ligne.
Pour supprimer un point d’arrêt, recliquez dessus de nouveau.
La gure 3.14 montre un exemple de ce type d’af chage.

Figure 3.14: Le mode pas à pas et les points d’arrêt.

3.9.2 Réinitialiser le code après un plantage


Lorsque votre code s’arrête à cause d’une erreur, il faut trouver l’erreur, la corriger, puis
réinitialiser le mécanisme interne par le menu Exécution / Réinitialiser. Ou bien, cliquez
simplement sur le petit carré bleu dans la barre d’outils.
La gure 3.15 montre ce dispositif de réinitialisation.

Figure 3.15 : Réinitialiser le code après un plantage.

3.9.3 La fenêtre Espions scrute les variables


Visual Basic propose une fenêtre particulière qui af ne la recherche des erreurs, en
particulier pour consulter le contenu des variables.
Rappelons qu’une variable est un conteneur qui ne contient qu’une seule valeur de type
multiple. Une variable peut être de type numérique, date, alphanumérique, objet ou bien
sans type spéci que appelé variant. Ce dernier type est une sorte de fourre-tout qui accepte
tout type de variable. Dans les langages scienti ques, les variables doivent obligatoirement
être déclarées. Mais dans VBA, on peut utiliser des variables sans les déclarer, ce qui revient
à programmer de manière non rigoureuse. VBA est censé apporter de l’aide aux utilisateurs
d’Excel, ces derniers n’étant pas forcément des programmeurs ou des programmeuses
spécialisé(e)s.
Lorsque vous écrivez l’expression Dim ligne as Integer, vous déclarez une variable ligne de
type entière. Si vous écrivez ligne=5, vous mettrez la valeur 5 dans la variable ligne. Vous
pouvez consulter le contenu de cette variable grâce à une fenêtre spéciale appelée Fenêtre
Espions. Une telle fenêtre vous propose de suivre l’évolution de plusieurs variables lorsque
vous déroulez le programme en pas à pas.
Pour af cher la fenêtre espion, suivez les instructions ci-dessous.

Entrez dans l’environnement de développement.


Af chage
Fenêtre Espions

Pour créer une expression Espion, sélectionnez une variable avec la souris, puis glissez-la
dans la fenêtre Espions. Vous pouvez aussi survoler cette fenêtre en cliquant avec le bouton
droit de la souris et en choisissant Ajouter un espion. Terminez en indiquant le nom de la
variable que vous désirez suivre. Une expression Espion se caractérise par des petites
lunettes comme le montre la gure 3.16.

Figure 3.16 : La fenêtre Espions


Une fois les variables espions mises en place, vous pouvez voir leur contenu grâce au mode
pas à pas, quand vous appuyez plusieurs fois sur la touche F8 dans le code.

3.9.4 La fenêtre Exécution


Cette fenêtre permet de tester des expressions VBA en cours de route quand vous déroulez
le code en mode pas à pas.
Pour af cher la fenêtre Exécution, suivez les instructions ci-dessous.

Entrez dans l’environnement de développement.


Af chage
Fenêtre Exécution

Vous pouvez tester le contenu d’une variable de plusieurs manières. Par exemple, tapez
l’expression ? ligne ou bien print ligne.
Toutes les fonctions VBA sont également accessibles dans cette fenêtre Exécution, comme
l’expression ? year(date). Vous pouvez aussi écrire une expression Debug.Print variable dans
le code. Le résultat sera écrit directement dans la fenêtre Exécution.

3.9.5 La fenêtre des variables locales


Cette fenêtre offre une opportunité pour consulter plus nement les propriétés des objets
manipulés par le langage VBA. Au fur et à mesure du déroulement du programme en mode
pas à pas, le contenu des variables s’af che dans cette fenêtre. Parfois un petit signe plus
(+) apparaît à gauche de la variable, lorsque celle-ci représente un objet comme une feuille,
un classeur, une plage de cellules ou même une seule cellule.
Pour af cher cette fenêtre des variables, effectuez les opérations suivantes :

Placez-vous dans le menu développeur.


Af chage / Fenêtre des variables locales

Etudiez le code ci-dessous qui utilise deux boucles FOR imbriquées a n de créer une
matrice à 5 colonnes et 6 lignes.
Sub test1_variable()
‘je déclare deux variables de type entier
Dim X As Integer
Dim Y As Integer
‘je répète dans une boucle
For Y = 1 To 6
For X = 1 To 5
‘j’écris dans la feuille “Feuil1” certaines informations de la matrice (5,6)
Sheets(“Feuil1”).Cells(X, Y) = “(” & X & “,” & Y & “)”
Next
Next
End Sub

La Figure 3.16 montre le résultat.

Figure 3.16 : Création d’une matrice par VBA


Si vous déroulez le programme en pas à pas à l’aide de la touche de fonction F8, VBA
af chera le contenu de chaque variable, dans la fenêtre des variables locales, comme le
montre la gure 3.17.
Figure 3.17 : Visualisation du contenu des variables locales

La fenêtre des variables locales est aussi intéressante quand on manipule des variables qui
pointent sur des objets comme des feuilles ou des cellules. On peut alors très facilement
consulter les propriétés de ces objets.

3.9.6 Le gestionnaire d’erreurs On Error Goto


Vous pouvez toujours contrôler les futures erreurs qui risquent de se produire grâce à
l’expression On Error Goto qu’on appelle également un gestionnaire d’erreurs.
Cette commande forcera VBA à effectuer des actions programmées.La structure d’un tel
gestionnaire d’erreurs est la suivante :
Sub TEST_GESTIONNAIRE_ERREUR()
‘mise en place du gestionnaire en début de programme. En cas d’erreur imprévue, le code continue jusqu’à l’étiquette
appelée VASLA, plus bas dans le code.
On Error GoTo VASLA
‘Votre code
‘on sort de la procédure si tout s’est bien passé
Exit Sub
‘début de la gestion des erreurs
‘N’oubliez pas le signe (:) après l’étiquette
VASLA :
Votre code de gestion d’erreurs
End Sub

Le langage VBA propose un objet particulier Err qui possède des propriétés.

Err.Number. Renvoie le numéro de l’erreur produite.


Err.Description. Renvoie la description de l’erreur.
Err.Source. Renvoie l’application qui a déclenché l’erreur.

Voici un exemple qui tente de renommer un nouvel onglet dans un classeur. Il faut gérer
l’erreur qui se produit lorsque l’onglet existe déjà.
Sub TEST_GESTIONNAIRE_ERREUR()
‘j’active un gestionnaire d’erreurs
On Error GoTo VASLA
‘je crée un nouvel onglet à la fin des onglets existants
Sheets.Add after:=Sheets(Sheets.Count)
‘je le renomme par GESTION
‘si une feuille Gestion existe déjà, une erreur est déclenchée
‘puis gérée par le gestionnaire d’erreurs
ActiveSheet.Name = “GESTION”
‘je sors de la procédure
Exit Sub
‘début du traitement de l’erreur
VASLA:
MsgBox “L’erreur N° ” & Err.Number & ” s’est produite”
MsgBox “La description de l’erreur est : ” & vbLf & vbLf & Err.Description
reponse = MsgBox(“L’onglet gestion existe déjà” & vbLf & “voulez-vous le supprimer ?”, vbYesNo + vbQuestion,
“Attention”)
If reponse = vbYes Then
‘je supprime l’onglet GESTION
Sheets(“GESTION”).Delete
End If
End Sub

Trois autres commandes sont également utiles parce qu’elles peuvent modi er le suivi du
programme, soit après l’instruction qui a déclenché l’erreur, soit sur l’instruction qui a elle-
même déclenché l’erreur.

RESUME NEXT. Continue le programme juste après l’instruction qui a déclenché


l’erreur.
RESUME 0. Continue le programme sur l’instruction qui a déclenché l’erreur.
ON ERROR RESUME NEXT. Force le programme à continuer juste après l’instruction
qui a déclenché l’erreur.

Le code ci-dessous demande de saisir deux dates en testant leur validité grâce au
mécanisme du gestionnaire d’erreurs. Si les dates sont valides, le programme calcule le
nombre de jours entre elles. Si les dates ne sont pas valides, le programme vous redemande
une saisie, grâce à l’instruction Resume 0.
Sub TEST_RESUME0()
‘je déclare un gestionnnaire d’erreurs
On Error GoTo Test_Date
‘je déclare deux variables de type date
Dim D1 As Date
Dim D2 As Date
‘je demande de saisir la 1ère date
D1 = InputBox(“Entrez la date d’entrée dans la société”, “Calcul de l’ancienneté”, #10/20/2016#)
‘je demande de saisir la 2ème date
D2 = InputBox(“Entrez la date du jour”, “Calcul de l’ancienneté”, Date)
MsgBox “Vous êtes avec nous depuis : ” & WorksheetFunction.Days360(D1, D2) & ” jours”
Exit Sub
‘début du gestionnaire d’erreurs
Test_Date:
MsgBox “La date n’est pas valide. Recommencez”
‘va à l’instruction qui a déclenché l’erreur
Resume 0
End Sub

En résumé
Dans Excel, vous pouvez enregistrer vos tâches manuelles à l’aide de macros. Le résultat
est une procédure Sub que vous pouvez modi er dans l’environnement de développement.
Si vous ne vous souvenez pas d’une commande, faites une macro pour étudier le code. Les
programmes peuvent être testés très facilement au fur et à mesure de leur écriture. Le
langage VBA est structuré en classes d’objets que vous pouvez manipuler par
l’intermédiaire de propriétés, de méthodes et de constantes.
Le chapitre 4 montre la structure du langage HTML.
Chapitre 4
Présentation de HTML
Internet fait partie de notre quotidien et nous rend
constamment de nombreux services. Aujourd’hui, les
pages du Web sont visibles non seulement sur les
ordinateurs mais aussi sur les tablettes et sur les
mobiles. Pour que tout cela fonctionne, il a fallu que des
milliers de personnes programment des applications
informatiques capables d’af cher les données sur de
multiples plateformes. Par exemple, les navigateurs
Internet doivent être reconnus sur des systèmes
d’exploitation aussi différents que Windows, Linux,
MacOS et bien d’autres encore.
Un navigateur est une fenêtre qui peut af cher des
informations provenant de serveurs à distance. Il faut
donc qu’une norme d’af chage soit bien établie, reconnue
et acceptée par tous pour que les données puissent
s’af cher si facilement. Cette norme a été créée par une
organisation appelée le W3C ou World Wide Web
Consortium
(https://fr.wikipedia.org/wiki/World_Wide_Web_Consortium).
Son objectif a été de trouver un dénominateur commun
entre les centaines de groupes de personnes développant
des technologies pour l’Internet. Parmi les nombreux
langages employés pour la création des pages Web, le
HTML est un dénominateur commun. La dernière version
au moment de l’écriture de ce livre est HTML5.

4.1 Un langage de balisage


HTML signi e HyperText Markup Language ou langage
hypertexte à balises. Il s’agit d’un ensemble très
important de mots clés qu’on utilise pour af cher des
informations sur une page Internet. Ces mots sont
toujours entourés par les signes < et >, comme dans
<html> ou <body>. Grâce à ces balises, on peut af cher
des titres, du texte, des images, des liens vers d’autres
pages, des zones de saisie de texte, des en-têtes, des
pieds de page, des logos, des menus et bien d’autres
objets. Cet ensemble de petits éléments forme la page
Web.
HTML est un des langages de programmation que
doivent connaître les développeurs du Web, mais il y en a
d’autres. Par exemple, on utilise le langage CSS
(Cascading Styles Sheets ou feuilles de styles en
cascade) qui organise la présentation des informations.
On peut décider que le logo d’une page sera aligné à
droite et entouré d’une bordure. De même, on précisera
une police de caractères et une taille spéci que pour le
texte. Le travail du langage CSS est essentiellement de
gérer la présentation des données alors que l’objectif du
langage HTML est simplement de les af cher dans le
navigateur.
On emploie aussi le langage JavaScript qui permet de
créer des fonctions personnalisées. Elles effectueront
des opérations sur les objets présents dans la page Web.
Par exemple, on peut faire un calcul à partir de dates
différentes, trouver un résultat issu de valeurs
numériques ou encore gérer l’action des internautes
lorsqu’ils emploient la souris ou le clavier.
Il existe aussi le langage PHP qui est utilisé pour la
gestion des données dans un contexte client-serveur,
c’est à dire entre le navigateur de la personne et l’Internet.
Ce langage est préféré par les programmeurs lorsque des
informations sont envoyées vers un serveur qui doit
renvoyer une réponse. On dit souvent que le trio HTML-
CSS-JavaSscript est le standard du Web.
La structure de HTML ressemble à un arbre qu’on
pourrait appeler arbre à balises. Il possède toujours une
racine qu’on peut considérer comme le point d’entrée de
l’organisation des balises.
Suivent ensuite un ou plusieurs chemins : des nœuds,
des feuilles et d’autres branches. Sur la gure 4.1, vous
pouvez voir la racine qui est toujours la balise <html>. Elle
possède au minimum deux feuilles : les balises <body> et
<head>. La balise <body> est le corps de la page Internet,
la balise <head> est l’en-tête. D’autres composants
viendront par la suite s’ajouter à l’arbre.

Figure 4.1 : Un exemple d’arbre à balises


Le tableau ci-dessous détaille quelques balises qui sont
employées dans la création des pages HTML.
Balises Description

<html> Début de la page HTML

<head> Cette balise fournit des informations générales sur le document. Elle peut contenir
les balises <title>, <base>,<link>,<style>,<meta>,<script> et <template>.

<title> C’est la balise du titre qui est af chée dans la barre de titre du navigateur ou dans
l’onglet de la page. Elle sert aussi au référencement et af che le texte en bleu dans
la page parce que c’est un lien sur lequel on peut cliquer. Cette balise est le premier
élément visuel pour les internautes qui recherchent une information dans un
moteur de recherche. Elle doit donc être rédigée avec soin.

<base> Ce dispositif permet de dé nir une adresse URL une fois pour toutes dans le
document HTML. Cela évite de la retaper. Par exemple, quand on a besoin d’insérer
une image dans une page, il ne sera pas nécessaire d’indiquer le chemin à parcourir.

<link> Cette balise dé nit une relation entre la page et une ressource externe, comme une
feuille de styles. On peut aussi y dé nir le langage utilisé ou bien un média comme
un écran ou un synthétiseur vocal.

<style> Cette balise est utilisée pour dé nir les informations de styles CSS nécessaires à la
mise en forme d’un document.
Si la feuille de styles doit s’appliquer à tout le document,
la balise est placée dans la balise <head>.
Balises Description

<meta> Cette balise doit appartenir à l’élément <head> parce qu’elle détermine l’encodage
utilisé par la page, comme le jeu de caractères UTF-8 de l’alphabet latin. Une
métadonnée est une information qui dé nit une donnée. La balise <meta> peut
aussi dé nir un nom d’auteur ou des mots-clés qui pourront être utilisés par les
robots de référencement.

<script> Cette balise est utilisée pour faire référence à un script exécutable, comme du code
JavaScript. C’est l’attribut src qui dé nit le nom du script.

<template> Cette balise dé nit un contenu qui sera considéré comme un modèle, c’est à dire
des informations réutilisables à l’in ni au moment du chargement de la page mais
seulement manipulable par du code JavaScript.

<body> Elle dé nit la partie principale du document HTML. Elle possède de très nombreux
attributs mais depuis la version HTML5, la plupart des propriétés du corps de la
page sont maintenant intégrées dans les feuilles de styles CSS.

<a> Cette balise signi e une ancre (anchor en anglais) qui dé nit un hyperlien vers un
autre emplacement de la page ou vers une autre page sur le Web. Par exemple, on
peut dé nir un mot qui sera considéré comme une adresse mail.

<footer> Cette balise permet d’écrire du texte dans la zone considérée comme le pied de
page du document.

<header> Cette balise permet d’écrire du texte dans la zone considérée comme l’en-tête du
document.

<p> Cette balise permet de dé nir un paragraphe. Pour modi er l’espacement entre les
paragraphes, il faut utiliser la propriété CSS margin. Si vous ne mettez rien entre la
balise <p> et </p>, vous insérerez une ligne blanche.

<br> Cette balise permet aussi de sauter une ligne.

<b> Cette balise permet de dé nir un caractère en gras a n d’attirer l’attention du lecteur
sur le contenu du texte.
On utilise maintenant la propriété CSS font-weight.

<div> Cette balise signi e division du document. Il s’agit d’un conteneur générique qui
permet de grouper du texte et d’y appliquer des styles en utilisant les attributs
CLASS ou ID

<class> Cette balise dé nit des listes de classes qui permettent de manipuler des éléments
par l’intermédiaire des feuilles de styles CSS ou par le code JavaScript.

<h1>,<h2>, Ces balises sont importantes parce qu’elles informent les moteurs de recherche des
<h3> titres et des sous-titres ainsi que de l’organisation générale de la page. La balise
<h4>,<h5> <h1> dé nit le sujet principal de la page. Il ne peut y avoir qu’une seule balise <h1>
dans une page.

4.2 HTML est un langage de script


Un script de commandes HTML est un groupe
d’instructions qui est écrit avec un éditeur de texte
suf samment élaboré et capable de sauvegarder le
chier sous la forme .html. Par exemple, l’éditeur Bracket
est gratuit et performant. Il vous permet de voir
immédiatement le résultat de votre programmation.
Voici un code HTML qui af che 6 titres de tailles
différentes prévues par les balises <h1>,<h2>,<h3>,<h4>,
<h5>,<h6>. On utilise ces balises pour les titres et pour le
référencement des pages Web, a n d’améliorer la
visibilité.
<html>
<body>
<h1>La balise H1</h1>
<h2>La balise H2</h2>
<h3>La balise H3</h3>
<h4>La balise H4</h4>
<h5>La balise H5</h5>
<h6>La balise H6</h6>
</body>
</html>

La gure 4.2 montre le résultat.

Figure 4.2 : Af chage de titres


1. Le code suivant écrit 3 phrases les unes à la suite des
autres.
<html>
<body>
EDITIONS REMYLENT
LIVRES D’INFORMATIQUE
POUR UN USAGE QUOTIDIEN
</body>
</html>
La gure 4.3 montre le résultat. Les phrases sont collées
les unes aux autres.

Figure 4.3 : Af chage de textes


2. Le code suivant insère des balises <p> et </p>dans les
textes a n de sauter une ligne après chaque phrase.
<html>
<body>
<p>EDITIONS REMYLENT</p>
<p>LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE QUOTIDIEN</p>
</body>
</html>

Figure 4.4 : Sauter des lignes


3. Le code suivant rajoute les balises <b> et </b>a n de
mettre en gras certaines portions de phrases.
<html>
<body>
<p>EDITIONS <b>REMYLENT</b></p>
<p>LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE <b>QUOTIDIEN</b></p>
</body>
</html>
Figure 4.5 : Des portions de phrase sont en gras.
4. Le code suivant colorie en rouge la 2ème ligne à l’aide
d’un style <style> inséré dans la balise <p>.
<html>
<body>
<p>EDITIONS <b>REMYLENT</b></p>
<p style=“color:red;”>
LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE <b>QUOTIDIEN</b></p>
</body>
</html>

5. Le code suivant dé nit la 2ème ligne avec une police


verdana et une taille de caractères de 22, tout en la
laissant en rouge. On appelle style ces caractéristiques.
<html>
<body>
<p>EDITIONS <b>REMYLENT</b></p>
<p style=“color:red;font-family: verdana;font-size: 22”>
LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE <b>QUOTIDIEN</b></p>
</body>
</html>

Figure 4.6 : Insertion de styles dans la page


6. Le code suivant montre une autre écriture pour dé nir
les styles dans le code HTML. Ils sont regroupés en
amont entre deux balises <style> et </style>. Le nom du
style est un mot précédé d’un point. Pour appliquer un
style dans une balise, il faut employer l’instruction class.
L’exemple ci-dessous dé nit un style personnalisé appelé
.monstyle et l’applique seulement sur la 2ème ligne.
<html>
<body>
<style>
.monstyle{
color: red;
font-family: verdana;
font-size: 22;
}
</style>
<p>EDITIONS <b>REMYLENT</b></p>
<p class=“monstyle”>
LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE <b>QUOTIDIEN</b></p>
</body>
</html>

Le tableau ci-dessous montre différents styles que l’on


peut employer dans des balises.
Attributs Description

color:blue Indique la couleur bleue d’avant-plan.

background:red Indique la couleur d’arrière-plan rouge.

background: Indique une couleur avec le paramètre hexadécimal.


#FF0000

background- Af che une image en arrière-plan. Elle prévaut sur la couleur d’arrière-plan.
image:url(“ chier”)

font-family:courrier Spéci e la police de caractère à utiliser.


Au cas où la police n’existerait pas, on peut indiquer une liste de choix.
C’est la première police trouvée à partir de la gauche qui est appliquée.

font-weight:bold Indique un caractère gras.

font-style:italic Indique le caractère italique.

font-size:large Augmente la taille de la police de caractères.

font-size:20px Place la taille à 20 pixels.

font-size:small Diminue la taille de la police de caractères.

text- Souligne le texte.


decoration:underline
Attributs Description

text-decoration: line- Texte barré


through

text-decoration: Texte invisible


blink

text-transform: Force l’af chage du texte en majuscule.


uppercase

text-align:center Centre le texte. Vous pouvez employer left, right et justify.

text-indent:10pt Dé nit un retrait de première ligne.

width:90pt Spéci e la largeur de l’élément, taille de bordure comprise. On peut aussi


placer la valeur en pourcentage (width:80%).

height:25% Spéci er la hauteur de l’élément, taille de bordure comprise.

padding:10px Correspond à l’espace interne d’une cellule (entre le contenu et la bordure).


On peut le spéci er aussi individuellement côté par côté. On peut écrire
padding-top, padding-bottom, padding-left ou padding-right.

margin:10px: Spéci e la marge. On peut la dé nir individuellement pour chaque côté en


utilisant les attributs left, right,top, bottom.

border-style:solid Caractéristique de la bordure

border-width:5px Largeur de la bordure

border-color:red Couleur de la bordure

border-right- Bordure en point


style:dotted

7. Le code suivant montre des styles qu’on applique


automatiquement sur toutes les balises <p> présentes
dans la feuille.
<html>
<body>
<style>
p{
color: blue;
font-family: Arial;
font-size: 15;
border-style: double;
margin-right: 1000px;
text-align: center;
}
</style>
<p>EDITIONS REMYLENT</p>
<p>LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE QUOTIDIEN</p>
</body>
</html>

Figure 4.7 : Des styles appliqués sur la balise <p>


Les styles peuvent donc affecter, soit une balise
particulière, soit un groupe de balises.

4.3 Les feuilles de styles CSS


On appelle feuille de styles CSS plusieurs blocs de styles
regroupés dans un chier qui est stocké, soit sur
l’ordinateur, soit sur un serveur à distance.

4.3.1 Appel d’une feuille de styles


L’expression CSS signi e Cascading Style Sheets ou feuille
de styles en cascade. CSS décrit la manière dont les
éléments doivent être présentés à l’écran. CSS est
standardisé par l’organisme de normalisation W3C et
évolue au cours du temps. Une feuille de styles contient
des propriétés comme la taille du texte, la police de
caractères, le positionnement des objets et bien d’autres
caractéristiques. On relie les balises du code HTML avec
un chier CSS, grâce à la commande <link>.
1. Le code ci-dessous montre le contenu d’un chier texte
appelé groupe1.css.
.monformat {
color: blue;
font-family: Arial;
font-size: 18;
border-style: double;
margin-right: 1000px;
text-align: center;
}

2. Le code suivant montre l’appel du style monformat


dans chaque balise <p>.
<html>
<link rel=“stylesheet” href=“http://remylent.fr/css/groupe1.css”>
<body>
<p class=“monformat”>EDITIONS REMYLENT</p>
<p class=“monformat”>LIVRES D’INFORMATIQUE</p>
<p class=“monformat”>POUR UN USAGE QUOTIDIEN</p>
</body>
</html>

Le chier des styles groupe1.css se trouve sur un serveur


à distance et l’appel s’effectue comme une adresse URL.
<link rel=“stylesheet” href=“http://remylent.fr/css/groupe1.css”>

On aurait pu appliquer le style automatiquement sur


toutes les balises <p>.
3. Le code suivant montre un autre chier de texte
groupe2.css contenant les styles. La couleur a été
changée en rouge.
p{
color: red;
font-family: Arial;
font-size: 18;
border-style: double;
margin-right: 1000px;
text-align: center;
}

4. Le code suivant appelle le chier des styles


groupe2.css.
<html>
<link rel=“stylesheet” href=“http://remylent.fr/css/groupe2.css”>
<body>
<p>EDITIONS REMYLENT</p>
<p>LIVRES D’INFORMATIQUE</p>
<p>POUR UN USAGE QUOTIDIEN</p>
</body>
</html>

Dans cet exemple, il n’y a pas d’attribut class.

4.3.2 La cascade
Lorsque vous dé nissez des styles, vous pouvez les
écrire à trois niveaux :

Dans une feuille de styles externe, que l’on relie


avec une balise <link> dans la page.
Dans un groupe de styles dé nis dans une balise
<style> au sein de la page.
Directement dans une balise <p> ou autre chose
qui af che du texte.

Lorsqu’on mélange ces trois groupes, les différents styles


vont se placer dans une sorte de boîte (une pile de
styles), les uns à la suite des autres, en fonction de l’ordre
d’arrivée. Les styles seront donc tous disponibles, mais il
peut y avoir des conflits. Par exemple, imaginez que vous
dé nissiez une couleur bleue pour l’arrière-plan de la page
dans une feuille de styles externe. Mais vous dé nissez
aussi la couleur rouge pour l’arrière-plan dans la balise
<body> de la page. Quel est donc le style qui sera
prioritaire ? Et bien, c’est le dernier qui parle qui a raison.
En d’autres termes, c’est le groupe de styles, le plus bas
dans la pile qui est prioritaire. C’est ce qu’on appelle le
modèle en cascade.
On peut aussi forcer la main à la priorité, en plaçant à la
n d’une déclaration, la notation !important. Ce dispositif
rend le style prioritaire sur tous les autres. Cependant,
évitez-la : vous n’en avez pas besoin si votre organisation
des styles est bien structurée.
Le code ci-dessous montre un exemple de cascade avec
une feuille de styles externe et un style local portant sur
la même balise <body>.
Créez une feuille de styles appelée feuillebleu.css
contenant la ligne suivante :
body {
background-color:azure;
}

Ce code dit de mettre l’arrière-plan du corps de la page en


bleu.
Créez ensuite une page HTML contenant le code ci-
dessous :
<html>
<link href=“feuillebleu.css”>
<style>
body{background-color:red;}
</style>
<body>
<h1> gestion des commandes</H1>
</body>
</html>

Ce programme appelle la feuille de styles feuillebleu.css


mais dé nit une propriété rouge pour l’arrière-plan du
corps de la page.
<style>
body{background-color:red;}
</style>

La pile des styles contient donc deux styles différents


pour la page, mais c’est la couleur rouge qui gagne, parce
que le style rouge est le plus bas dans la pile. C’est le
dernier qui parle qui a raison.

4.3.3 L’héritage
On parle d’héritage de styles lorsqu’une propriété est
dé nie pour une balise dans la partie <style> et s’applique
par la suite à la même balise dans le corps <body>. Par
exemple, supposons une liste de mots les uns sous les
autres. On peut dé nir plusieurs styles (gras, taille 15,
couleur rouge) à l’intérieur d’une balise <style> qui
s’appliqueront sur les mots de la liste dé nis dans la
balise <body>.
Le groupe des styles est considéré comme le parent et les
mots dans la liste sont considérés comme les enfants.
Les enfants héritent des styles du parent.
Le code ci-dessous illustre cet héritage de propriétés.
<!doctype html>
<head>
<style>
.liste {
/*je dis qu’il y a une puce pour chaque élément de la liste*/
list-style-type:circle;
/* largeur de l’option du menu*/
width: 200px;
/* hauteur de l’option du menu*/
height: 30px;
/* j’affiche par block*/
display:block;
/* je centre le texte*/
text-align: left;
/*texte simple. pas de soulignement, de caractères barrés, etc*/
text-decoration:none;
/* couleur rouge pour le texte*/
color:red;
}
</style>
</head>
<body>
<ul class=“liste”>
<li><a href=”” >Tableurs</a></li>
<li><a href=””>Traitement de texte</a></li>
<li><a href=””>Macros</a></li>
<li><a href=””>Autres</a></li>
</ul>
</body>
</html>

Les différents textes présents dans la balise <body>


héritent des différentes propriétés dé nies dans la balise
<style>. La gure 4.8 montre le résultat. Remarquez les
commentaires qui commencent tous par /* et se
terminent par */.

Figure 4.8 : Héritage des propriétés


L’héritage des propriétés est donc une opération très
naturelle dans le code HTML : il coule de source, pourrait-
on dire, comme dans une cascade.
Pour aller plus loin, vous pouvez lire le livre “Bien débuter
avec HTML” aux éditions www.REMYLENT.FR

Figure 4.9 : Un livre pour étudier HTML en profondeur


En résumé
Le langage HTML est un langage de script dans lequel on
manipule des balises et des attributs reconnaissables par
les navigateurs Internet. Les styles permettent de séparer
les données de la présentation. L’ensemble des
instructions HTML et CSS est normalisé par l’organisme
de standardisation W3C.
J’espère que ce livre sur l’apprentissage de la
programmation aura répondu à vos attentes et vous
permettra de créer des applications en fonction de vos
besoins.
N’hésitez pas à me contacter à l’adresse suivante
REMYLENT@GMAIL.COM si vous avez des remarques ou
des questions.
L’adresse www.REMYLENT.FR vous permettra de
consulter la liste des livres de la collection Informatique du
quotidien.

Vous aimerez peut-être aussi