5.7 La boîte à message
Nous l’avons déjà rencontrée dans sa plus simple expression (page 173). En voici une version plus fournie en options. L’une des options consiste à choisir quels boutons seront présents dans la boîte : OK , Annuler , Oui , Non , et pas mal d’autres possibilités qu’il serait trop long de détailler ici. Pour les curieux, toutes ces options apparaissent dans une info-bulle lors de la frappe de l’instruction ; il faut prendre du temps pour les tester.
Le clic sur l’un des boutonsrenvoie une valeur numérique, qui est affectée à une variable, et que l’on doit tester pour décider de la suite à prendre. Impossible donc de retarder plus longtemps l’utilisation d’une structure de programmation classique : l’alternative simple.
La syntaxe générale est
variable = MsgBox("message",type de boîte,"titre",...)
CommeType de boîte, il y a entre autresvbOkCancel,vbOkOnly,vbYesNo,vbYesNoCancel, etc.
les noms sont suffisamment explicites.
Option Explicit Sub message() Dim retour As Byte
retour = MsgBox("message", vbYesNo, "titre")
’ MsgBox retour If retour = 6 Then
MsgBox ("vous avez choisi OUI") Else
If retour = 7 Then
MsgBox ("vous avez choisi NON") End If
End If End Sub
L’affichage du contenu de la variable retour permet de constater que Oui renvoie la valeur 6 et Non renvoie la valeur 7. On s’est contenté dans l’exemple d’afficher le choix de l’utilisateur.
On peut aussi dans chacun des cas appeler une autre macro, ce que nous ne manquerons pas de faire dans des exemples plus sophistiqués, mais il nous faut d’abord passer par d’autres structures de programmation.
6
6 Création de fonctions personnalisées
À toute la panoplie des fonctions d’Excel, il est possible d’ajouter ses propres fonctions.
Une fonction est une macro dont les instructions sont encadrées par une structure Function(...) ... End Function
Entre les parenthèses, on déclare les différents arguments (éventuels) nécessaires à la fonction pour produire un résultat. Le résultat retourné doit être affecté à une variable dont le nom est celui de la fonction.
Voici une fonction appelée hypotenuse qui calcule la longueur de l’hypoténuse d’un triangle rectangle dont on donne la longueur des deux côtés de l’angle droit. Les deux longueurs sont supposées être des nombres positifs, et dans le cas contraire, c’est un message d’erreur qui sera retourné.
Option Explicit
Function hypotenuse(x As Single, y As Single) If (x <= 0 Or y <= 0) Then
hypotenuse = "Erreur"
Else
hypotenuse = Sqr(x * x + y * y) End If
End Function
Après création de cette macro, la fonction hypotenuse peut être utilisée dans des instructions du type
=hypotenuse(3;7)
=hypotenuse(LC[-2];LC[-1])
=hypotenuse(A2;B2)
À priori, une fonction n’est disponible que dans le classeur dans lequel elle a été créée. Il est toutefois possible de la rendre utilisable dans n’importe quel classeur, via une procédure d’enregistrement (du classeur dans lequel on a créé la (les) fonction(s)) en tant queComplément d’Excel. Voici la procédure à suivre :
• Fichier > Enregistrer sous...
Format de fichier : Complément Excel (.xlam)
Choisir un dossier, et donner un nom explicite, par exempleMesFonctions
• Outils > Compléments Excel... > parcourir...
• SélectionnerMesFonctions.xlam > Ouvrir > OK Un exemple de fonction sans argument
On connaît la fonction PI(); voici la fonction e(): Function e()
e = 2.71828182845905 End Function
7
7 Une macro peut en appeler une autre
Méthode classique en programmation : « il faut diviser pour mieux régner ».
Il est en effet plus simple de décomposer un problème complexe en plusieurs problèmes plus simples, ce qui permet par exemple à plusieurs personnes de traiter chacune une partie.
L’instruction d’appel d’une macro est simplement... son nom.
Sub macro_principale() encoder_donnees calculer
imprimer End Sub
Sub encoder_donnees() ...
End Sub
Sub calculer() ...
End Sub
Sub imprimer() ...
End Sub
8
8 Domaine de validité et durée de vie des variables
Il y a trois domaines de validité pour les variables :
1 la macro ou la fonction (variables locales) ; 2 le module (variables globales) ;
3 l’application (variables publiques).
La durée de vie est la période pendant laquelle la variable conserve sa valeur.
Variables locales
Elles sont déclarées au niveau de la macro ou de la fonction au moyen de l’instruction Dim et n’ont de durée de vie que dans cette macro ou fonction (lorsque la macro se termine —End Sub— la variable est « oubliée »).
Variables globales
Elles sont déclarées dans le module, AVANT toute macro ou fonction, également au moyen de l’instruction Dim. Elles sont par conséquent accessibles dans toutes les macros ou fonctions du module, et les contenu peut y être modifié. Elles ont comme durée de vie toutes les macros ou fonction d’un module, et sont « oubliées » lors de l’exécution d’une macro ou fonction d’un autre module.
Option Explicit Sub principale()
Dim x As Integer x = 10
ajouter
MsgBox ("x= " & x) End Sub
MsgBox ("x= " & x) End Sub
Sub ajouter() x = x + 1 End Sub
Dans la situation de gauche, le contenu de x n’aura pas changé et vaudra toujours 10 ; dans celle de droite, x vaudra 11.
Variables publiques
Un programme peut parfois être réparti sur plusieurs feuilles de type Module. Si variables doivent être « partagées » par des macros de plusieurs modules, il faut les déclarer au moyen de l’instruction
Public nom_variable As Type_variable
Remarque
Les macros et fonctions sont publiques par défaut, ce qui explique que lors de l’affectation d’un bouton à une macro, on accède à toutes les macros de tous les modules. Les macros peuvent par conséquent être utilisées dans d’autres modules sans qu’il soit nécessaire de spécifier le mot Public.
Par contre, si l’on souhaite créer une macro dont la durée de vie se limite au seul module dans lequel elle a été créée, il faut la déclarer par l’instruction
Private sub nom_macro()
9
9 Application : gestion d’un journal de classe
Lorsque j’étais encore en activité (d’enseignement), on devait tenir à jour un « journal de classe », un cahier où il fallait renseigner, pour chaque classe et à chaque date de cours, le sujet de la leçon. En cas d’inspection, c’était un document justificatif important à montrer, mais aussi un document de travail personnel permettant de se rappeler des notions vues, des devoirs donnés, de voir l’évolution, bref, tout ce qui peut concerner un cours.
Voici venu le temps des nouvelles technologies ; renseignements pris, il semblerait que beaucoup d’écoles optent pour une application « plateforme numérique » qui gère aussi le journal de classe des enseignants... mais on fera quand-même l’exercice !
L’idée est la suivante : dans la première feuille du classeur que nous nommerons horaire, on reproduit l’horaire hebdomadaire dans lequel sont renseignés les jours, les heures, ainsi que les
intitulés de cours et/ou de classes. En cliquant sur un bouton, on voudrait activer la feuille correspondant à la classe ou au cours, avec, ou non, l’insertion automatique de la date du jour au bon endroit, et activation de la bonne cellule pour y écrire le sujet du cours.
Dans l’application, seuls les contenus des cellules avec les cours et/ou les classes sont impor-tants : ils ne peuvent pas contenir d’espace ; c’est la seule restriction. Peu importe l’endroit où se trouve le tableau, peu importe les mises en forme, bordures, couleurs, police, textes des jours, des heures.
Il faudra également une feuille pour chaque cours/classe différent, en l’occurrence pour l’exemple ci-dessus, une feuille 6A, une feuille 5B, et une feuille 5C-info. Il est impératif que le nom de la feuille soit absolument identique au texte du cours/classe dans la cellule de l’horaire. Par facilité, ces « préparatifs » peuvent être faits manuellement, au préalable.
On s’est limité au minimum nécessaire pour le contenu de chaque feuille ; l’essentiel est que l’on se souvienne de l’adresse de la cellule qui contiendra la première date, à savoir ici L3C1.
Toutefois, pour les mordus de l’automatisation, on détaillera la mise au point d’une macro pour créer une feuille correspondant au contenu de la cellule active de l’horaire, et en y inscrivant le minimum comme le montre la figure ci-avant.