Edition de code VBA et commentaire

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

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

Posté le 7 juillet 2011 par Matt