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.