Qu'est-ce que la fonction FILTRE. XML ?
FILTRE.XML (FILTERXML en anglais) te sert dès que tu reçois du XML brut dans une cellule et que tu refuses de le découper à coups de fonctions texte, un chantier fragile qui casse à la moindre balise déplacée. Elle lit la structure du document et va chercher directement la valeur que tu vises, quel que soit l'endroit où elle se trouve dans l'arbre.
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.

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.

Exemples pratiques pas à pas
Comment extraire toutes les valeurs d'un flux XML avec la fonction FILTRE.XML
Le flux que ton fournisseur t'envoie arrive d'un bloc, tous ses prix empilés dans une seule cellule au milieu des balises. Découper cette chaîne à coups de fonctions texte est un chantier fragile qui casse dès que l'ordre des balises change. La fonction FILTRE.XML lit la structure du document et va chercher directement les valeurs que tu désignes.
- 1Dans une cellule, écris
=FILTRE.XML(. - 2
- 3En 2ᵉ argument : écris le chemin qui désigne les valeurs à récupérer,
"//prix". Le double slash cherche les éléments de ce nom à n'importe quelle profondeur du document, là où/produits/prixobligerait à décrire le chemin complet depuis la racine. La casse compte, donc//Prixavec une majuscule ne trouve rien ici. - 4Ferme la parenthèse et appuie sur Entrée. Les quatre prix sortent les uns sous les autres, donc laisse libres les trois cellules situées sous la formule.
=FILTRE.XML(A2:A2; "//prix")//prix se lit « n'importe quel élément nommé prix, où qu'il se trouve dans l'arbre », sans avoir à décrire la hiérarchie complète. Les valeurs récupérées sont de vrais nombres, donc une somme s'applique dessus directement.Comment filtrer les valeurs extraites sur une condition avec la fonction FILTRE.XML
Le flux contient tout le catalogue alors que ton analyse ne porte que sur le haut de gamme. Sortir les quatre-vingts prix pour n'en garder que quelques-uns encombre la feuille et oblige à un second filtrage. Le langage XPath que la fonction FILTRE.XML interprète sait poser une condition directement dans le chemin.
- 1Dans une cellule, écris
=FILTRE.XML(. - 2En 1er argument : clique sur la cellule qui contient le flux,
A2. Le document est celui de l'exemple 1, avec ses quatre prix. - 3En 2ᵉ argument : écris le chemin assorti de sa condition,
"//prix[.>50]". La partie//prixdésigne les éléments à lire, et les crochets qui suivent ne retiennent que ceux dont la valeur dépasse50. Dans ces crochets, le point renvoie à la valeur de l'élément lui-même et non à un nom de balise. - 4Ferme la parenthèse et appuie sur Entrée. Deux prix seulement remplissent la condition, donc le résultat tient sur la cellule de la formule et celle juste en dessous.
=FILTRE.XML(A2; "//prix[.>50]")[.>50] ne retient donc que les prix qui dépassent 50, soit 149 et 59. Le tri se fait pendant la lecture du document, ce qui évite de tout déverser dans la feuille pour filtrer ensuite.Comment totaliser les valeurs d'un flux XML en combinant la fonction FILTRE.XML et la fonction SOMME
La commande arrive en XML et la seule chose qui t'intéresse est le nombre total d'articles, pas le détail ligne par ligne. Déverser les quantités quelque part dans la feuille pour les additionner ensuite crée une zone technique dont personne ne comprendra l'utilité six mois plus tard. Les valeurs extraites peuvent alimenter une agrégation sans jamais toucher la feuille.
- 1Dans une cellule, écris
=SOMME(. - 2En 1er argument : écris l'extraction à totaliser et referme-la,
FILTRE.XML(A2; "//qte"). La celluleA2porte la commande entière, et le chemin//qtey relève les trois quantités quelle que soit leur profondeur dans l'arbre. Refermée à l'intérieur de la fonction SOMME, l'extraction garde ses valeurs en mémoire sans les déverser dans la feuille. - 3Ferme la parenthèse de la fonction SOMME et appuie sur Entrée. Celle de la fonction FILTRE.XML a déjà été refermée à l'étape précédente.
=SOMME(FILTRE.XML(A2; "//qte"))15, sans passer par une colonne intermédiaire ni par une conversion. C'est le point qui surprend le plus, tant on répète que ce type d'extraction rend du texte : les valeurs numériques sortent bel et bien en nombres, et les envelopper dans une conversion serait du travail perdu.
Les 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
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.
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.
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.
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 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
Continue sur ta lancée après la fonction FILTRE.XML : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.
Tout voir



