Guide du web scraping avec VBA

Ce guide VBA permet d’automatiser la collecte de données directement au sein de vos feuilles de calcul.
15 min de lecture
Web Scraping with Excel VBA main blog image

Dans ce guide sur le scraping Excel, vous allez découvrir :

  • Ce qu’est le VBA.
  • Si un module VBA personnalisé vous permet d’extraire des données du web.
  • Comment gérer le web scraping dans Excel après la fin du support d’Internet Explorer.
  • Comment écrire du code VBA pour le web scraping en utilisant Selenium.
  • L’approche traditionnelle du web scraping dans Excel.

C’est parti !

Qu’est-ce que VBA ?

VBA, Visual Basic for Applications, est un langage de programmation développé par Microsoft. Son objectif est de permettre aux utilisateurs d’automatiser des tâches et d’écrire des fonctions personnalisées dans diverses applications Microsoft Office, notamment Excel, Word et Access.

Dans Excel, on peut utiliser VBA pour définir des macros complexes qui interagissent avec les données des cellules de la feuille de calcul. Avec VBA, vous pouvez améliorer la productivité, simplifier les flux de travail et étendre les capacités d’Excel au-delà de ses fonctions intégrées.

Est-il possible d’effectuer du web scraping avec VBA ?

Oui, VBA ouvre les portes du web scraping directement dans Excel. Grâce à VBA, vous pouvez écrire des modules personnalisés qui :

  1. Se connectent à une page web dans un navigateur.
  2. Analysent son contenu HTML.
  3. Extraient des données.
  4. Écrivent les données extraites directement dans les cellules d’Excel.

C’est ce que l’on appelle le web scraping. Ainsi, le scraping en VBA n’est pas seulement possible, il est aussi très efficace, car il importe directement les données dans Excel. Pour en savoir plus sur les avantages et les inconvénients du web scraping dans Excel, consultez la section suivante !

Avantages et inconvénients du web scraping dans Excel

Avant de voir comment écrire du code VBA pour le web scraping, nous allons parler des avantages et des inconvénients du web scraping dans Excel avec VBA.

👍 Avantages

  • Accès aux fonctionnalités d’Excel : les données scrapées sont directement importées dans Excel, ce qui vous permet d’utiliser les puissantes fonctionnalités d’Excel pour les manipuler et les analyser.
  • Prêt à l’emploi : Microsoft Office intègre la prise en charge de VBA. Il vous suffit d’installer Microsoft Office 365 sur votre PC pour disposer de tout le nécessaire pour faire du web scraping.
  • Automatisation tout-en-un : avec un script de web scraping VBA, vous pouvez automatiser une tâche complète de collecte de données, depuis la récupération jusqu’à leur représentation dans Excel.

👎 Inconvénients

  • Certaines fonctionnalités ne sont disponibles que sous Windows : les packages VBA pour les contrôles Active-X et l’automatisation COM ne sont disponibles que sur Windows et ne fonctionnent pas sur Office pour Mac.
  • VBA n’est plus tout jeune : Visual Basic n’est pas le langage de programmation le plus moderne qui soit. Si vous n’avez jamais travaillé avec ce langage, vous risquez de trouver sa syntaxe ancienne et son approche du codage difficile à utiliser.
  • Internet Explorer est désormais obsolète : l’automatisation VBA COM pour contrôler un navigateur web est basée sur Internet Explorer, qui est désormais obsolète.

Ce dernier inconvénient est assez important et mérite donc une analyse plus approfondie.

Comment gérer l’obsolescence d’Internet Explorer pour faire du web scraping en VBA ?

L’approche traditionnelle de l’écriture de code VBA pour le web scraping reposait sur l’interface d’automatisation COM fournie avec l’objet InternetExplorer. Cet objet fournissait tout le nécessaire pour parcourir un site sur Internet Explorer, analyser son contenu HTML et en extraire des données. Le problème est qu’Internet Explorer n’est plus pris en charge depuis le 15 juin 2022.

En d’autres termes, la plupart des versions récentes de Windows ne sont même plus équipées d’Internet Explorer. Par conséquent, l’utilisation de l’objet InternetExplorer dans un script VBA provoquera une erreur. Edge étant le remplaçant d’Internet Explorer, vous pourriez envisager d’utiliser l’objet équivalent dans VBA. Cependant, Edge ne dispose pas de l’interface d’automatisation COM. Vous ne pouvez donc pas le contrôler par programme comme cela était possible avec Internet Explorer.

Au lieu de cela, Edge prend en charge l’automatisation via un pilote web qui peut être contrôlé par des technologies d’automatisation de navigateur telles que Selenium. Ainsi, la manière actuellement supportée pour réaliser du web scraping Excel VBA est d’utiliser le binding Selenium pour VBA. Cela vous permet de contrôler un navigateur comme Chrome, Edge ou Firefox.

