Visual Basic for Applications:
Envoi d'une requête HTTP

Comment faire :

La clé pour envoyer une requête HTTP en VBA est d’utiliser la bibliothèque Microsoft XML, v6.0 (ou des versions antérieures, selon votre système). Premièrement, assurez-vous que cette référence est activée dans votre projet en allant dans Outils > Références dans l’éditeur VBA et en cochant Microsoft XML, v6.0.

Voici comment envoyer une simple requête HTTP GET :

Dim httpRequest As Object
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")

With httpRequest
    .Open "GET", "https://api.example.com/data", False
    .send
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Erreur : " & .Status & " - " & .statusText
    End If
End With

Pour une requête POST, où nous devons envoyer des données (par exemple, du JSON) à un serveur :

Dim httpRequest As Object, postData As String
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")
postData = "{""key"":""value""}"

With httpRequest
    .Open "POST", "https://api.example.com/submit", False
    .setRequestHeader "Content-Type", "application/json"
    .send postData
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Erreur : " & .Status & " - " & .statusText
    End If
End With

Un exemple de sortie pour une requête réussie pourrait être une chaîne JSON ou une page HTML, selon l’API ou la page web avec laquelle vous interagissez :

{"data": "Ceci est la réponse du serveur"}

Plongée profonde

La méthode présentée utilise l’objet MSXML2.XMLHTTP, partie des services principaux Microsoft XML (MSXML). Elle a été introduite pour offrir aux développeurs VBA une façon d’exécuter des opérations basées sur XML et, avec le temps, est devenue un outil courant pour les requêtes HTTP, même lorsqu’on ne travaille pas directement avec des données XML. Malgré son âge, elle reste une option fiable pour des interactions web simples en VBA.

Toutefois, VBA et ses mécanismes de requête HTTP manquent de la robustesse et de la flexibilité trouvées dans les environnements de programmation modernes. Par exemple, la gestion des requêtes asynchrones ou le travail au sein d’applications nécessitant des fonctionnalités HTTP avancées (comme les websockets ou les événements envoyés par le serveur) sont hors de portée pour VBA. Lors de travaux sur des projets d’intégration web plus complexes, les développeurs ont souvent recours à des bibliothèques ou outils externes, ou même à l’automatisation du comportement des navigateurs via des techniques de web scraping, bien que ces solutions soient des palliatifs plutôt que de véritables solutions.

Des langages et environnements comme Python avec sa bibliothèque requests ou JavaScript exécuté sur Node.js offrent des capacités de requête HTTP plus puissantes et polyvalentes directement disponibles, y compris des opérations asynchrones, une manipulation plus facile du JSON, et un soutien étendu pour différentes technologies web. Les développeurs ancrés dans l’écosystème Microsoft pourraient envisager de passer à PowerShell ou C# pour des tâches nécessitant une interaction web plus sophistiquée, en tirant parti des fonctionnalités de programmation réseau étendues de .NET.

Ainsi, bien que les capacités de requête HTTP de VBA soient adéquates pour des requêtes simples et des tâches de récupération de données, explorer des alternatives devient crucial au fur et à mesure que les exigences de votre projet évoluent vers le paysage web complexe et moderne.