Aller au contenu principal

Qu'est-ce que la fonction IMPORTXML ?

Définition
La fonction IMPORTXML (Google Sheets uniquement) envoie une requête HTTP GET vers une URL publique, analyse le code HTML ou XML retourné, et extrait les noeuds correspondant à une expression XPath.

IMPORTXML te sert dès que tu dois récupérer des informations publiées sur un site web sans copier-coller à la main ni écrire une ligne de code, et sans attendre qu'un développeur te fasse un export. C'est l'un des atouts les plus puissants de Google Sheets pour transformer une veille manuelle en flux qui se met à jour tout seul.

Des analystes SEO qui veulent auditer des centaines de balises meta, des e-commerçants qui surveillent les prix de leurs concurrents, des veilleurs stratégiques qui agrègent des flux d'actualités, des logisticiens qui intègrent des données météo dans leur planning : IMPORTXML transforme un tableur en véritable outil de collecte web automatisée.

Syntaxe

=IMPORTXML(url; requête_xpath)

Clique sur un argument pour aller à son explication.

IMPORTXML ne fonctionne qu'avec le HTML statique retourné directement par le serveur. Le contenu généré dynamiquement par JavaScript (frameworks React, Vue, Angular) n'est pas accessible : la fonction ne peut pas exécuter le JavaScript de la page. C'est la limitation critique à garder en tête avant de déployer une solution de scraping.

Lucas, la mascotte du Dojo, inspecte les arguments de la fonction à la loupe

Comprendre chaque paramètre de la fonction IMPORTXML

IMPORTXML attend deux arguments, et les deux sont obligatoires : d'abord l'adresse de la page à interroger, ensuite la requête XPath qui dit quoi y prélever. Aucun des deux n'est facultatif, donc une formule qui plante a presque toujours un de ces deux maillons mal ficelé : une URL inaccessible publiquement, ou un XPath qui ne tombe sur rien.

1

url

: l'URL complète de la page web à analyser

Elle doit commencer par http:// ou https:// et être accessible publiquement sans authentification, paywall ni cookies de session.

IMPORTXML envoie une requête HTTP GET vers cette adresse et analyse le code source retourné. Si le site utilise une redirection ou nécessite un en-tête HTTP particulier, la fonction peut échouer sans message d'erreur explicite.

2

requête_xpath

: une expression XPath qui identifie précisément les éléments HTML ou XML à extraire

XPath (XML Path Language) est un langage de requête standardisé pour naviguer dans la structure arborescente d'un document.