Dans la section ci-dessous, vous allez construire un script de web scraping Excel en utilisant Selenium et Edge. Plus loin, nous vous montrerons un extrait de code pour l’approche traditionnelle. Celui-ci ne nécessite aucune dépendance tierce.

Comment écrire du code VBA pour le web scraping à l’aide de Selenium

Dans cette section du tutoriel, vous allez apprendre à effectuer du web scraping Excel en VBA à l’aide de SeleniumBasic, le connecteur API Selenium pour VBA.

Le site cible sera le bac à sable Scrape This Site Country, qui contient une liste de tous les pays du monde :

Page du bac à sable Scrape this site country

L’objectif du scraper VBA sera de récupérer automatiquement ces données et de les écrire dans une feuille de calcul Excel.

Passons à la description du code VBA !

Prérequis

Vérifiez que la dernière version de Microsoft Office 365 est bien installée sur votre ordinateur. Cette section se réfère à Windows 11 et à la mise à jour Office 2024. Les étapes ci-dessous seront identiques ou similaires pour macOS et d’autres versions d’Office.

Notez que la version d’Office pour ordinateur est nécessaire pour suivre le tutoriel. La plateforme web gratuite Microsoft 365 ne prend pas en charge les scripts VBA.

Étape 1 : Installer et configurer SeleniumBasic

Téléchargez le programme d’installation de SeleniumBasic sur la page de publication du dépôt GitHub :

Télécharger selenium basic

Double-cliquez sur le programme d’installation .exe et attendez que le processus d’installation se termine.

Comme la plupart des packages VBA, SeleniumBasic n’a pas été mis à jour plusieurs années. C’est pourquoi il est fourni avec des pilotes web qui ne fonctionnent plus avec les navigateurs récents. Pour y remédier, vous devez remplacer manuellement les fichiers exécutables des pilotes dans le dossier d’installation de SeleniumBasic.

Nous allons vous montrer ici comment remplacer le pilote web Edge, mais vous pouvez suivre la même procédure pour Chrome et Firefox.

Tout d’abord, téléchargez la dernière version stable de Microsoft Edge WebDriver :

Télécharger la dernière version stable de Edge WebDriver

Vous avez probablement besoin de la version « x64 ».

Vous devriez maintenant avoir téléchargé le fichier edgedriver_win64.zip. Décompressez-le, ouvrez le dossier décompressé et vérifiez qu’il contient l’exécutable msedgedriver.exe. Il s’agit de l’exécutable Edge WebDriver.

Renommez-le en « edgedriver.exe » et préparez-vous à le placer dans le bon dossier.

Ouvrez le dossier d’installation de SeleniumBasic que vous devriez trouver ici :

C:\Utilisateurs\\AppData\Local\SeleniumBasic

Placez edgedriver.exe dans ce dossier, en remplaçant l’exécutable Edge WebDriver existant.

Parfait ! SeleniumBasic pourra désormais contrôler la dernière version d’Edge dans Excel.

Étape 2 : Lancer Excel

Ouvrez le menu Démarrer de Windows, saisissez « Excel » et cliquez sur l’application « Excel ». Sélectionnez l’option « Classeur vierge » pour créer une nouvelle feuille de calcul :

Ouvrir une nouvelle feuille dans Excel

À la fin de cette section, cette feuille contiendra les données récupérées.

Étape n° 3 : Activer l’onglet Développeur

Si vous regardez la barre d’onglets en haut, vous ne verrez pas d’option pour créer un script VBA. C’est parce que vous devez d’abord l’activer dans les paramètres Excel.

Pour ce faire, cliquez sur « Fichier » dans le coin supérieur gauche :

Cliquer sur Fichier dans le coin supérieur

Ensuite, sélectionnez « Options » comme ci-dessous :

Sélection du menu Options

Sur la fenêtre « Options », accédez à l’onglet « Ruban personnalisé » et cochez l’option « Développeur » dans la section « Onglets principaux » :

Cocher l’option Développeur sur l’onglet Ruban personnalisé

Appuyez sur « OK » et un nouvel onglet « Développeur » apparaîtra :

Étape n° 4 : Initialiser un module VBA de scraping web

Cliquez sur l’onglet « Développeur » et appuyez sur le bouton « Visual Basic » :

Sur l’onglet « Développeur », cliquer sur « Visual Basic »

La fenêtre suivante apparaît :

La fenêtre nouvellement ouverte avec un fond gris

Cliquez sur « Insérer » dans le menu supérieur et ensuite sur « Module » pour initialiser votre module de scraping VBA :

