Mathématice, intégration des Tice dans l'enseignement des mathématiques  
Sommaire > N°48 - janvier 2016 > Les atouts du duo tableur / Visual Basic

Les atouts du duo tableur / Visual Basic
Moteur de recherche
Mis en ligne le 11 décembre 2015, par Patrick Raffinat

Cet article peut être librement diffusé à l’identique dans la limite d’une utilisation non commerciale suivant la license CC-by-nc-nd http://creativecommons.org/licenses/by-nc-nd/3.0/fr/legalcode

A) Introduction

Il y a une vingtaine d’années, j’ai découvert la programmation Visual Basic sous Excel en encadrant un stage en IUT. Convaincu (et surpris [1]) par l’application développée, malgré un codage pas du tout structuré, cela m’a conduit à introduire la programmation Visual Basic dans mes enseignements d’informatique.

Dans la première partie de l’article, je relaterai cette expérimentation en étudiant plus particulièrement son apport à l’enseignement de l’algorithmique.

Dans la seconde partie, je proposerai quelques adaptations s’il y a des lecteurs désirant profiter des atouts du duo tableur / Visual Basic dans leurs enseignements au lycée, avec Excel ou avec un tableur libre (celui d’OpenOffice).

Dans la troisième partie, je parlerai de bataille navale : si vous avez déjà lu l’audacieux projet de réforme des collèges, vous savez pourquoi j’aborde ce sujet ! Je proposerai une solution clés en mains pour Excel et OpenOffice, avec quelques activités simples ne nécessitant (quasiment) aucune connaissance en Visual Basic. Mais ce n’est qu’une solution de dépannage : c’est pourquoi, après l’écriture de l’article, j’ai finalement décidé de créer un jeu Blockly (voir conclusion)...

B) Expérimentation en IUT

Ces dernières années, j’ai enseigné à mes étudiants le développement d’applications Excel dans le cadre d’un module intitulé « Automatisation des tableaux de bord ». Cela m’a conduit à publier une ressource sur IUTEnLigne [2], que peuvent consulter les lecteurs qui veulent en savoir plus sur le sujet.

Auparavant, compte-tenu des anciens programmes officiels du DUT « Statistiques et Informatique Décisionnelle », je me contentais de donner quelques rudiments sur la programmation d’un tableur dans le cadre d’un module d’algorithmique portant sur les sous-programmes et les structures de données.

Par exemple, les algorithmes sur les tableaux (moyenne, écart-type, tri...) étaient codés non pas avec des tableaux Visual Basic, mais en manipulant des données entrées dans une feuille de calcul.

Dans ce module très « sérieux », je m’autorisais néanmoins une petite fantaisie en montrant comment colorier une cellule, ce qui me permettait par exemple de proposer des exercices où je demandais de dessiner certaines lettres de l’alphabet dans un quadrillage (voir lien).

C) Et au lycée ?

Introduction

Avec le moteur de recherches de MathemaTICE, j’ai trouvé 168 articles associés au mot clé « tableur », ce qui illustre l’importance de l’outil dans le cadre d’enseignements de mathématiques. Il est donc naturel de se demander s’il est possible d’en tirer parti pour enseigner l’algorithmique au lycée, en codant les algorithmes avec un langage (Visual Basic) disponible sous Excel ou OpenOffice.

Un gros avantage du duo tableur / Visual Basic dans le cadre d’un enseignement de mathématiques au lycée est de permettre un prototypage rapide pour les algorithmes portant sur les tableaux :

Ce programme, qui fonctionne ici sous Excel, en est une illustration. Il reprend le premier exemple de la section B, avec des notations allégées plus adaptées au lycée : Cells(k) désigne ici la cellule de la feuille active située ligne 1 et colonne k.

Sous OpenOffice, j’ai été obligé d’introduire une fonction intermédiaire nommée Cells pour aboutir à une notation simplifiée identique (voir fichier zippé ci-dessous).

Zip - 309.6 ko
Programmation Visual Basic sous OpenOffice

Suites récurrentes

Un autre argument pédagogique en faveur du duo tableur / Visual Basic est qu’il permet de montrer plusieurs approches complémentaires pour traiter un problème. Je l’illustre avec une suite récurrente, exemple porte-drapeau de l’enseignement de l’algorithmique au lycée.

Pour faciliter la compréhension du code à fournir, il ne faut pas négliger l’approche tableur avec recopie de formule vers le bas, d’autant qu’elle mettra en confiance les élèves peu à l’aise avec l’algorithmique.

Cette introduction permet alors de demander aux élèves un algorithme dont la feuille de calcul (colonne A) serait la trace d’une variable réelle U :

L’instruction à ajouter ( U = 0.5*U+10 ) n’étant pas une évidence pour certains élèves, vous pouvez leur proposer sous Excel [3] une étape intermédiaire où ils doivent compléter et exécuter le programme Visual Basic suivant :

