Automatiser l’extraction de données à partir de pages Web, Excel VBA

Automatiser l’extraction de données à partir de pages Web, Excel VBA

Automatiser l’extraction de données à partir de pages Web dans Excel avec VBA (Visual Basic for Applications) implique généralement l’utilisation de la bibliothèque « Microsoft HTML Object Library » et « Microsoft Internet Controls ». Ces bibliothèques vous permettent d’automatiser la navigation dans des pages Web, d’extraire du contenu et de l’insérer dans des cellules Excel.
Voici un exemple détaillé de code VBA qui vous montre comment automatiser l’extraction de données à partir d’une page Web (par exemple, une page contenant un tableau de données) et les insérer dans un classeur Excel :
1. Préparer votre environnement
Avant de commencer, vous devez activer certaines références dans VBA pour utiliser les objets nécessaires à l’automatisation web. Voici les étapes pour le faire :
1. Ouvrez votre fichier Excel.
2. Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
3. Dans l’éditeur VBA, allez dans Outils > Références.
4. Cochez les options suivantes :
Microsoft HTML Object Library
Microsoft Internet Controls
Cela permettra d’utiliser les objets nécessaires pour interagir avec les pages Web.
2. Exemple de Code VBA pour l’Extraction de Données à partir d’une Page Web

Sub ExtraireDonneesPageWeb()
' Déclarer les variables
Dim IE As Object
Dim HTMLDoc As Object
Dim Tables As Object
Dim Table As Object
Dim Row As Object
Dim Cell As Object
Dim i As Integer, j As Integer
' Créer une nouvelle instance d'Internet Explorer
Set IE = CreateObject("InternetExplorer.Application")
' Ne pas afficher l'interface utilisateur d'Internet Explorer
IE.Visible = False
' Ouvrir la page Web
IE.navigate "http://www.exemple.com" ' Remplacer par l'URL de la page cible
' Attendre que la page soit complètement chargée
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
' Récupérer le document HTML de la page
Set HTMLDoc = IE.document
' Trouver toutes les tables dans la page
Set Tables = HTMLDoc.getElementsByTagName("table")
' Boucler à travers toutes les tables pour extraire les données
For Each Table In Tables
' Vous pouvez ajouter ici des filtres pour cibler une table spécifique
' Ici, on prend la première table trouvée
If Table.Rows.Length > 0 Then
' Parcourir chaque ligne du tableau
i = 1 ' Démarrer à la première ligne dans Excel
For Each Row In Table.Rows
j = 1 ' Démarrer à la première colonne dans Excel
' Parcourir chaque cellule de la ligne
For Each Cell In Row.Cells
' Insérer les données de la cellule dans le classeur Excel
ThisWorkbook.Sheets(1).Cells(i, j).Value = Cell.innerText
j = j + 1
Next Cell
' Passer à la ligne suivante dans Excel
i = i + 1
Next Row
End If
Next Table
' Fermer Internet Explorer
IE.Quit
' Libérer les objets
Set IE = Nothing
Set HTMLDoc = Nothing
Set Tables = Nothing
Set Table = Nothing
Set Row = Nothing
Set Cell = Nothing
MsgBox "Données extraites avec succès!"
End Sub

3. Explication du Code
a. Créer une instance d’Internet Explorer

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.navigate "http://www.exemple.com"

• Cette partie crée une instance d’Internet Explorer (IE) et la rend invisible (Visible = False), car vous n’avez pas besoin de l’afficher à l’utilisateur.
• La méthode navigate charge la page Web spécifiée.
b. Attendre que la page soit complètement chargée

Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop

• Cette boucle attend que la page soit complètement chargée avant de continuer. Cela assure que l’HTML de la page est prêt à être extrait.
c. Accéder au contenu de la page HTML
Set HTMLDoc = IE.document

• Cette ligne permet d’accéder au document HTML de la page Web.
d. Extraire les tables de la page

Set Tables = HTMLDoc.getElementsByTagName("table")

• La méthode getElementsByTagName(« table ») récupère toutes les tables présentes dans le document HTML.
e. Parcourir chaque table et extraire les données

For Each Table In Tables
' Vérifier que la table a des lignes
If Table.Rows.Length > 0 Then
i = 1 ' Démarrer à la première ligne dans Excel
For Each Row In Table.Rows
j = 1 ' Démarrer à la première colonne dans Excel
For Each Cell In Row.Cells
' Insérer les données dans le classeur
ThisWorkbook.Sheets(1).Cells(i, j).Value = Cell.innerText
j = j + 1
Next Cell
i = i + 1
Next Row
End If
Next Table

• Le code boucle à travers toutes les tables sur la page Web.
• Pour chaque table, il parcourt chaque ligne et chaque cellule.
• Les données de chaque cellule (Cell.innerText) sont ensuite insérées dans les cellules d’Excel à partir de la première feuille (Sheets(1)).
f. Fermer Internet Explorer et libérer les objets

IE.Quit
Set IE = Nothing
Set HTMLDoc = Nothing

• Une fois que toutes les données sont extraites, le navigateur IE est fermé et les objets sont libérés pour éviter des fuites de mémoire.
4. Personnalisation
• Si vous souhaitez extraire des données spécifiques, vous pouvez affiner le sélecteur des tables ou des éléments en fonction de leur id, class, ou de tout autre attribut HTML.
• Par exemple, pour cibler une table spécifique, vous pouvez utiliser getElementById :

Set Table = HTMLDoc.getElementById("id_de_la_table")

5. Limitations et Précautions
• Le code suppose que la structure de la page Web est relativement stable. Si la page change fréquemment, il pourrait être nécessaire d’ajuster les sélecteurs ou de vérifier la structure HTML.
• Si la page Web utilise JavaScript pour charger dynamiquement les données, il se peut que le contenu ne soit pas disponible immédiatement après le chargement de la page. Dans ce cas, il peut être nécessaire d’ajouter des délais ou d’utiliser des outils comme Selenium pour gérer les pages dynamiques.
Ce code offre une bonne base pour commencer à automatiser l’extraction de données à partir de pages Web dans Excel avec VBA.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x