La macro est basée sur les données fournies par La Tribune, mais on peut trouver de nombreuses autres sources de quotations sur le Web.
Quand on télécharge un cours historique sur la Tribune, on obtient l'écran suivant :
On note le nom barbare de l'adresse (réponse à un formulaire html), qui contient les deux informations qui nous intéressent : le numéro de sicovam et la date (sous forme de nombre de séances de bourse).
Il nous suffit alors d'ouvrir, directement sous Excel, la page qui nous intéresse par :
Workbooks.Open suivi du nom barbare dans lequel on a remplacé les sicovam et dates par leur valeur.
Dans Excel, il faut récupérer les informations qui nous intéressent.
Il est vivement recommandé de ne pas se limiter à repérer les adresses des cellules : celles-ci seront amenées à changer souvent au fil des mises à jour du site source.
La méthode utilisée ci-dessous ne fait que limiter le risque : elle consiste à rechercher sur la page les mots clés qui permettent de retrouver les données (utilisation de la méthode Find sur les mots "Date", "clôture" et "valeur").
Noter également la commande "MergeCells=False qui facilite la recherche en supprimant les fusions de cellules.
Sub cours_historiques()
sicovam = Format(InputBox("code sicoval ?", "Entrez le code Sicovam", 12007), "000000")
date_cours = -InputBox("rechercher un cours datant de (nombre de séances) ?" & Chr(13) & "(maximum 10 séances)", "séance", 3)
Workbooks.Open "http://marches.latribune.fr/pgm/wb2000.html?mle=/docs/web/doc/tr2000/mle/historique2.mle&env=01CO020E0000000700000000000000000120400G0400000E00000000001000000000000000_000000000000000000000R00000000000000000002&G1_SICOVAM=" & sicovam & "&histo=" & date_cours
Set tabl = ActiveSheet.Range("Table_4")
tabl.Cells.MergeCells = False
Set tr = tabl.Find(What:="valeur", LookAt:=xlPart, MatchCase:=False)
If Not tr Is Nothing Then nom = tr.Offset(0, 1)
Set tr = tabl.Find(What:="date", LookAt:=xlPart, MatchCase:=False)
If Not tr Is Nothing Then date_cours = tr.Offset(0, 1)
Set tr = tabl.Find(What:="clôture", LookAt:=xlPart, MatchCase:=False)
If Not tr Is Nothing Then cours = tr.Offset(0, 1)
ActiveWorkbook.Close (False)
MsgBox "le cours de " & nom & " au " & date_cours & " était de " & cours & " Euros"
End Sub