Requête HTTP en VBA pour MS Access

Dans le cadre de l’un de mes projets de stage, je devais faire communiquer une application MS Access avec une api RESTFul. J’ai fait des recherches et devant le peu de documentations que j’ai trouvé je pense que je vais encore une fois me servir du blog pour noter mes conclusions et ne pas être paumé en regardant mon code dans deux semaines (ça tombe bien, c’est pour ça que j’ai fait ce blog à la base).

Pourquoi utiliser les requêtes HTTP dans MS Access ?

Tout simplement je veux, depuis mon application MS Access, accéder à des informations (tierces ou pas) stockées sur serveur distant et rendu disponibles par le biais d’une api.

J’envoie donc une requête sur l’une des routes de l’api et celle-ci me répond avec les informations que je veux. Il faut donc que je puisse envoyer des requêtes HTTP depuis MS Access en VBA

Est-ce possible en VBA ?

Vu le peu de développeurs VBA qui indiquaient l’avoir fait ou qui expliquaient comment le faire sur les forums & blogs, j’ai d’abord cru que ce n’était pas possible. Mais en cherchant bien et avec persévérance, j’ai trouvé. Un petit mec qui expliquait qu’il existait une library de Microsoft pour ça et qu’il fallait juste y faire référence. Qu’à cela ne tienne !

MSXML2.ServerXMLHTTP

Comme l’exemple est très clair et simple à comprendre je ne ferais pas de pas à pas. Je vous laisse le soin de décrypter la chose.

N’oubliez pas de faire référence à XMLHTTP dans le menu outils de la fenêtre Microsoft Visual Basic (Outils > Références > Microsoft XML, v6.0) avant d’exécuter le code suivant. Ça risquerait de ne pas trop fonctionner.

Function SendPOSTRequest(json As Variant, addr As Variant)
    Dim xmlHTTP As MSXML2.ServerXMLHTTP 
    Dim response As Variant 

    Set xmlHTTP = New MSXML2.ServerXMLHTTP 

    xmlHTTP.Open "POST", addr, False 
    xmlHTTP.setRequestHeader "Content-Type", "text/json" 
    xmlHTTP.send json 

    SendPOSTRequest = xmlHTTP.responseText 
End Function

Très simple donc, mais si vous ne comprenez vraiment pas n’hésitez pas à poser vos questions en commentaire.