En cliquant sur Module dans l’option Insérer

Voici ce que vous devriez voir en ce moment :

Le nouveau module ouvert

C’est sur la fenêtre intérieure « Classeur1 – Module1 (Code) » que vous devez écrire votre code VBA pour le web scraping.

Étape 5 : Importer Seleniumbasic

Dans le menu du haut, cliquez sur « Outils », puis sur « Références… »

En cliquant sur « Références » sous « Outils »

Sur la fenêtre pop-up, trouvez la « Bibliothèque de type Selenium » et cochez-la :

Vérifiez la bibliothèque de type Selenium dans les options

Cliquez sur le bouton « OK ». Vous pourrez alors utiliser Selenium dans Excel pour effectuer du web scraping.

Étape 6 : Automatiser l’ouverture du site cible par Edge :

Collez le code ci-dessous dans la fenêtre du module VBA :

Sub scrape_countries()

' initialize a Selenium WebDriver instance

Dim driver As New WebDriver

' open a new Edge window

driver.Start "Edge"

' navigate to the target page

driver.Get "https://www.scrapethissite.com/pages/simple/"

' wait 10 seconds before shutting down the application

Application.Wait Now + TimeValue("00:00:10")

' close the current driver window

driver.Quit

End Sub

Ce code initialise une instance Selenium et l’utilise pour demander à Edge de consulter la page cible. Testez le code en cliquant sur le bouton Exécuter :

Cliquez sur le bouton Exécuter pour tester le code

Cela fera apparaître la fenêtre Edge suivante :

La fenêtre Edge qui est apparue

Notez le message « Microsoft Edge est contrôlé par un logiciel de test automatisé » qui indique que Selenium fonctionne sur Edge comme nous le souhaitions.

Si vous ne voulez pas que Edge s’affiche, vous pouvez activer le mode « headless » en ajoutant cette ligne :

driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"

Étape 7 : Inspecter le code HTML de la page

Le web scraping consiste à sélectionner des éléments HTML sur une page et à collecter des données à partir de ces éléments. Les sélecteurs CSS font partie des méthodes les plus populaires pour sélectionner les nœuds HTML. Si vous êtes développeur web, vous devriez déjà les connaître. Dans le cas contraire, consultez la documentation officielle.

Pour définir des sélecteurs CSS efficaces, vous devez d’abord vous familiariser avec le code HTML de la page cible. Ouvrez donc le bac à sable Scrape This Site Country dans le navigateur, cliquez avec le bouton droit de la souris sur un élément « country » et sélectionnez l’option « Inspecter » :

Utilisez l’option Inspecter

Ici, vous pouvez voir que chaque élément HTML de « country » est un

que vous pouvez sélectionner avec le sélecteur CSS suivant :

.country

Étant donné un nœud HTML .country, vous devez cibler :

  • Le nom du pays dans l’élément .country-name.
  • Le nom de la capitale dans l’élément .country-capital.
  • Les informations sur la population dans l’élément .country-population.
  • La superficie en km² occupée par le pays dans l’élément .country-area.

Ce sont là tous les sélecteurs CSS dont vous avez besoin pour sélectionner les nœuds HTML souhaités et en extraire les données. Vous verrez comment les utiliser dans l’étape suivante !

Étape n° 8 : Écrire la logique VBA pour le web scraping

Utilisez la méthode FindElementsByCss() exposée par le pilote pour appliquer le sélecteur CSS .country et sélectionner tous les nœuds HTML de « country » sur la page :

Dim countryHTMLElements As WebElements

Set countryHTMLElements = driver.FindElementsByCss(".country")

Then, define an integer counter to keep track of the current Excel row to write data in:

Dim currentRow As Integer

currentRow = 1

Ensuite, itérez sur les nœuds HTML pays, extrayez les données souhaitées et écrivez-les dans des cellules Excel à l’aide de la fonction Cells() :

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.FindElementByCss(".country-name").Text

capital = countryHTMLElement.FindElementByCss(".country-capital").Text

population = countryHTMLElement.FindElementByCss(".country-population").Text

area = countryHTMLElement.FindElementByCss(".country-area").Text

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

Incroyable ! Vous êtes prêt à jeter un coup d’œil au code final du web scraping Excel.

Étape 9 : Assembler le tout

Votre module VBA de web scraping devrait maintenant contenir :

Sub scrape_countries()

' initialize a Selenium WebDriver instance

Dim driver As New WebDriver

' enable the "headless" mode

driver.SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"

' open a new Edge window

driver.Start "Edge"

' navigate to the target page

driver.Get "https://www.scrapethissite.com/pages/simple/"

' select all country HTML nodes on the page

Dim countryHTMLElements As WebElements