L’instruction à ajouter ( Cells(k) = 0.5*Cells(k-1)+10 ) correspond en effet exactement à la relation de récurrence.

PluriAlgo

Si vous êtes convaincu par les atouts du duo tableur / Visual Basic sans disposer de beaucoup de temps pour enseigner Visual Basic, je vous signale que Visual Basic est un des langages gérés par mon logiciel PluriAlgo [4] : vous pourrez ainsi gagner du temps pour les entrées-sorties, les instructions conditionnelles et les boucles.

D) La bataille navale !

Introduction

J’ai découvert avec stupéfaction le projet de réforme des collèges, tellement il est ambitieux sur le papier et difficile à mettre en œuvre !

Ma méfiance est renforcée par l’échec de la réforme du lycée de 2009-2010 [5] , pourtant plus simple. Il y a certes un progrès majeur : le contenu est plus attractif pour les élèves, en particulier pour ceux qui manquent d’appétence pour les mathématiques. Mais que vont-ils retenir de ce qu’on va leur enseigner ? Et que va-t-on réellement leur enseigner d’ailleurs ?

La programmation d’une bataille navale n’a rien de trivial, comme chacun s’en doute ... à l’exception peut-être des rédacteurs du projet de réforme ! Pour étayer mes propos, je renvoie le lecteur vers un TP d’informatique à réaliser en Python par des étudiants de première année de licence [6].

Je n’envisage donc pas de faire programmer un tel jeu à des collégiens, même si sa programmation est facilitée par la possibilité d’utiliser des feuilles de calcul. C’est pourquoi je proposerai une solution clés en mains pour Excel et OpenOffice, avec quelques activités simples ne nécessitant (quasiment) aucune connaissance en Visual Basic.

Comment jouer ?

Pour jouer, il faut se placer dans la feuille « jouer » qui propose deux boutons [7] :

  • le bouton « Démarrer » démarre une nouvelle partie en plaçant aléatoirement des bateaux dans la feuille « modele », et en effaçant le contenu de la feuille « jouer ».
  • le bouton « Proposer la cellule active » indique si celle-ci touche, voire coule, un des bateaux de la feuille « modele ».

Sur l’illustration, 6 tirs ont été effectués : 2 ont échoué, 2 ont touché le bateau 1 et 2 ont coulé le bateau 2. Le joueur s’apprête à proposer E2, ce qui conduira le programme à mettre « ---- » dans cette cellule.

Je mets gracieusement à la disposition des lecteurs de MathemaTICE deux classeurs (Excel et OpenOffice), ainsi qu’un document pdf contenant le corrigé des activités décrites dans l’onglet "Activités" :

Zip - 227.1 ko
Bataille navale avec un tableur

Activités

La première activité qui me vient à l’esprit est de faire jouer les élèves avec un des deux fichiers (Excel ou OpenOffice). Cette activité est indispensable, mais je doute qu’on puisse s’en contenter ! Alors que proposer d’intéressant et de pas trop compliqué à des collégiens ? Voici quelques pistes...

Exemple 1 : introduire d’autres bateaux

Dans le code de l’application, j’ai isolé une portion de code que peuvent comprendre et modifier les élèves. C’est elle qui permet de spécifier le nombre de bateaux générés aléatoirement, ainsi que les caractéristiques de ces bateaux lorsque le joueur démarre la partie.

Les élèves devront tout d’abord vérifier l’effet de ces instructions en cliquant sur le bouton « Démarrer », puis en consultant la feuille « modele ». Ensuite, on leur demandera de modifier ce code afin d’introduire d’autres bateaux, puis de vérifier l’effet de la modification du code.

Cette activité n’exige aucune compétence Visual Basic : il suffit de changer les paramètres des bateaux dans les instructions « Call placer_aleatoire(...) ».

Exemple 2 : placer un premier bateau horizontalement

Le code du sous-programme « eleves » précédemment introduit est maintenant remplacé par celui-ci :

Les élèves devront d’abord vérifier, en cliquant sur le bouton « démarrer », que le programme place aléatoirement un « 1 » dans la grille. Ensuite, on leur demandera d’ajouter un autre 1 afin que le bateau 1 ait une longueur 2 et soit placé horizontalement (ce qui explique a posteriori l’instruction colonne = Hasard(9) ).

On peut poursuivre dans cette voie avec une longueur 3, ce qui n’exige aucune compétence en Visual Basic. Mais comme cela ne serait plus le cas avec une longueur à saisir ou une longueur générée aléatoirement, je ne retiendrai pas ces variantes auxquelles j’avais pensé initialement.

Exemple 3 : placer un second bateau horizontalement ou verticalement

