Edition de code VBA et commentaire

jeudi 7 juillet 2011
par  Matt
popularité : 10%

Editer votre fonction VBA en ajoutant un commentaire : If Then Else, And.


Ouvrez votre classeur Chess.xls créé dans la précédente session puis le VBE (Alt+F11).

Dans la fenêtre Exécution (Ctrl+G dans le VBE) tapez ou copier-coller :

? FileRankToString(64)

a9

Oops, la fonction a un bug. Cette case n’existe pas sur l’échiquier.

Edition et modification de code VBA

Revenez dans la fenêtre d’édition et ajoutez le test de la plage valide du paramètre d’entrée indexSquare dans le corps de la fonction.

Si indexSquare est en dehors de la plage 0 à 63, la fonction retourne la chaîne vide au lieu d’un nom de case incorrect.

L’édition et la modification consistent à remplacer partiellement ou totalement la déclaration de la fonction. Ici il est plus commode de tout sélectionner et remplacer l’intégralité de la fonction dans le module.

Option Explicit

Function FileRankToString(ByVal indexSquare As Integer) As String
Dim file As Integer, rank As Integer

   If indexSquare >= 0 And indexSquare <= 63 Then
       rank = indexSquare \ 8
       file = indexSquare - rank * 8
       FileRankToString = Chr(file + Asc("a")) + CStr(rank + 1)
   Else
       FileRankToString = ""
   End If
End Function

Dans la fenêtre Exécution, on teste la fonction avec un paramètre incorrect :

? FileRankToString(-1)

Bien que cela ne soit pas très visible, la chaîne vide ’’’’ a été affichée (c-a-d que rien n’a été affiché) puis VBA a affiché un retour à la ligne pour accepter la prochaine commande.

L’instruction conditionnelle If Then Else

Le test du paramètre d’entrée indexSquare est réalisé avec l’instruction conditionnelle If condition Then suite d’instructions à exécuter si la condition est vraie Else suite d’instructions à exécuter si la condition est fausse End If.
La condition est exprimée avec l’opérateur logique And pour tester les deux bornes de validité du paramètre supérieur ou égal à 0 et inférieur ou égal à 63.

Côté présentation, notez l’indentation avec deux tabulations pour les instructions de la partie Then alignées verticalement avec celles de la partie Else. Dès qu’on sort du bloc If Then Else, le mot-clé End If a à nouveau une seule tabulation. Il est aligné avec le mot-clé correspondant If.

Pourquoi cette présentation indentée ? C’est qu’à l’intérieur des instructions de la partie Then ou de la partie Else, on pourrait très bien avoir un nouvel If Then Else imbriqué. L’indentation permet de savoir à quel If appartient telle instruction de la partie Else.
Notez que dans If, la partie Else peut être omise si on n’en a pas besoin.

’ Commentaire en VBA

Placer le curseur texte juste avant FileRankToString = ’’’’ dans la partie Else.
Ajouter une apostrophe américaine ou quote "’" (touche 4 sans Shift).
Aller à la fin de la ligne après la constante littérale de la chaîne vide ’’’’ avec la touche Fin (End) ou à la souris.
Valider par ENTER.
La ligne devient verte. Cela signifie qu’elle a été transformée en commentaire.
C’est comme si on avait effacé la ligne.

   Else
      ' FileRankToString = ""

   End If
End Function

Un commentaire n’est pas exécuté. Ce n’est plus une instruction VBA.
La ligne est ignorée à partir de l’opérateur de début de commentaire quote "’" jusqu’à la fin de ligne. En général on utilise les commentaires pour documenter le code avec un texte libre dans la langue que vous voulez. C’est pour faciliter la compréhension du code quand vous le relirez dans quelques mois, surtout si ce n’est pas vous qui l’avez écrit.

On a mis temporairement en commentaire l’affectation du résultat de la fonction avec la chaîne vide pour s’en souvenir si on veut restaurer le code en supprimant la quote de début de commentaire.

Génération d’erreur

A l’intérieur du bloc Else, dans la nouvelle ligne vide qui a été créée après le ENTER de validation du commentaire, saisir :

       Error 5

pour générer un message d’erreur sur n° de case invalide.

Le module doit ressembler à :

Option Explicit

Function FileRankToString(ByVal indexSquare As Integer) As String
Dim file As Integer, rank As Integer

   If indexSquare >= 0 And indexSquare <= 63 Then
       rank = indexSquare \ 8
       file = indexSquare - rank * 8
       FileRankToString = Chr(file + Asc("a")) + CStr(rank + 1)
   Else
      ' FileRankToString = ""
      Error 5
   End If
End Function

Dans la fenêtre Exécution, on teste la fonction avec un paramètre hors plage :

? FileRankToString(-50)

VBA affiche la boîte de dialogue d’erreur Run-time error ’5’ : Invalid procedure call or argument.

Autrement dit l’argument ou paramètre –50 n’est pas accepté. L’appel de la procédure est incorrect.

Cliquez sur End pour fermer la boîte de dialogue d’erreur.

Entre retourner la chaîne vide ’’’’ ou générer l’erreur 5, c’est à vous de choisir en mettant en commentaire ou en supprimant une des deux lignes de la partie Else.


Précédent : Votre première fonction VBA

Suivant : Mise au point avec le débogueur VBA


Brèves

Championnat jeunes 2018

dimanche 25 février 2018

A St Sernin sur Rance, Vadim Breton se qualifie pour le championnat de France jeunes. Il termine à la 4ème place des benjamins. http://echecs-occitanie.com/spip.php?article382&mode=AF

Les Jeunes qualifiés en NIII !

mercredi 14 décembre 2016

Dimanche 11 décembre 2016, aux interclubs jeunes à Leguevin, notre équipe a gagné un match et fait match nul aux deux autres.

L’équipe composée de Xavier, Vadim, Aurélie et Titouan termine 8ème et se qualifie pour la N3. A noter que Xavier et Vadim ont gagné toutes leurs parties.

Sur le Web : Site de la LMPE

Championnat jeunes

lundi 5 décembre 2016

Xavier, Vadim et Martin trois champions du Tarn et Garonne
Lire l’article

Coupe Loubatière

lundi 5 décembre 2016

Le club qualifié pour la phase régionale de la coupe Loubatière
Lire l’article

Sur le Web : Coupe Loubatière

Tournoi interne 2016-2017

lundi 5 décembre 2016

C’est reparti pour le tournoi interne : 1 partie par mois de novembre à mai
Lire l’article

Live Playchess.com

mercredi 7 septembre 2016