• Aucun résultat trouvé

Répétitive à test d’arrêt initial

2.3 Répétitive à test d’arrêt initial

Tant que condition instruction(s) Fin

Avec ce type de répétitive, si la condition d’arrêt est vérifiée dès le début, les instructions ne sont pas exécutées.

Exemple : la suite de Syracuse(3)

La dite suite est définie comme suit : u0 2N et 8>

><

>>

:

un+1= u2n siun est pair

un+1= 3un+ 1 si un est impair

Après avoir atteint le nombre 1, les valeurs 4, 2, 1 se répètent indéfiniment (conjecture).

En ce qui nous concerne, nous allons engendrer cette suite dans des cellules consécutives jusqu’à obtenir la première valeur 1. Mais si u0= 1, c’est terminé avant de commencer. On supposera que la cellule A1 contienneu0, naturel non nul.

Option Explicit Sub syracuse()

Dim ligne, terme, suivant As Integer ligne = 1

terme = Cells(1, 1) Do While terme <> 1

If terme Mod 2 = 0 Then suivant = terme / 2 Else

suivant = 3 * terme + 1 End If

ligne = ligne + 1

Cells(ligne, 1) = suivant terme = Cells(ligne, 1) Loop

End Sub

La fonction Mod 2 calcule le reste de la division modulo 2 ; si ce reste est nul, c’est que le nombre est pair.

On associe souvent deux nombres à cette suite :

• ladurée de vol : le plus petit indicen tel queun= 1(en ce qui nous concerne, la dernière valeur de l’indice ligne) ;

• l’altitude: la valeur maximale de la suite.

Pour le calcul du maximum d’une suite, on suppose que le premier terme est le maximum, et dès qu’un terme le dépasse, c’est lui qui devient le maximum.

3. Ou suite deCollatzou suite d’Ulamou suite3x+ 1.

Option Explicit Sub syracuse2()

Dim ligne, terme, suivant, altitude As Integer ligne = 1

terme = Cells(1, 1) altitude = terme Do While terme <> 1

If terme Mod 2 = 0 Then suivant = terme / 2 Else

suivant = 3 * terme + 1 End If

ligne = ligne + 1

Cells(ligne, 1) = suivant terme = Cells(ligne, 1) If terme > altitude Then

altitude = terme End If

Loop

Cells(1, 2) = "durée vol": Cells(1, 3) = ligne Cells(2, 2) = "altitude": Cells(2, 3) = altitude End Sub

Attention

En vertu de la règle d’or qui précise qu’une répétitive doit s’arrêter, il est indispensable que la cellule A1 contienne bien un nombre naturel non nul. Elle ne peut même pas être vide !

Par précaution, il vaut donc mieux démarrer la macro en mettant un tel nombre (par exemple 1) dans la cellule A1. À bon entendeur, salut !

Tant qu’à faire, on peut également en profiter pour effacer le contenu de la première colonne si on a l’intention de faire plusieurs essais.

On commencera donc la macro par les instructions Columns("A:A").Select Selection.Clear

Cells(1,1)=1

Dans [4] à la page 56, il y a un autre exemple d’une répétitive à test d’arrêt initial, qui permet de trouver la première cellule vide dans une colonne.

On y utilise une autre syntaxe (très voisine) de ce type de répétitive : While condition ...

Wend, parfaitement équivalente.

3

3 Complément : mise en forme conditionnelle

Lorsqu’on applique une mise en forme à une cellule (par exemple texte en rouge si le contenu est strictement inférieur à 10), la suppression (au moyen de la toucheDelete) ou la modification du contenu ne supprime pas la mise en forme de celle-ci.

Par conséquent, si un 9 (rouge) devient 19 après correction d’une erreur d’encodage par exemple, le 19 reste en rouge.

Pour supprimer la mise en forme d’une ou plusieurs cellules, il faut, après sélection, passer par le menu Edition > Effacer > Formats...

La mise en forme conditionnelle permet de pallier à cet inconvénient, puisque la mise en forme conditionnelle est attachée au contenu de la cellule et non à l’adresse de celle-ci.

La mise en forme conditionnelle s’est considérablement sophistiquée dans les nouvelles ver-sions d’Excel ; je ne peux malheureusement pas dire à partir de laquelle, puisque je suis passé directement de la version 2000 à la version 2016. Il n’y a que les... qui ne changent pas d’avis.

Le lecteur intéressé prendra le temps de parcourir et d’essayer les multiples possibilités de l’outil, en fonction de ses besoins. Nous allons nous limiter ici à un problème simple d’enseignant, à savoir mettre en rouge(4) les cotes strictement inférieures à 10/20 et en vert celles supérieures à 16.

Nous supposerons, pour l’exemple, que la plage A1:A20 contienne les noms des élèves, et la plage B1:B20 des cotes comprises dans l’intervalle [0,20]. Il faut commencer par sélectionner cette plage B1:B20, puis

Mise en forme > Mise en forme conditionnelle... ce qui affichera une boîte de dia-logue Gérer les règles (vide pour l’instant).

Deux fois de suite,Clic sur + pour définir une nouvelle mise en forme conditionnelle, et remplir comme suit la boîte de dialogue (il y a beaucoup de choix dans les listes déroulantes) :

4. On peut évidemment choisir un autre type de mise en forme pour ne pas traumatiser les élèves.

Le choix des formats personnalisés donne accès à la traditionnelle boîte de dialogue où l’on peut déterminer les formats des nombres, de la police, de la bordure, du remplissage.

Dans les versions précédentes d’Excel, on était limité à 3 règles de mise en forme, et seul le style correspondant au « style classique » était disponible. Étant donné l’aspect de la boîte de dialogue Gérer les règles ci-après, cette limite peut être vraisemblablement dépassée.

