Coordonnées sur l’échiquier (2ème partie)

Colonne de la case du Cavalier en g8 à partir de son numéro 62 et affichage de ’’g8’’

Colonne de la case du Cavalier en g8 à partir de son numéro 62 et affichage de ’’g8’’


Coordonnées sur l’échiquier (2ème partie)

Cas pratique : la case 62 a pour colonne ’’g’’

Comme on a dû probablement fermer Excel à la fin de la session précédente, on le rouvre ainsi que l’éditeur VBE (Alt+F11).

Coordonnées file en abscisse et rank en ordonnée de la case g8 du Cavalier des Noirs

On restaure le contexte dans la fenêtre Exécution (Ctrl+G dans le VBE) en répétant l’initialisation d’indexSquare avec 62 puis le calcul du rank vu dans la 1ere partie.

Copier-coller et valider par ENTER chaque ligne une à une dans la fenêtre Exécution (et non pas le bloc de lignes).

indexSquare = 62
rank = indexSquare \ 8
file = indexSquare - rank * 8
? file

6

On applique l’équation : file = indexSquare - rank * 8

Le résultat 6 est stocké dans la variable file à gauche du signe d’affectation "=".

A partir de l’information file = 6, calculons la chaîne ’’g’’.

Pour cela on utilise deux fonctions complémentaires selon le code ASCII de la lettre en minuscule :

  • Asc(string) l’abréviation d’ASCII : conversion String vers Integer.
  • Chr(integer) l’abréviation de Character : conversion Integer vers String.
? Asc("a")

97

Vous pouvez utiliser l’aide en ligne en double cliquant par exemple sur "Asc" dans " ? Asc(’’a’’)" puis la touche de fonction F1 pour en savoir plus sur la fonction asc.

asc(’’a’’) vaut 97 en base 10, soit également &H61 (le préfixe "&H" signifie Hexadécimal) en base 16 ou "0110 0001" en base 2.

ASCII12345678
&H60 a b c d e f g h

La fonction inverse partant du code ASCII affiche le caractère correspondant, en fait une chaîne de caractère ne contenant qu’un seul caractère.

? Chr(97)

a

Pour retrouver la colonne "g" à partir de file = 6, essayons :

? Chr(file + Asc("a"))

g

Chess file 0 1 2 3 4 5 6 7
Chr(file+97) ’’a’’ ’’b’’ ’’c’’ ’’d’’ ’’e’’ ’’f’’ ’’g’’ ’’h’’

En ajoutant file au code ASCII de la lettre minuscule ’’a’’, Chr() retourne la file+1ème lettre de l’alphabet en minuscule.


Test d’égalité par rapport à l’affectation

? Chr(Asc("a")) = "a"

True

Signifie que l’égalité est vraie entre Chr(Asc(’’a’’)) et la chaîne ’’a’’.

Le symbole "=" est ici un test d’égalité à ne pas confondre avec le signe "=" dans l’affectation indexSquare = 62. La différence est que le test d’égalité est une expression booléenne (True ou False) dont on affiche le résultat avec l’opérateur maintenant bien connu " ?".

" ?" n’apparaît pas dans l’affectation indexSquare = 62.

On ne l’a utilisé qu’après l’affectation dans la ligne qui suit pour afficher le contenu de la variable indexSquare par : ? indexSquare

L’imbrication Chr(Asc(’’a’’)) retourne toujours comme résultat son paramètre d’entrée, quelque soit la lettre entre guillemets.


Retour sur le rank de la case 62 qui a pour rangée 8

Le rank peut évoluer de 0 à 7 (représentation interne) tandis que la rangée est affichée de 1 à 8 sur un échiquier (représentation externe visible ou GUI : Graphic User Interface).

Pour le rank = 7, il suffit de l’incrémenter pour obtenir la rangée 8.

? rank + 1

8

Cependant on ne peut pas additionner une chaîne "g" avec un nombre 8

car ils ne sont pas de même type.

? "g" + 8

Run-time error ’13’ : Type mismatch.

On peut concaténer deux chaînes pour produire une nouvelle chaîne résultant de l’ajout en fin de la première chaîne du contenu de la seconde. On convertit donc la rangée numérique en rangée de type chaîne grâce à la fonction CStr (Conversion to String).

? "g" + CStr(8)

g8

A partir de file et rank, affichage du nom ’’g8’’ de la case 62

Finalement regroupons le calcul du nom de la case en une seule expression.

? Chr(file + Asc("a")) + CStr(rank + 1)

g8

L’opérateur "+" devant Asc() est une addition numérique. L’opérateur "+" devant CStr() n’est pas une addition de nombres mais la concaténation de deux chaînes, c-a-d que l’on ajoute à la fin de la première chaîne ’’g’’ la seconde chaîne ’’8’’.

En conclusion, on a introduit deux variables intermédiaires rank et file calculées à partir du paramètre d’entrée indexSquare pour afficher la conversion Integer vers String de la case ’’g8’’ grâce aux fonctions ASCII : Asc(integer), Character : Chr(string), Conversion to String : CStr(integer).


Précédent : Coordonnées échiquéennes en Excel VBA (1ere partie)

Suivant : Votre première fonction VBA

Posté le 5 juillet 2011 par Matt