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.