La fonction FILTRE.XML (FILTERXML en anglais) extrait des valeurs précises d'une chaîne XML en utilisant une expression XPath. Tu lui donnes du XML et un chemin d'accès, elle te renvoie la valeur correspondante.
C'est l'outil indispensable pour exploiter des données structurées XML dans Excel : flux RSS récupérés avec SERVICEWEB, exports de logiciels métier, réponses d'API ou fichiers de configuration. Combinée avec SERVICEWEB qui récupère le contenu d'une URL, elle permet de créer des connexions dynamiques à des sources XML directement depuis une cellule.
Syntaxe de la fonction FILTRE.XML
=FILTRE.XML(xml; xpath)FILTRE.XML est exclusif à Excel (pas disponible dans Google Sheets). Elle exige un XML bien formé : toutes les balises doivent être correctement ouvertes et fermées. Le HTML classique n'est généralement pas accepté.
Comprendre chaque paramètre de la fonction FILTRE.XML
FILTRE.XML attend deux arguments dans cet ordre : d'abord la chaîne XML à analyser, ensuite le chemin XPath qui pointe vers la valeur que tu veux. Les deux sont obligatoires, mais c'est le second qui te donnera du fil à retordre : //titre cherche n'importe où, //produit/@id vise un attribut, //item[1] cible une position précise.
xml
: une chaîne de texte au format XML valideÇa peut être une valeur saisie directement entre guillemets, une référence vers une cellule contenant du XML, ou le résultat de SERVICEWEB qui récupère du XML depuis une URL.
Le XML doit être bien formé : chaque balise ouvrante doit avoir sa balise fermante correspondante, les attributs doivent être entre guillemets, et les caractères spéciaux (<, >, &) doivent être encodés.
Attention : Si le XML est malformé (balises non fermées, caractères invalides), FILTRE.XML renvoie #VALEUR!. Valide ton XML avec un outil en ligne avant de l'utiliser dans la formule.
xpath
: l'expression XPath qui localise l'élément ou l'attribut voulu dans le XMLXPath (XML Path Language) utilise une syntaxe de chemin similaire aux chemins de fichiers.
Quelques expressions courantes : //element sélectionne tous les éléments de ce nom, /racine/enfant suit un chemin absolu, //element[1] cible le premier élément, //element/@attribut récupère la valeur d'un attribut, //element[last()] cible le dernier élément.
Astuce : Les noms d'éléments XPath sont sensibles à la casse : //Titre et //titre ne donnent pas le même résultat. Vérifie exactement les noms de balises dans ton XML source.
Exemples pratiques pas à pas
Analyste data : extraire un titre depuis un XML simple
Tu es analyste et tu reçois régulièrement des exports XML d'un logiciel métier. La cellule A1 contient ce XML : <livre><titre>Excel Avancé</titre><auteur>Jean</auteur></livre>. Tu veux extraire le titre et l'auteur dans des cellules séparées.
=FILTRE.XML(A1; "//titre") renvoie Excel Avancé, et =FILTRE.XML(A1; "//auteur") renvoie Jean. L'expression //titre signifie : trouve l'élément nommé titre, n'importe où dans le XML.
| A | B | |
|---|---|---|
| 1 | Formule | Resultat |
| 2 | =FILTRE.XML(A1; "//titre") | Excel Avance |
| 3 | =FILTRE.XML(A1; "//auteur") | Jean |
=FILTRE.XML(A1; "//titre")Responsable catalogue : extraire un attribut XML
Tu gères un catalogue produits et tu dois extraire les références SKU et les prix depuis des exports XML de ton ERP. Le XML en A1 est : <produit id="SKU123" prix="29.99">Clavier</produit>.
Le symbole @ dans le chemin XPath permet d'accéder aux attributs d'un élément. //produit/@id renvoie la valeur de l'attribut id, //produit/@prix renvoie la valeur de l'attribut prix, et //produit sans @ renvoie le contenu texte de l'élément.
| A | B | |
|---|---|---|
| 1 | Formule | Resultat |
| 2 | =FILTRE.XML(A1; "//produit/@id") | SKU123 |
| 3 | =FILTRE.XML(A1; "//produit/@prix") | 29.99 |
| 4 | =FILTRE.XML(A1; "//produit") | Clavier |
=FILTRE.XML(A1; "//produit/@id")Veilleur : récupérer le titre du premier article d'un flux RSS
Tu fais de la veille concurrentielle et tu veux afficher automatiquement le dernier article publié par un concurrent dans ton tableau de bord. SERVICEWEB récupère le flux RSS, FILTRE.XML en extrait le titre du premier article.
L'expression //item[1]/title signifie : dans les éléments item, prends le premier [1], puis descend dans son enfant title. Les crochets permettent de cibler un élément spécifique par sa position : [1] pour le premier, [2] pour le deuxième, [last()] pour le dernier.
| A | B | |
|---|---|---|
| 1 | Description | Formule |
| 2 | Recuperer le XML | =SERVICEWEB("https://exemple.com/rss") |
| 3 | Extraire le titre | =FILTRE.XML(A1; "//item[1]/title") |
=FILTRE.XML(SERVICEWEB("https://exemple.com/rss"); "//item[1]/title")Astuce de pro : Sans indice, FILTRE.XML renvoie par défaut le premier élément trouvé. Ajoute [2], [3]... pour accéder aux suivants. Utilise [last()] pour toujours cibler le dernier élément, peu importe le nombre d'items.
Envie de t'entraîner sur de vrais exercices Excel ?
M'entraînerLes erreurs fréquentes avec la fonction FILTRE.XML
Avec FILTRE.XML, tout finit en #VALEUR!, mais pour deux raisons opposées. Soit ton XML est cassé (une balise oubliée, un & non encodé en &) et la fonction n'arrive même pas à le lire. Soit le XML est nickel mais ton XPath ne trouve rien : le plus souvent une histoire de casse, car //Titre et //titre sont deux chemins distincts.
Erreur #VALEUR! sur un XML malformé
Le contenu XML passé à FILTRE.XML n'est pas bien formé : balises non fermées, caractères spéciaux non encodés (& au lieu de &, < au lieu de <), ou structure incorrecte.
Solution : Valide ton XML avec un outil en ligne (xmlvalidation.com ou jsonformatter.org/xml-validator) avant de l'utiliser. Vérifie que toutes les balises sont correctement fermées et que les caractères spéciaux sont encodés.
Erreur #VALEUR! alors que le XML est valide
L'expression XPath ne correspond à aucun élément dans le XML. Les noms d'éléments XPath sont sensibles à la casse : //Titre et //titre sont deux chemins différents. Une faute de frappe dans le nom d'un élément suffit à ne rien trouver.
Solution : Vérifie exactement les noms de balises dans le XML source, en respectant les majuscules et minuscules. Compare lettre par lettre le nom dans ton XPath avec le nom dans le XML.
FILTRE.XML vs SERVICEWEB vs Power Query vs IMPORTXML
FILTRE.XML analyse du XML déjà récupéré. SERVICEWEB fait la récupération. Pour du HTML ou des transformations complexes, Power Query est plus robuste. IMPORTXML est l'équivalent Google Sheets.
| Critere | FILTRE.XML | SERVICEWEB | Power Query | IMPORTXML (Sheets) |
|---|---|---|---|---|
| Role | Extraire depuis du XML | Recuperer le contenu d'une URL | Importer et transformer des données | Recuperer + extraire (Google Sheets) |
| Disponibilite | Excel 2013+ | Excel 2013+ | Excel 2016+ | Google Sheets uniquement |
| HTML accepte | Non (XML strict) | Oui (recupere tel quel) | Oui | Oui |
| Mise a jour auto | Au recalcul | Au recalcul | Manuel ou planifie | Automatique |
Questions fréquentes sur la fonction FILTRE.XML
Qu'est-ce que XPath ?
XPath (XML Path Language) est un langage de requête pour naviguer dans des documents XML. Il utilise une syntaxe de chemin similaire aux chemins de fichiers. Par exemple, //livre/titre sélectionne tous les éléments titre qui sont enfants d'éléments livre, n'importe où dans le document.
Quelle version d'Excel supporte FILTRE.XML ?
FILTRE.XML est disponible depuis Excel 2013. C'est une fonction relativement ancienne par rapport aux fonctions matricielles dynamiques. Elle fonctionne dans Excel 2013, 2016, 2019, 2021 et Excel 365.
Puis-je extraire plusieurs valeurs avec FILTRE.XML ?
FILTRE.XML retourne une seule valeur par appel (la première correspondance par défaut). Pour extraire plusieurs valeurs, utilise des indices XPath comme //item[1], //item[2], etc. Dans Excel 365, la fonction peut renvoyer un tableau dynamique si l'expression XPath correspond à plusieurs éléments.
Comment gérer les espaces de noms XML ?
FILTRE.XML a des limitations avec les espaces de noms (namespaces). Pour les XML avec espaces de noms, utilise des chemins XPath génériques comme //*[local-name()="element"] qui ignorent les préfixes d'espace de noms. Cette syntaxe fonctionne même quand le XML utilise des préfixes complexes.
FILTRE.XML peut-elle analyser du HTML ?
FILTRE.XML est conçue pour du XML valide et bien formé. Le HTML classique n'est souvent pas du XML valide (balises non fermées, attributs sans guillemets). Pour du XHTML strict ou du HTML5 bien formé, cela peut fonctionner. Sinon, utilise Power Query dans Excel pour extraire du HTML, ou IMPORTXML dans Google Sheets.
Pour aller plus loin
Les fonctions similaires : SERVICEWEB, ENCODEURL, LIEN_HYPERTEXTE, RECHERCHEV, INDEX
Bloqué sur une formule Excel ?
Pose ta question à notre assistant Excel IA, il te sort la bonne formule en quelques secondes.
Essayer l'assistant IAGratuit · 10 questions par mois
