Mise à jour de pages Web par VBA

 

Une situation très courante :
J'ai sur mon site un tableau de chiffres que je souhaite mettre à jour périodiquement.
Mon serveur n'accepte pas les bases de données, les procédure ASP ou CGI.
En outre, je n'ai pas envie de laisser sur le Web mon fichier source (fichier Excel) qui contient tous mes calculs les plus secrets.
Comment effectuer commodément la mise à jour ?

Puisque les données source sont sur Excel, VBA apparaît comme la solution la plus évidente.
Encore faut-il écrire la macro qui va utiliser les données du fichier Excel pour modifier la page html.

Examinons donc la structure de notre feuille html :
Tableau de résultats

150200210
170250250
120100220


Ce petit tableau de chiffres dans une page html est codé simplement :
<HTML><BODY>
<B>Tableau de résultats</B><BR><BR>
<TABLE BORDER>
<TR><TD>150</TD><TD>200</TD><TD>210</TD></TR>
<TR><TD>170</TD><TD>250</TD><TD>250</TD></TR>
<TR><TD>120</TD><TD>100</TD><TD>220</TD></TR>
</TABLE>
</BODY></HTML>


Pour mettre à jour cette page html, il suffit de remplacer les chiffres par leur nouvelle valeur, tirée du tableau Excel.

Deux solutions :
- Utiliser une macro pour modifier sélectivement les chiffres contenus dans la feuille html, avec toute la difficulté que représente la pêche aux bons endroits à modifier;
- où bien reconstruire complètement la page html par macro, en introduisant les bons chiffres là où il faut.
Pour ce faire :
1) créer par macro une nouvelle feuille html avec     Open "c:\rien.html" For Output As #1
2) recopier sous cette ligne tout le code html de la page Web
3) remplacer dans ce code tous les guillemets " par des apostrophes '
4) inscrire devant chaque ligne de code     Print #1, chr$(13) & "     et terminer la ligne en refermant le guillemet si VBA ne s'en est pas chargé.
Il peut être utile de remplacer les caractères non reconnus par certains navigateurs (par exemple é, à...) par les codes html correspondants (&eacute;   &agrave;  ...). La fonction htmlise peut être utilisée dans ce but.
5) refermer la nouvelle page html par     Close #1
6) terminer la macro par     End Sub
Sub maj()
Open "c:\rien.html " For Output As #1
Print #1, Chr$(13) & "<HTML><BODY> "
Print #1, Chr$(13) & "<B>Tableau de résultats</B><BR><BR> "
Print #1, Chr$(13) & "<TABLE BORDER> "
Print #1, Chr$(13) & "<TR><TD>150</TD><TD>200</TD><TD>210</TD></TR>"
Print #1, Chr$(13) & "<TR><TD>170</TD><TD>250</TD><TD>250</TD></TR>"
Print #1, Chr$(13) & "<TR><TD>120</TD><TD>100</TD><TD>220</TD></TR>"
Print #1, Chr$(13) & "</TABLE>"
Print #1, Chr$(13) & "</BODY></HTML>"
Close #1
ActiveWorkbook.FollowHyperlink Address:="c:\rien.html", NewWindow:=True
End Sub


La macro va recopier fidèlement la feuille html et l'enregistrer sour c:\rien.html
Rien de plus simple à partir de là que de remplacer les chiffres par leur valeur Excel :
Si le tableau est en A1:C3, la première ligne du tableau, Print #1, Chr$(13) & "<TR><TD>150</TD><TD>200</TD><TD>210</TD></TR>" va devenir : Print #1, Chr$(13) & "<TR><TD>" & Sheets(1).Range("A1") & "</TD><TD>" & Sheets(1).Range("B1") & "</TD><TD>" & Sheets(1).Range("C1") & "</TD></TR>" (On peut évidemment utiliser des boucles si le nombre de lignes est important).

Une fois la macro ainsi adaptée, il suffit de mettre à jour le tableau Excel puis de lancer la macro pour actualiser la feuille html.

C'est cette méthode qui est utilisée pour mettre à jour le trombinoscope et les cours de bourse.

Mais on peut trouver un peu longue la phase de création de la macro génératrice de page html.
Il suffit d'automatiser : une macro (à télécharger, fichier .zip 9.6 ko) peut se charger de ce travail.
Il suffit de la lancer, de choisir la page Web à recopier, et la macro construit une macro génératrice de page html (qu'il suffit de modifier).