Il n’est pas difficile de rajouter un second bateau si on oublie une contrainte fondamentale du jeu : deux bateaux ne doivent pas se croiser (ni même se toucher) !

Blockly

L’activité 3, si on ajoute la contrainte de non croisement, est plus délicate à programmer et nécessite qu’on enseigne la syntaxe Visual Basic, ce dont je ne suis pas partisan au collège. Je propose donc dans cet onglet une solution alternative : Blockly.

« Blockly Games [8] » est une collection de jeux éducatifs permettant aux élèves de programmer de façon visuelle comme avec Scratch. Elle est libre et il suffit d’un navigateur web pour jouer. J’ai détourné l’un des jeux, Movie, pour traiter de façon plus moderne et ludique l’activité 3 :

Le programme affiche deux bateaux : le premier est en noir et le second, s’il ne croise pas le premier, apparaît en rouge.

X1 et y1 (respectivement x2 et y2) sont les coordonnées de la case gauche du bateau 1 (respectivement bateau 2), dans une grille de bataille navale de 9 par 9. Elles sont multipliées par 10 dans le bloc « Rectangle » afin de s’adapter à l’échelle de Movie.

E) Conclusion

Lorsque j’ai commencé à écrire cet article, mon objectif était de montrer aux enseignants de lycée les bienfaits qu’ils pourraient tirer du duo tableur / Visual Basic, bienfaits qui me semblent généralement sous-estimés et donc sous-exploités. J’espère y être parvenu et que cela incitera certains d’entre eux à franchir le pas.

Le très ambitieux projet de réforme de collège, que j’ai découvert en cours de rédaction, m’a conduit à me demander à quels artifices on pourrait recourir pour que des collégiens puissent programmer partiellement un jeu aussi compliqué que la bataille navale. J’ai donc programmé le jeu avec le duo tableur Visual / Basic, parce que c’était la technique de prototypage la plus rapide que je connaissais. Ce n’est qu’ensuite que j’ai décidé d’ajouter à l’article une section sur la bataille navale, profitant ainsi d’une opportunité pour parler également de la réforme du collège.

Contrairement au lycée, je n’y recommande pas particulièrement l’utilisation du duo tableur / Visual Basic car elle m’y semble prématurée. Et, dans le cas particulier de la bataille navale, le codage en Visual Basic des activités que je propose n’est rien de plus qu’une solution de dépannage.

Le jeu Movie peut rendre ces activités plus attrayantes, mais n’est pas suffisamment adapté à la bataille navale. C’est pourquoi, après l’écriture de l’article, j’ai finalement décidé de créer un nouveau jeu Blockly [9].


notes

[1A l’époque, réaliser par exemple une interface graphique n’était pas un jeu d’enfant comme ça l’est devenu, d’où ma surprise de voir un étudiant réaliser une application sophistiquée. De plus, la possibilité de programmer Excel grâce à Visual Basic était relativement récente, comme je l’ai vérifié en consultant Wikipedia.

[2La ressource, intitulée « Automatisation des tableaux de bord avec Excel », est disponible à l’adresse http://public.iutenligne.net/informatique/bureautique/raffinat/TableauBordExcel/general/index.html.

[3Pour OpenOffice, j’émets une réserve car l’instruction à ajouter ( Cells(k).value = 0.5*Cells(k-1).value+10 ) ne correspondrait plus exactement à la relation de récurrence. S’il y a malgré tout des enseignants intéressés, il trouveront les informations nécessaires dans le fichier zippé disponible dans l’onglet « Introduction ».

[4Voir http://revue.sesamath.net/spip.php?article703 si vous ne connaissez pas ce logiciel dont j’ai parlé à plusieurs reprises dans MathemaTICE.

[5Un de mes articles, intitulé « L’algorithmique en mathématiques au lycée vue d’un IUT », évoque cet échec (voir http://revue.sesamath.net/spip.php?article745).

[7Ces boutons ne seront opérationnels que si vous pensez à activer les macros.. Concernant OpenOffice, cet aspect est détaillé dans le fichier zippé disponible dans l’onglet « Introduction » de la section C.

[8Voir https://blockly-games.appspot.com/ où vous trouvez un lien vers le jeu Movie. Pour jouer, il faut choisir le niveau 10 du jeu, niveau où toutes les instructions algorithmiques nécessaires pour la bataille navale sont mises à la disposition du programmeur.

Réagir à cet article
Vous souhaitez compléter cet article pour un numéro futur, réagir à son contenu, demander des précisions à l'auteur ou au comité de rédaction...
À lire aussi ici
MathémaTICE est un projet
en collaboration avec
Suivre la vie du site Flux RSS 2.0  |  Espace de rédaction  |  Nous contacter  |  Site réalisé avec: SPIP  |  N° ISSN 2109-9197