Set countryHTMLElements = driver.FindElementsByCss(".country")

' counter to the current row

Dim currentRow As Integer

currentRow = 1

' iterate over each country HTML node and

' apply the Excel scraping logic

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.FindElementByCss(".country-name").Text

capital = countryHTMLElement.FindElementByCss(".country-capital").Text

population = countryHTMLElement.FindElementByCss(".country-population").Text

area = countryHTMLElement.FindElementByCss(".country-area").Text

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

' close the current driver window

driver.Quit

End Sub

Lancez-le et attendez que l’exécution du module soit terminée. À la fin du script VBA, la feuille de calcul Excel contiendra :

La feuille Excel contenant les données

Ce fichier contient les mêmes données que le site cible, mais dans un format semi-structuré. L’analyse et le filtrage de ces données seront désormais beaucoup plus faciles grâce aux étonnantes capacités d’Excel.

Et voilà ! En moins de 100 lignes de code VBA, vous venez de créer un outil de web scraping avec Excel !

Pour en savoir plus, consultez notre guide sur le fonctionnement du web scraping dans Excel.

Approche traditionnelle du web scraping en VBA avec Internet Explorer

Si vous utilisez une ancienne version de Windows, vous pouvez effectuer du web scraping en VBA avec Internet Explorer.

Il vous suffit d’activer les références « Microsoft HTML Object Library » et « Microsoft Internet Controls » :

Activez « Microsoft HTML Object Library » et « Microsoft Internet Controls »

Notez que ces deux packages sont intégrés dans Excel, vous ne devez donc pas installer de bibliothèques supplémentaires cette fois-ci.

Vous pouvez ensuite obtenir le même résultat que précédemment avec le code VBA suivant pour le web scraping :

Sub scrape_countries()

' start Internet Explorer

Dim browser As InternetExplorer

Set browser = New InternetExplorer

' enable the "headless" mode

browser.Visible = False

'visit the target page

browser.navigate "https://www.scrapethissite.com/pages/simple/"

' wait for the browser to load the page

Do: DoEvents: Loop Until browser.readyState = 4

' get the current page

Dim page As HTMLDocument

Set page = browser.document

' retrieve all country HTML nodes on the page

Dim countryHTMLNodes As Object

Set countryHTMLElements = page.getElementsByClassName("country")

' counter to the current row

Dim currentRow As Integer

currentRow = 1

' iterate over each country HTML node and

' apply the Excel scraping logic

For Each countryHTMLElement In countryHTMLElements

' where to store the scraped data

Dim name, capital, population, area As String

' data retrieval logic

name = countryHTMLElement.getElementsByClassName("country-name")(0).innerText

capital = countryHTMLElement.getElementsByClassName("country-capital")(0).innerText

population = countryHTMLElement.getElementsByClassName("country-population")(0).innerText

area = countryHTMLElement.getElementsByClassName("country-area")(0).innerText

' write the scraped data in Excel cells

Cells(currentRow, 1).Value = name

Cells(currentRow, 2).Value = capital

Cells(currentRow, 3).Value = population

Cells(currentRow, 4).Value = area

' increment the row counter

currentRow = currentRow + 1

Next countryHTMLElement

' close the current Internext Explorer window

browser.Quit

End Sub

Exécutez ce module VBA et vous obtiendrez le même résultat que précédemment. Fantastique, n’est-ce pas ? Vous venez de faire du web scraping Excel avec Internet Explorer.

Conclusion

Dans ce guide, vous avez appris ce qu’est VBA et comment vous en servir pour faire du web scraping dans Excel. La principale difficulté est que la bibliothèque d’automatisation du navigateur VBA repose sur Internet Explorer qui n’est plus pris en charge. Vous avez exploré une approche équivalente pour automatiser la récupération de données dans Excel avec VBA en utilisant Selenium. Vous avez également vu l’approche héritée pour les anciennes versions de Windows.

Gardez aussi à l’esprit qu’il y a de nombreux défis à prendre en compte lorsque vous souhaitez faire du web scraping. En particulier, la plupart des sites adoptent des solutions anti-scraping et anti-bot qui peuvent détecter et bloquer votre script de web scraping VBA. Évitez-les tous grâce à notre Scraping Browser. Ce navigateur de nouvelle génération s’intègre à Selenium et peut gérer automatiquement la résolution des CAPTCHA, l’empreinte du navigateur, les tentatives automatisées, et bien plus encore !

Vous n’avez peut-être pas le temps ou les ressources nécessaires pour faire vous-même du web scraping, mais vous avez besoin de données au format Excel ?Découvrez nos ensembles de données prêts à l’emploi.. Vous ne savez pas quelle solution de données choisir ? Contactez-nous dès aujourd’hui !