VBA colorie la Grille Américaine

Surligner les joueurs de votre club dans la Grille Américaine

Surligner les joueurs de votre club dans la Grille Américaine


GA.htm issue de PAPIGA.html générée par VBA
GA d’origine
GA en couleur

Grille Américaine (GA) en couleur

La grille américaine des résultats d’une ronde d’un open est générée au format HTML par PAPI 3 :

le Programme d’Appariement Pour Internet.

L’objectif est de colorier automatiquement en jaune les joueurs du club grâce à une macro Visual Basic for Application (VBA) que vous allez personnaliser selon votre club uniquement à la première utilisation.

Ouvrir Microsoft Word. Un document vide par défaut s’affiche.

Menu "Fichier" > "Sauvegarder sous" le nom GA_yellow.doc ou le nom que vous voulez.

Importez les modules VBA

Menu "Outils" > "Macro" > "Visual Basic Editor" (Alt+F11)

Dans la fenêtre Projet (Ctrl+R), sous le modèle de document "Normal", le projet "GA_yellow" du nom du document doit être sélectionné et expansé par défaut.

VBA menu "Fichier" > "Importer fichier" (Ctrl+M)

Importez les modules ModFolder.bas et ModGrid.bas zipés dans

Modules VBA pour Word

Personnalisez la liste des joueurs de votre club

Dans la fenêtre Projet, double-cliquer le noeud ModGrid qui apparaît dans la branche "Module".

Ce module commence par la définition de constantes.

Où se trouve le nom de l’Open ? Réponse en ligne lineOpen = 1.

Ouvrir la Fenêtre d’Exécution immédiate (Ctrl+G) si elle n’est pas déjà ouverte.

Vous pouvez interroger VBA sur le contenu des constantes en tapant un ? suivi du nom de l’expression à évaluer.

? lineOpen

1

? HtmlStyleYellow

.papi_small_y font-family:Arial ; font-size:8pt ; color : #000000 ; background-color : #FFFF33 ;

C’est le style HTML qui sera inséré pour surligner en jaune les joueurs du club.

En haut de la fenêtre de l’éditeur se trouve deux listboxes : (General) et (Declarations).

Sélectionnez dans la listbox de droite la procédure InitClubPlayers.

Alternativement vous pouvez chercher (Ctrl+F) la chaîne "InitClubPlayers" dans l’éditeur si vous n’avez pas trouvé la listbox des procédures.

' Initialize the array of players of the club
Private Sub InitClubPlayers()
Dim varPlayers As Variant, varPlayer As Variant, indPlayer As Integer

    ' Maintain the alphabetic order of players
    varPlayers = Array("JOUEUR1 Prenom1", "JOUEUR2 Prenom2", _
        "JOUEUR3 Prenom3")

Remplacez JOUEURi Prenomi par chaque nom réel des joueurs entre guillemets de votre club tel qu’ils apparaissent dans la grille américaine d’origine générée par PAPI.

Notez qu’on peut aller à la ligne en ajoutant l’opérateur de continuation de ligne ’’ _’’ c-a-d blanc suivi d’underscore. La liste des joueurs doit être dans l’ordre alphabétique des noms.

Optionnellement vous pouvez tester votre procédure que vous venez de modifier dans la Fenêtre d’Exécution immédiate (Ctrl+G) :

? InitClubPlayers

3

S’affiche le nombre de joueurs dans votre club.

En cas d’erreur, l’éditeur VBA s’arrête sur la ligne erronée. Vérifiez que vous avez bien mis un blanc avant l’opérateur de continuation de ligne underscore ’’_’’ autrement dit blanc souligné. Il n’est pas possible d’avoir le séparateur virgule immédiatement suivi d’underscore ’’,_’’. Contrôlez que les guillemets sont équilibrées pour chaque nom de joueur. N’oubliez pas de fermer la parenthèse de la liste de l’array après le dernier joueur.

? arrClubPlayers(0)

JOUEUR1 Prenom1

C’est le premier joueur à l’indice zéro alphabétiquement dans la liste que vous venez de saisir.

Si un joueur demande à ce que son nom n’apparaisse pas, éditez dans la procédure GridPlayer la constante strNoName.

Const strNoName = "JOUEUR1 Prenom1", strReplacedName = "Prenom1"

Mettre le nom à effacer dans strNoName. Il sera remplacé par strReplacedName.

Pensez à sauvegarder votre document GA_yellow.doc

Menu "Fichier" > "Sauvegarder"

Vous pouvez fermer le Visual Basic Editeur.

Le document Word vide réapparaît à nouveau.

Usage de la macro GridChessHtmlYellow

Word menu "Outils" > "Macro" > "Macros"

Dans la boite de dialogue Macros :

Sélectionner dans la listbox Macros dans : GA_yellow.doc (document)

Il apparaît deux macros. Double-cliquez sur la seconde GridChessHtmlYellow.

La boite de dialogue standard d’ouverture de fichier s’ouvre.

Naviguez dans les répertoires de votre disque dur jusqu’à trouver votre Grille Américaine à colorier.

Par exemple sélectionner BLAYE2008Ga.htm puis cliquez sur Ouvrir.

Vous pouvez lire immédiatement le résultat dans la barre de status de Word :

BLAYE2008Ga.html has been successfully generated !

Notez que si vous ouvrez un .htm généré par PAPI, la macro GridChessHtmlYellow produira le même nom de fichier mais avec l’extension .html qui sera écrasé s’il existait déjà.

