4 méthodes efficaces pour extraire des tableaux HTML vers Excel (manuel et automatisé)

2025-08-20 09:02:21 zaki zou

Extraire des tableaux HTML vers Excel

Aperçu

L'extraction de tableaux HTML dans Excel est une exigence courante pour les analystes de données, les chercheurs, les développeurs et les professionnels qui travaillent fréquemment avec des données Web structurées. Les tableaux HTML contiennent souvent des informations précieuses telles que des rapports financiers, des catalogues de produits, des résultats de recherche ou des statistiques de performance. Cependant, transférer ces données dans Excel dans un format propre et utilisable peut être délicat, en particulier lorsqu'il s'agit de tableaux complexes comprenant des cellules fusionnées (rowspan, colspan), des en-têtes imbriqués ou de grands ensembles de données.

Heureusement, il existe plusieurs approches pour convertir des tableaux HTML en fichiers Excel. Ces méthodes vont des actions rapides et manuelles de copier-coller, adaptées aux petites tâches, aux scripts entièrement automatisés utilisant VBA ou Python pour des travaux à grande échelle ou récurrents.

Dans cet article, nous explorerons quatre méthodes efficaces pour extraire des tableaux HTML vers Excel :

  1. Copier-coller manuel (méthode la plus simple)
  2. Fonctionnalité intégrée « À partir du Web » d'Excel
  3. Macro VBA (Automatisation d'Excel)
  4. Python (BeautifulSoup + Spire.XLS)

Enfin, nous comparerons ces approches dans un tableau récapitulatif pour vous aider à choisir la meilleure méthode en fonction de votre cas d'utilisation.

Copier-coller manuel (Méthode la plus simple)

Pour les extractions ponctuelles et de petite taille, l'option la plus simple est d'utiliser le copier-coller directement depuis votre navigateur vers Excel.

Copier un tableau HTML

Étapes :

  1. Ouvrez la page HTML dans un navigateur (par ex., Chrome, Edge ou Firefox).
  2. Surlignez le tableau que vous souhaitez extraire.
  3. Copiez-le avec Ctrl+C (ou clic droit → Copier).
  4. Ouvrez Excel et collez avec Ctrl+V.

Avantages :

  • Extrêmement simple — aucune configuration ni codage requis.
  • Fonctionne instantanément pour les petits tableaux propres.

Inconvénients :

  • Processus manuel — fastidieux et inefficace pour les ensembles de données fréquents ou volumineux.
  • Ne préserve pas toujours les cellules fusionnées ou la mise en forme.
  • Ne peut pas gérer de manière fiable les tableaux dynamiques (rendus par JavaScript).

Quand l'utiliser : Idéal pour les petits tableaux, la collecte de données ad hoc ou des tests rapides.

Fonctionnalité intégrée « À partir du Web » d'Excel

Excel comprend un puissant outil « Obtenir et transformer des données » (anciennement Power Query) qui permet aux utilisateurs d'extraire des tableaux directement d'une page Web.

Fonctionnalité 'À partir du Web' d'Excel

Étapes :

  1. Ouvrez Excel.
  2. Allez dans DonnéesÀ partir du Web.
  3. Entrez l'URL de la page Web contenant le tableau.
  4. Excel affichera les tableaux détectés ; sélectionnez celui que vous voulez.
  5. Chargez les données dans votre feuille de calcul.

Avantages :

  • Intégration directe dans Excel — aucun outil externe requis.
  • Fonctionne bien pour les tableaux HTML structurés.
  • Prend en charge l'actualisation — peut extraire à nouveau les données mises à jour de la même source.

Inconvénients :

  • Prise en charge limitée du contenu dynamique ou rendu par JavaScript.
  • Échoue parfois à détecter les tableaux complexes.
  • Nécessite un accès Internet et une URL valide (pas pour les fichiers HTML locaux, sauf s'ils sont importés manuellement).

Quand l'utiliser : Idéal pour les analystes qui extraient des données structurées en direct de sites Web régulièrement mis à jour.

Macro VBA (Automatisation d'Excel)

Pour les utilisateurs qui extraient fréquemment des tableaux HTML et souhaitent plus de contrôle, VBA (Visual Basic for Applications) offre une excellente solution. VBA vous permet de récupérer des tableaux à partir d'une URL et de traiter correctement les cellules fusionnées, ce que le simple copier-coller ne peut pas gérer.

VBA pour extraire un tableau html vers excel

Étapes :

  1. Lancez Microsoft Excel.
  2. Appuyez sur Alt + F11 pour ouvrir l'éditeur VBA.
  3. Cliquez avec le bouton droit sur l'explorateur de projets → InsérerModule.
  4. Collez le code VBA fourni.
  5. Fermez l'éditeur VBA.
  6. Appuyez sur Alt + F8, sélectionnez le nom de la macro et cliquez sur Exécuter.

Exemple de code VBA :

Sub ExtractHTMLTableWithProperMerging()
    Dim html As Object, tables As Object, table As Object, row As Object, cell As Object
    Dim ws As Worksheet
    Dim iRow As Long, iCol As Long, realCol As Long
    Dim url As String
    Dim colspan As Integer, rowspan As Integer
    Dim cellTracker() As Boolean ' Suivre les cellules occupées

    ' Définir la feuille de calcul cible
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.ClearContents
    ws.Cells.UnMerge ' Effacer toutes les cellules fusionnées existantes

    ' Obtenir l'URL d'entrée
    url = InputBox("Entrez l'URL de la page Web :", "Extracteur de tableau HTML")
    If url = "" Then Exit Sub

    ' Charger le HTML
    Set html = CreateObject("htmlfile")
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        html.body.innerHTML = .responseText
    End With

    ' Obtenir le premier tableau (changer l'index si nécessaire)
    Set tables = html.getElementsByTagName("table")
    If tables.Length = 0 Then
        MsgBox "Aucun tableau trouvé !", vbExclamation
        Exit Sub
    End If
    Set table = tables(0)

    ' Initialiser le tableau de suivi des cellules
    Dim maxRows As Long, maxCols As Long
    maxRows = table.Rows.Length
    maxCols = 0
    For Each row In table.Rows
        If row.Cells.Length > maxCols Then maxCols = row.Cells.Length
    Next
    ReDim cellTracker(1 To maxRows, 1 To maxCols)

    ' Traiter le tableau
    iRow = 1
    For Each row In table.Rows
        realCol = 1 ' Suivre la position réelle de la colonne en tenant compte des rowspans

        ' Trouver la première colonne disponible dans cette ligne
        While realCol <= maxCols And cellTracker(iRow, realCol)
            realCol = realCol + 1
        Wend

        iCol = 1 ' Suivre la position logique de la colonne
        For Each cell In row.Cells
            ' Obtenir les attributs de fusion
            colspan = 1
            rowspan = 1
            On Error Resume Next ' Au cas où les attributs n'existeraient pas
            colspan = cell.colspan
            rowspan = cell.rowspan
            On Error GoTo 0

            ' Sauter les cellules déjà occupées (par un rowspan ci-dessus)
            While realCol <= maxCols And cellTracker(iRow, realCol)
                realCol = realCol + 1
            Wend

            If realCol > maxCols Then Exit For

            ' Écrire la valeur
            ws.Cells(iRow, realCol).Value = cell.innerText

            ' Marquer toutes les cellules qui seront occupées par cette cellule
            Dim r As Long, c As Long
            For r = iRow To iRow + rowspan - 1
                For c = realCol To realCol + colspan - 1
                    If r <= maxRows And c <= maxCols Then
                        cellTracker(r, c) = True
                    End If
                Next c
            Next r

            ' Fusionner les cellules si nécessaire
            If colspan > 1 Or rowspan > 1 Then
                With ws.Range(ws.Cells(iRow, realCol), ws.Cells(iRow + rowspan - 1, realCol + colspan - 1))
                    .Merge
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                End With
            End If

            realCol = realCol + colspan
            iCol = iCol + 1
        Next cell
        iRow = iRow + 1
    Next row

    ' Mise en forme
    ws.UsedRange.Columns.AutoFit
    ws.UsedRange.Borders.Weight = xlThin
    MsgBox "Tableau extrait avec fusion correcte !", vbInformation
End Sub

Avantages :

  • S'exécute entièrement dans Excel — aucun outil externe requis.
  • Gère les tableaux complexes avec des cellules fusionnées.
  • Peut être personnalisé pour plusieurs tableaux ou une exécution planifiée.

Inconvénients :

  • La configuration nécessite des connaissances en VBA.
  • Ne peut pas gérer les données rendues par JavaScript sans étapes supplémentaires.
  • Ne fonctionne que dans la version de bureau d'Excel (pas dans Excel Online).

Quand l'utiliser : Parfait pour les utilisateurs qui extraient régulièrement des tableaux similaires et souhaitent une solution en un clic.

Python (BeautifulSoup & Spire.XLS)

Pour les développeurs ou les utilisateurs expérimentés, Python offre la solution la plus flexible, évolutive et automatisée. Avec des bibliothèques comme BeautifulSoup pour l'analyse HTML et Spire.XLS for Python pour la manipulation d'Excel, vous pouvez récupérer, nettoyer et exporter des tableaux par programmation avec un contrôle total.

Étapes :

  1. Installez Python (3.8+ recommandé).
  2. Créez un nouveau projet dans votre IDE (par ex., VS Code, PyCharm).
  3. Installez les dépendances :
pip install requests beautifulsoup4 spire.xls
  1. Copiez et exécutez le script suivant.

Code Python :

import requests

from bs4 import BeautifulSoup
from spire.xls import Workbook, ExcelVersion

# Obtenir la chaîne HTML de l'URL
response = requests.get("https://cdn.e-iceblue.com/resource/sample.html")
html = response.text

# Analyser le HTML
soup = BeautifulSoup(html, "html.parser")
table = soup.find("table")  # Obtenir le premier tableau

# Initialiser Excel
workbook = Workbook()
sheet = workbook.Worksheets[0]

# Suivre les cellules fusionnées pour les ignorer plus tard
skip_cells = set()

# Parcourir les lignes et les cellules HTML
for row_idx, row in enumerate(table.find_all("tr")):
    col_idx = 1  # Les colonnes d'Excel commencent à 1
    for cell in row.find_all(["th", "td"]):
        # Ignorer les cellules déjà fusionnées
        while (row_idx + 1, col_idx) in skip_cells:
            col_idx += 1

        # Obtenir les valeurs de colspan/rowspan (par défaut 1 si absentes)
        colspan = int(cell.get("colspan", 1))
        rowspan = int(cell.get("rowspan", 1))

        # Écrire la valeur de la cellule dans Excel
        sheet.Range[row_idx + 1, col_idx].Text = cell.get_text(strip=True)

        # Fusionner les cellules si colspan/rowspan > 1
        if colspan > 1 or rowspan > 1:
            end_row = row_idx + rowspan
            end_col = col_idx + colspan - 1
            sheet.Range[row_idx + 1, col_idx, end_row, end_col].Merge()

            # Marquer les cellules fusionnées pour les ignorer
            for r in range(row_idx + 1, end_row + 1):
                for c in range(col_idx, end_col + 1):
                    if r != row_idx + 1 or c != col_idx:  # Ignorer la cellule principale
                        skip_cells.add((r, c))

        col_idx += colspan

# Ajuster automatiquement la largeur des colonnes dans toute la plage utilisée
sheet.AllocatedRange.AutoFitColumns()

# Enregistrer dans Excel
workbook.SaveToFile("TableToExcel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Avantages :

  • Contrôle total — peut analyser, nettoyer et transformer les données.
  • Gère correctement les cellules fusionnées.
  • Facilement adaptable à plusieurs tableaux ou sites web.
  • Automatisable pour des tâches planifiées ou des travaux par lots.

Inconvénients :

  • Nécessite l'installation de Python et des connaissances de base en programmation.
  • Plus de configuration que les solutions intégrées d'Excel.
  • Dépendances externes (BeautifulSoup, Spire.XLS).

Quand l'utiliser : Idéal pour les développeurs ou les utilisateurs avancés qui extraient régulièrement des tableaux volumineux ou complexes.

Sortie :

Python extrait des tableaux HTML vers Excel

Pour améliorer l'attrait visuel de la feuille de calcul Excel générée en Python, vous pouvez appliquer des styles aux cellules ou aux feuilles de calcul dans Excel.

Tableau récapitulatif : Meilleure méthode par cas d'utilisation

Méthode Idéal pour Avantages Inconvénients Automatisation ?
Copier-coller manuel Utilisation rapide et ponctuelle Rapide, sans configuration Pas d'automatisation, problèmes de formatage ❌Non
Excel À partir du Web Données structurées en direct Intégré, prend en charge l'actualisation Limité pour les tableaux dynamiques ❌Non
Macro VBA Tâches répétées dans Excel Automatise l'extraction, gère les fusions Nécessite des connaissances en VBA ✅Oui
Python (BeautifulSoup + Spire.XLS) Développeurs, tableaux volumineux/complexes Contrôle total, évolutif, automatisable Nécessite du codage et des dépendances ✅Oui

Réflexions finales

La méthode que vous choisissez dépend en grande partie de votre cas d'utilisation :

  • Si vous n'avez besoin de récupérer qu'un petit tableau occasionnellement, le copier-coller manuel est le plus rapide.
  • Si vous souhaitez extraire des données structurées d'une page Web qui se met à jour fréquemment, la fonction À partir du Web d'Excel est pratique.
  • Pour les utilisateurs professionnels qui travaillent quotidiennement dans Excel et souhaitent une automatisation, une macro VBA est idéale.
  • Pour les développeurs qui gèrent plusieurs ensembles de données ou des structures HTML complexes, Python avec BeautifulSoup et Spire.XLS offre la plus grande flexibilité et évolutivité.

En combinant ces méthodes avec votre flux de travail, vous pouvez économiser des heures d'efforts manuels et garantir une extraction de données plus propre et plus fiable dans Excel.

Voir aussi

Coupon Code Copied!

Christmas Sale

Celebrate the season with exclusive savings

Save 10% Sitewide

Use Code:

View Campaign Details