Toute modification d’une note entraîne automatiquement une mise en forme telle que définie dans les règles.

On peut être amené à définir des mises en forme conditionnelles pour beaucoup de plages de cellules d’une feuille. Si on souhaite apporter des modifications à cer-taines règles, il peut être difficile de se souvenir des adresses des plages, puisqu’il n’y a aucune indication physique dans les plages traitées.

Microsoft fait parfois bien les choses, et il est possible de retrouver toutes les plages traitées :

Edition > Rechercher >

Atteindre... > Cellules...

Références

[1] Desbonnez J.-M., Le tableur Excel et les macros-instructions (1).Losanges, 43, pp. 56–63, 2018.

[2] Desbonnez J.-M., Le tableur Excel et les macros-instructions (2).Losanges, 44, pp. 45–58, 2019.

[3] https://excel-malin.com (Consulté le 27/03/19).

Tableur

Chapitre 23

Le tableur Excel et les contrôles de formulaires

Résumé. Cet article devait être consacré à la création et à la gestion des boîtes de dialogue...

mais celles-ci ne sont pas (encore) implémentées dans la version 2016 pour Mac. Par contre, nous avons accès, dans l’onglet « développeur » aux différents « objets »(appelés contrôles de formulaires) que l’on retrouve dans une boîte de dialogue. Ces objets peuvent être insérés di-rectement dans la feuille de travail, et permettent de rendre un peu plus conviviale la saisie de données dans une cellule.

Fig. 25 Les contrôles

1

1 Principes

La première étape consiste à choisir un objet dans la liste, et à le dessiner dans la feuille à l’aide de la souris. La seconde consiste à le paramétrer.

2

2 Le bouton

Ce contrôle permet de démarrer l’exécution d’une macro. Il a déjà été traité dans un article précédent [3]. Une fois dessiné, le bouton contient le texte Bouton 1 (si c’est le premier), et est immédiatement attaché à une macro nommée Bouton1_cliquer qui n’existe pas encore.

Le contenu de cette macro peut être soit directement enregistré, soit encodé au clavier, soit copié d’une autre macro existante (copier-coller des instructions). On peut modifier le nom de la macro associée, le texte sur le bouton, la police, la couleur...

3

3 L’intitulé

Ce contrôle permet simplement d’afficher une zone de texte dans la feuille, surtout à proximité d’un autre contrôle pour donner quelques explications à l’utilisateur.

• choisir le contrôle et le dessiner dans la feuille (le texte par défaut estEtiquette 1)

• clic sur le texteEtiquette 1 pour le modifier

On peut le déplacer et modifier sa taille à l’aide des poignées traditionnelles. Le paramétrage des contrôles dépend du type de contrôle, mais c’est toujours via le menu contextuel :

• clic droit sur le contrôle

• Format de contrôle...

Les options sont ici suffisamment explicites et ne nécessitent pas de commentaires particuliers, si ce n’est que les dimensions des cellules varient en cas de modification des largeurs de colonnes ou de hauteurs de lignes.

4

4 La zone de liste

La zone de liste permet de choisir un futur contenu de cellule dans une liste pré-définie (en réalité, la cellule va contenir le numéro d’ordre du choix dans la liste). La liste prédéfinie est le contenu d’une plage de cellules, appelée plage d’entrée dont il faudra préciser l’adresse, et la cellule qui recevra le choix est appelée cellule liée, dont il faudra aussi préciser l’adresse.

On souhaite en fait que la cellule L1C2 contienne le nom du jour... On peut (on doit) dans ce cas y utiliser la fonction INDEX(...) qui permet de retrouver un élément dans une matrice connaissant la position dans la matrice : =INDEX(matrice; n°ligne; n°colonne), ce qui, dans notre situation, devient=INDEX(L1C5:L7C5;L1C3;1)

En pratique, la cellule L1C3 et la plage L1C5:L7C5, qui sont des cellules de travail, peuvent trouver leur place dans une autre feuille du classeur afin de ne pas encombrer la feuille principale.

Quant aux types de sélection « Multiple » et « Étendue », je ne comprends pas leur utilité ni le fonctionnement... je suis preneur si quelqu’un a une explication.

Remarque

Si une feuille est nommée par exempleworket contient les données nécessaires aux contrôles (ou à d’autres fins d’ailleurs), les adresses ont la formework!L1C5:L7C5 pour reprendre l’exemple précédent.

5

5 Zone de liste modifiable

Ce contrôle a la même fonction que le précédent, seule la présentation diffère un peu, il n’y a pas les options « Types de sélection » et il faut aussi préciser l’adresse d’une plage d’entrée et l’adresse d’une cellule liée. La même plage d’entrée peut servir pour plusieurs contrôles.

Avant choix

Après choix

Ce contrôle s’appelle aussi « zone de liste déroulante », ce qui à mon sens semble un vocabulaire plus adéquoit.

6

6 Le compteur

Le compteur permet d’augmenter ou de diminuer le contenu d’une cellule (la cellule liée) d’un nombre entier naturel compris entre 0 et 30 000 (changement de pas) qu’il faut préciser. Il est formé uniquement de deux triangles, l’un pour augmenter, l’autre pour diminuer.

Il faut également préciser la valeur minimale et la valeur maximale de la cellule liée. L’exemple ci-dessus permettrait d’encoder une année de naissance, par exemple.

7

7 Interlude : protection des cellules

Lorsque le contenu d’une cellule est géré par un contrôle, c’est très convivial, mais rien n’em-pêche l’utilisateur de modifier lui-même le contenu de la cellule en y tapant n’importe quoi, ce qui peut engendrer des erreurs ailleurs dans la feuille.