Rechercher sur Internet le cours d’une valeur à une date donnée

L'exemple présenté ci-dessous n'est donné qu'à titre indicatif.
Les pages trouvées sur le Web présentent en effet la particularité d'être très changeantes. Le code qui marche bien aujourd'hui risque de devoir être adapté demain.
Attention, la macro utilise à titre d'exemple des données provenant du site de la Tribune. Ces données restent la propriété de la Tribune, veillez à ne les utiliser que pour vos besoins personnels.

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

Recopiez la macro dans un module VBA, ou mieux, importez-la directement
téléchargez la macro
Il suffit alors de lancer la macro "cours_historiques" qui demande le sicovam et la date, et répond en indiquant le cours.


Voir aussi l'utilisation des fonctions API en VBA qui permet une esecution plus rapide et plus fiable.