Réciproquement si vous ouvrez un .html, c’est un .htm qui sera généré.

Coloriez une GA au format PDF

Que faire si la Grille Américaine est fournie au format .pdf au lieu d’HTML ?

A moins d’avoir le produit commercial d’Adobe, il n’est pas simple d’éditer un PDF.

Cependant on peut convertir le .pdf en .doc grâce au freeware SomePDF to Word Converter.

Dans les options, sélectionnez : Remove all graphics ? Yes.

Car le graphique des lignes et colonnes alourdit considérablement le .doc pour un rendu très moyen.

Chaque ligne de la GA est générée sous la forme d’un Frame Word localisé en absolu sur la page Word.

La macro Word devra prendre en compte le cas des noms longs sur deux lignes ayant générés deux frames plus ou moins surperposés.

En pratique on peut copier-coller le document Word généré par SomePDF to Word Converter dans GA_yellow.doc ou importer les macros de GA_yellow.doc.

Word menu "Outils" > "Macro" > "Macros"

Dans la boite de dialogue Macros :

Sélectionner dans la listbox Macros dans : GA_yellow.doc (document)

Il apparaît deux macros. Double-cliquez sur la première GridChessDoc2Html.

Cette macro traite les frames générés par SomePDF to Word Converter dans le document Word courant et génère la GA coloriée au format HTML.


Apprendre VBA

Ce paragraphe est pour ceux qui veulent aller plus loin en cherchant à savoir comment la macro GridChessHtmlYellow marche, ce qui permettra par la suite d’améliorer le rendu selon vos propres choix.

Retournez dans l’éditeur VBA (Alt+F11)

Dans le point d’entrée principal GridChessHtmlYellow, on commence à demander le nom du fichier de la grille américaine au format HTML avec :

strPathHtml = FileSelect(Application.ActiveDocument.Path)

FileSelect() a été développé dans le module séparé ModFolder.

strXmlGrid = FileRead(strPathHtml)

lit toute la GA dans la string strXmlGrid..

On a déjà modifié et testé InitClubPlayers().

isPlayerClub = ColorPlayer(strXmlGrid, HtmlRowWhite)

teste s’il y a un joueur du club dans les rangées de couleur blanche de la GA. Si c’est le cas, change son style pour le colorier en jaune.

If ColorPlayer(strXmlGrid, HtmlRowGray) Then isPlayerClub = True

Idem pour les rangées grisées.

            indStyle = InStr(strXmlGrid, HtmlStyleHeader)
            If indStyle > 0 Then
                indLf = InStr(indStyle, strXmlGrid, vbLf)
                If indLf > 0 Then
                    strXmlGrid = Left(strXmlGrid, indLf) + HtmlStyleYellow + vbLf + Mid(strXmlGrid, indLf + 1)

Recherche la position indStyle du style dans l’entête HTML.

Puis recherche la position de la fin de ligne indLf (linefeed).

Finalement insère le style HtmlStyleYellow.

                    strPathHtml = Left(strPathHtml, Len(strPathHtml) - Len(strExt))
                    strPathHtml = strPathHtml + "." + IIf(strExt = ".htm", "html", "htm")
                    If FileWrite(strPathHtml, strXmlGrid) Then
                        stsBar strPathHtml + " has been successfully generated!"

Calcule le chemin de la GA coloriée avec l’extension .html si .htm et réciproquement.

Ecrit le fichier.

Dans ColorPlayer, on a simplifié l’intitulé de l’entête de la GA concernant les n° de Ronde : "Rd01" devient "R1".

    indRow = InStr(strXmlGrid, "Rd01")
    indTag = InStr(strXmlGrid, "<td>Pts</td>")
    If indRow > 1 And indTag > indRow Then
        strRound = Mid(strXmlGrid, indRow, indTag - indRow)
        indRound = 0
        Do
            indRound = InStr(indRound + 1, strRound, "d0")
            If indRound > 1 Then
                strRound = Left(strRound, indRound - 1) + Mid(strRound, indRound + 2)
            End If
        Loop Until indRound = 0
        strXmlGrid = Left(strXmlGrid, indRow - 1) + strRound + Mid(strXmlGrid, indTag)
    End If

Debug

Le mieux est de suivre en pas à pas au moins une fois le déroulement de la macro pour en comprendre les détails maintenant que l’on connaît son principe général. Pour cela on mettra un point d’arrêt dans la marge gauche de la 1ere instruction de la macro :

isHtmlFileGenerated = False

mais pas sur des déclaration de Dim(ensionnement) de variables non exécutables.

Un point rouge doit apparaître en face de la ligne de code à déboguer.

Si la ligne de code est surlignée en bleu, c’est que vous avez sélectionnez toute la ligne à la souris. Cliquez plus vers la gauche dans la colonne grise des points d’arrêts jusqu’à obtenir un point rouge. Toute la ligne sera surlignée en rouge. Relancez la macro.

La barre d’outil de mise au point (debug) permet d’avancer en pas à pas à l’intérieur des procédures (Step in) ou non (Step out) selon le niveau de debug que vous voulez explorer.

Vous pouvez inspecter le contenu des variables en les survolant à la souris ou en interrogeant leur contenu dans la fenêtre d’Exécution immédiate (Ctrl+G).

Posté le 18 mai 2012 par Matt