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 :
- Se connectent à une page web dans un navigateur.
- Analysent son contenu HTML.
- Extraient des données.
- É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 :
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 :
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 :
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\
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 :
À 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 :
Ensuite, sélectionnez « Options » comme ci-dessous :
Sur la fenêtre « Options », accédez à l’onglet « Ruban personnalisé » et cochez l’option « Développeur » dans la section « Onglets principaux » :
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 » :
La fenêtre suivante apparaît :
Cliquez sur « Insérer » dans le menu supérieur et ensuite sur « Module » pour initialiser votre module de scraping VBA :
Voici ce que vous devriez voir en ce moment :
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… »
Sur la fenêtre pop-up, trouvez la « Bibliothèque de type Selenium » et cochez-la :
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 :
Cela fera apparaître la fenêtre Edge suivante :
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 » :
Ici, vous pouvez voir que chaque élément HTML de « country » est un
.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 :
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 » :
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 !
Aucune carte de crédit requise