Quelques expressions courantes : "//h1" (tous les titres h1), "//table" (tous les tableaux HTML), "//div[@class='prix']" (divs avec la classe exacte "prix"), "//span[contains(@class,'price')]" (spans dont la classe contient "price"), "//meta[@name='description']/@content" (contenu de la balise meta description), "//a/@href" (tous les href de liens), "//table//tr[2]/td" (cellules de la 2e ligne d'un tableau).

Attention : IMPORTXML ne peut pas accéder aux pages protégées par un login, un mot de passe ou des cookies de session. Pour les sites qui bloquent activement les requêtes automatisées, tu verras une erreur #N/A ou un message "Imported content is empty".

Le conseil du pro
Avant de coller un XPath dans IMPORTXML, teste-le dans la console de ton navigateur (touche F12) en tapant $x("//ton/xpath") : elle te renvoie les éléments trouvés. C'est bien plus rapide que de tâtonner formule après formule dans la feuille.
Lucas, la mascotte du Dojo, fait une démonstration pas à pas de la fonction dans Excel

Exemples pratiques pas à pas

Exemple 1

Comment extraire une liste d'éléments avec la fonction IMPORTXML

Un de tes fournisseurs met son catalogue en ligne au format XML, à une adresse qui ne bouge pas. Tu veux rapatrier ses produits dans ta feuille sans copier-coller à la main, et garder une extraction facile à relire et à modifier. Le fichier catalogue.xml décrit quatre produits : chacun vit dans une balise produit qui contient un nom, un prix et un stock, avec en plus une référence rangée en attribut. Pour démarrer simplement, tu veux juste la liste des noms.

Les étapes
  1. 1
    Dans une cellule, écris =IMPORTXML(.
  2. 2
    En 1er argument : clique sur la cellule où tu as collé l'adresse du fichier, A1. Ranger l'URL dans une cellule plutôt que de la taper dans la formule te permet de la réutiliser pour chaque extraction sans jamais la ressaisir.
  3. 3
    En 2ᵉ argument : clique sur la cellule qui contient le XPath, B1. Elle affiche //produit/nom, un chemin qui se lit comme une adresse dans l'arbre du fichier. Le début //produit vise chaque balise produit où qu'elle se trouve, et /nom descend ensuite sur son enfant nom.
  4. 4
    Ferme la parenthèse et appuie sur Entrée. Les quatre noms se déversent tout seuls de A2 à A5, car tu ne remplis qu'une cellule et IMPORTXML pose les lignes suivantes en dessous.
Au final, ta formule devrait ressembler à ça :=IMPORTXML(A1;B1)
Explication
Le XPath //produit/nom décrit un chemin dans l'arbre du fichier : //produit vise chaque balise produit, où qu'elle se trouve dans le document, et /nom descend ensuite sur son enfant nom. Les quatre produits du catalogue possèdent un nom, donc tous les noeuds qui correspondent au chemin ressortent, pas seulement le premier : Clavier, Souris, Ecran puis Casque se déversent de A2 à A5, une valeur par ligne. IMPORTXML restitue le texte tel qu'il est écrit dans le fichier, c'est pourquoi Ecran revient sans accent.
Exemple 2

Comment extraire une colonne de valeurs avec la fonction IMPORTXML

Tu as déjà sorti la liste des noms, il te faut maintenant la colonne des prix pour préparer un comparatif. Le fichier est le même, seul le champ visé change. Plutôt que de repartir de zéro, tu vas garder ta formule et ne toucher qu'au chemin XPath pour pointer un autre bout de chaque produit.

Les étapes
  1. 1
    Dans une cellule, écris =IMPORTXML(.
  2. 2
    En 1er argument : clique sur la cellule qui contient l'adresse du fichier, A1. C'est le même catalogue que pour la liste des noms, car d'un exemple à l'autre seule la donnée visée change, jamais le fichier lu.
  3. 3
    En 2ᵉ argument : clique sur la cellule qui contient le XPath, B1. Elle affiche //produit/prix, dont le début //produit est identique à l'exemple précédent. C'est seulement le dernier maillon qui passe de /nom à /prix, ce qui vise le prix de chaque produit au lieu de son nom.
  4. 4
    Ferme la parenthèse et appuie sur Entrée. Les quatre prix se déversent de A2 à A5 dans le même ordre que les produits, et changer la seule fin du chemin XPath a suffi à récupérer un autre champ du même noeud.
Voici la formule que tu obtiens à la fin :=IMPORTXML(A1;B1)
Explication
On garde le même chemin //produit, mais on remplace le dernier maillon : /prix cible cette fois l'enfant prix de chaque produit au lieu de son nom. Le reste ne bouge pas, et les quatre valeurs tombent dans le même ordre que les produits : 45, 25, 180 puis 60, de A2 à A5. Retiens qu'il suffit de changer la fin du chemin pour viser un autre champ du même noeud.
Exemple 3

Comment extraire un attribut avec la fonction IMPORTXML

Il te manque les références produits pour relier ce catalogue à ton propre fichier de stock. Le souci : le fournisseur ne les a pas mises dans une balise à part, il les a écrites comme attribut, directement dans la balise ouvrante <produit ref="CLV-01">. Un attribut ne se récupère pas comme un élément, et c'est justement là que la plupart des débutants en XPath se cassent les dents.

Les étapes
  1. 1
    Dans une cellule, écris =IMPORTXML(.
  2. 2
    En 1er argument : clique sur la cellule qui contient l'adresse du fichier, A1. C'est encore le même catalogue, et c'est le XPath seul qui va aller chercher une autre information sur chaque produit.
  3. 3
    En 2ᵉ argument : clique sur la cellule qui contient le XPath, B1. Elle affiche //produit/@ref, et l'arobase change tout. Ici @ref ne désigne pas une balise enfant mais un attribut, c'est-à-dire une valeur écrite à l'intérieur de la balise ouvrante <produit ref="CLV-01">, ce qui piège presque tous les débutants en XPath.
  4. 4
    Ferme la parenthèse et appuie sur Entrée. Les quatre références CLV-01, SOU-02, ECR-03 et CAS-04 se déversent de A2 à A5, alors qu'un chemin sans arobase comme //produit/ref chercherait une balise enfant <ref> qui n'existe pas et ne renverrait rien.
Une fois les morceaux assemblés, ta formule donne ça :=IMPORTXML(A1;B1)
Explication
Ici le chemin se termine par @ref, et l'arobase change tout : elle demande un attribut, pas un élément. Dans le fichier, la référence n'est pas une balise enfant mais une mention rangée dans la balise ouvrante, <produit ref="CLV-01">. Le XPath //produit/@ref va donc chercher cette valeur d'attribut sur chaque produit et renvoie CLV-01, SOU-02, ECR-03 puis CAS-04. Sans l'arobase, //produit/ref chercherait une balise ref qui n'existe pas, et la formule ne trouverait rien.
Exemple 4

Comment filtrer les résultats avec un prédicat avec la fonction IMPORTXML

Ton catalogue s'allonge et tu ne veux plus tout importer : seulement les produits qui dépassent un certain prix, ici ceux à plus de 50. Tu pourrais tout ramener puis filtrer dans la feuille, mais XPath sait poser la condition directement dans la requête, avant même que les données n'arrivent dans ta feuille.

Les étapes
  1. 1
    Dans une cellule, écris =IMPORTXML(.
  2. 2
    En 1er argument : clique sur la cellule qui contient l'adresse du fichier, A1. Le fichier reste le même, c'est la requête qui va se charger de filtrer avant que les données n'arrivent dans la feuille.
  3. 3
    En 2ᵉ argument : clique sur la cellule qui contient le XPath, B1. Elle affiche //produit[prix>50]/nom, où les crochets posent une condition sur le noeud. //produit[prix>50] ne retient que les balises produit dont l'enfant prix dépasse 50, puis /nom prend le nom de celles qui restent.
  4. 4
    Ferme la parenthèse et appuie sur Entrée. Seuls Ecran et Casque s'affichent, en A2 et A3, parce que le clavier à 45 et la souris à 25 n'ont pas passé la condition et ne ressortent donc pas.
En mettant tout bout à bout, tu écris :=IMPORTXML(A1;B1)
Explication
Les crochets [prix>50] posent une condition sur le noeud produit avant d'aller plus loin : seuls les produits dont l'enfant prix dépasse 50 sont retenus, et /nom prend ensuite le nom de ceux qui restent. Sur les quatre produits, seuls l'écran (prix 180) et le casque (prix 60) passent le test ; le clavier (45) et la souris (25) sont écartés. La formule ne renvoie donc que deux lignes, Ecran puis Casque, en A2 et A3. C'est tout l'intérêt du prédicat entre crochets : filtrer à la source, dans la requête elle-même.
Lucas, la mascotte du Dojo, l'air gêné face à une erreur Excel

Les erreurs fréquentes avec la fonction IMPORTXML

Avec IMPORTXML, les ennuis viennent rarement de la formule elle-même : c'est la page distante qui décide. Soit ton XPath ne trouve rien (#N/A), soit le site bloque la requête de Google Sheets et renvoie « Imported content is empty », soit tu butes sur les limites maison du tableur.

Les deux dernières te surprennent quand tout marchait : Google plafonne à environ 50 fonctions IMPORT* par feuille, et il met les résultats en cache pendant une heure, ce qui donne l'impression que les données sont figées alors qu'elles sont juste en attente.

Erreur #N/A - Aucun élément trouvé par le XPath

Ta requête XPath n'a trouvé aucun élément correspondant dans le HTML de la page. Les causes sont nombreuses : XPath incorrect ou trop spécifique, structure HTML qui a changé depuis la création de la formule, classe CSS générée dynamiquement par JavaScript, ou contenu qui n'existe que côté client.

Solution : Vérifie ton XPath avec les outils de développement du navigateur (F12, console, $x("//ton/xpath")). Assure-toi que le contenu existe bien dans le code source (Ctrl+U, pas via F12 qui montre le DOM modifié par JS). Essaie un XPath plus générique avec contains() plutôt qu'une égalité stricte.

Contenu vide ou message "Imported content is empty"

Le site bloque activement les requêtes automatisées. Il détecte que la requête vient de Google Sheets (via le User-Agent) et retourne une page vide ou une erreur 403. Certains sites ont aussi des mesures de sécurité CORS ou de rate limiting.

Solution : Vérifie le fichier robots.txt du site pour voir s'il autorise le scraping. Pour les sites qui bloquent systématiquement, tu devras utiliser Google Apps Script avec UrlFetchApp qui offre plus de contrôle sur les en-têtes HTTP, ou un service de scraping professionnel qui gère l'anti-bot.

Données incomplètes, décalées ou mal alignées dans les colonnes

La structure HTML est irrégulière : certaines lignes d'un tableau ont un nombre différent de colonnes, ou ton XPath capture des éléments avec des structures hétérogènes. IMPORTXML retourne alors des résultats partiels ou décalés.

Solution : Affine ton XPath avec des prédicats comme [position()=1] ou [@class='specific'] pour cibler précisément les noeuds voulus. Si tu extrais un tableau HTML complet, essaie IMPORTHTML plutôt qu'IMPORTXML : il gère mieux les structures de tableaux réguliers.

Formules très lentes ou erreurs de quota dépassé

Google Sheets impose une limite d'environ 50 fonctions IMPORT* (IMPORTXML, IMPORTHTML, IMPORTDATA, IMPORTRANGE) par feuille. Au-delà, certaines échouent avec des erreurs de timeout ou "Service invoked too many times".

Solution : Limite-toi à 50 fonctions IMPORT* maximum par feuille. Utilise des requêtes XPath plus larges pour récupérer plusieurs données en une seule requête. Une fois les données stables, copie-colle en valeurs seulement (Ctrl+Maj+V) pour figer les résultats et supprimer les formules actives.

Les données ne se mettent pas à jour automatiquement

Google Sheets met en cache les résultats IMPORTXML pendant environ 1 heure pour éviter de surcharger les serveurs cibles. Si tu veux voir les dernières données, la feuille semble figée.

Solution : Force le refresh en ajoutant un paramètre aléatoire à l'URL : =IMPORTXML(A1&"?t="&RAND(); "//h1"). Attention, cela requête le serveur à chaque recalcul. Pour des mises à jour planifiées, programme un refresh via Google Apps Script plutôt que de laisser toutes les formules actives en permanence.

Le chiffre clé
Google Sheets plafonne à une cinquantaine de fonctions IMPORT par feuille, IMPORTXML, IMPORTHTML, IMPORTDATA et IMPORTRANGE confondues. Au-delà, certaines tombent en timeout : regroupe tes extractions dans des XPath plus larges, ou fige les résultats en collage de valeurs.
Lucas, la mascotte du Dojo, compare deux fonctions Excel

IMPORTXML vs IMPORTHTML vs IMPORTDATA vs IMPORTRANGE

Choisis IMPORTXML quand tu dois extraire des données spécifiques (prix, titres, balises meta, liens) avec un ciblage XPath précis. Utilise IMPORTHTML pour importer un tableau ou une liste HTML complète sans personnalisation. IMPORTDATA est le plus simple pour des CSV/TSV bruts depuis une URL. IMPORTRANGE connecte uniquement deux Google Sheets entre elles.

CritèreIMPORTXMLIMPORTHTMLIMPORTDATAIMPORTRANGE
Source de donnéesPages HTML ou XMLTableaux ou listes HTMLFichiers CSV ou TSVAutre Google Sheet
CiblageXPath (très précis)Numéro de tableau ou listeAucun (import complet)Plage de cellules
FlexibilitéMaximaleMoyenneLimitéeMoyenne
DifficultéAvancée (nécessite XPath)FacileTrès facileFacile
Cas d'usage typiqueAudit SEO, veille prix, flux RSSImporter un tableau de statistiquesFichiers de données publiquesConsolider plusieurs feuilles
Lucas, la mascotte du Dojo, avec une ampoule, partage des astuces avancées

Astuces avancées avec IMPORTXML

1Astuce

Combine IMPORTXML avec REGEXEXTRACT pour nettoyer les résultats

Les données extraites contiennent souvent des caractères parasites (espaces, symboles monétaires, unités). Enveloppe ton IMPORTXML dans REGEXEXTRACT pour isoler la partie qui t'intéresse : =REGEXEXTRACT(IMPORTXML(A2;"//span[@class='prix']");"[0-9,.]+") extrait uniquement les chiffres d'un prix.
Utilise SUBSTITUTE pour supprimer un symbole spécifique, et IFERROR pour remplacer les erreurs #N/A par une valeur par défaut propre.

2Astuce

Construis un sélecteur XPath dynamique depuis une cellule

Pour rendre tes requêtes paramétrables, construis ton XPath en concaténant du texte fixe et une référence de cellule : =IMPORTXML(A2;"//div[@class='"&B2&"']") où B2 contient le nom de classe CSS à cibler.
Cela te permet de créer une feuille de configuration avec une liste de classes ou d'attributs, et de modifier le ciblage sans toucher aux formules elles-mêmes.

3Astuce

Automatise les refreshs programmés avec Google Apps Script

Pour contourner le cache d'1 heure de IMPORTXML, crée un script Apps Script qui supprime et recrée les formules à intervalles réguliers, ou qui utilise UrlFetchApp directement pour récupérer les données avec plus de contrôle sur les en-têtes HTTP.
Cette approche est la solution recommandée pour du scraping sérieux à grande échelle : tu définis toi-même la fréquence de refresh, tu gères les erreurs et tu peux parser du JSON en plus du XML.

FAQ

Questions fréquentes

Non, IMPORTXML est une fonction exclusive à Google Sheets. Dans Excel, il n'existe pas d'équivalent natif pour importer des données web via XPath. Tu peux utiliser Power Query (Données > Obtenir des données > À partir du web) pour importer des tableaux HTML, ou créer des macros VBA pour du web scraping plus personnalisé. C'est l'une des différences majeures entre les deux outils pour l'automatisation de la collecte de données.

Ressources

Pour aller plus loin

Continue sur ta lancée après la fonction IMPORTXML : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.

Tout voir