Aller au contenu principal

Qu'est-ce que la fonction FILTRE.XML ?

Définition
La fonction FILTRE.XML analyse une chaîne de texte au format XML et renvoie la valeur de l'élément ou attribut ciblé par l'expression XPath. Elle est disponible depuis Excel 2013.

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.

Syntaxe

=FILTRE.XML(xml; xpath)

Clique sur un argument pour aller à son explication.

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é.

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

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.

1

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.

2

xpath

: l'expression XPath qui localise l'élément ou l'attribut voulu dans le XML

XPath (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.

Lucas, la mascotte du Dojo, fait une démonstration pas à pas de la fonction dans Excel

Exemples pratiques pas à pas

Exemple 1

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.

Les étapes
  1. 1
    Dans une cellule, écris =FILTRE.XML(.
  2. 2
    En 1er argument : sélectionne la cellule qui contient le flux, A2:A2. Cette plage d'une seule cellule et un simple A2 donnent le même résultat. Tout le document tient dans cette unique cellule, balises comprises.
  3. 3
    En 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/prix obligerait à décrire le chemin complet depuis la racine. La casse compte, donc //Prix avec une majuscule ne trouve rien ici.
  4. 4
    Ferme 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.
Au final, ta formule devrait ressembler à ça :=FILTRE.XML(A2:A2; "//prix")
Explication
Une seule formule suffit à sortir les quatre prix, qui se déversent d'eux-mêmes sur quatre cellules en colonne. Le chemin //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.
Exemple 2

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.

Les étapes
  1. 1
    Dans une cellule, écris =FILTRE.XML(.
  2. 2
    En 1er argument : clique sur la cellule qui contient le flux, A2. Le document est celui de l'exemple 1, avec ses quatre prix.
  3. 3
    En 2ᵉ argument : écris le chemin assorti de sa condition, "//prix[.>50]". La partie //prix désigne les éléments à lire, et les crochets qui suivent ne retiennent que ceux dont la valeur dépasse 50. Dans ces crochets, le point renvoie à la valeur de l'élément lui-même et non à un nom de balise.
  4. 4
    Ferme 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.
Voici la formule que tu obtiens à la fin :=FILTRE.XML(A2; "//prix[.>50]")
Explication
Les crochets ajoutent une condition au chemin, et le point y désigne la valeur de l'élément courant : [.>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.
Exemple 3

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.

Les étapes
  1. 1
    Dans une cellule, écris =SOMME(.
  2. 2
    En 1er argument : écris l'extraction à totaliser et referme-la, FILTRE.XML(A2; "//qte"). La cellule A2 porte la commande entière, et le chemin //qte y 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.
  3. 3
    Ferme 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.
Une fois les morceaux assemblés, ta formule donne ça :=SOMME(FILTRE.XML(A2; "//qte"))
Explication
La fonction SOMME reçoit directement les trois quantités et rend 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.
Le combo gagnant
SERVICEWEB et FILTRE.XML forment un duo : SERVICEWEB va chercher le flux à une URL, FILTRE.XML en extrait la valeur voulue. FILTRE.XML(SERVICEWEB(url); "//item[1]/title") sort ainsi le titre du premier article d'un flux RSS.
Lucas, la mascotte du Dojo, l'air gêné face à une erreur Excel

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 &amp;) 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 &amp;, < au lieu de &lt;), 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.

Lucas, la mascotte du Dojo, compare deux fonctions Excel

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.

CritereFILTRE.XMLSERVICEWEBPower QueryIMPORTXML (Sheets)
RoleExtraire depuis du XMLRecuperer le contenu d'une URLImporter et transformer des donnéesRecuperer + extraire (Google Sheets)
DisponibiliteExcel 2013+Excel 2013+Excel 2016+Google Sheets uniquement
HTML accepteNon (XML strict)Oui (recupere tel quel)OuiOui
Mise a jour autoAu recalculAu recalculManuel ou planifieAutomatique
Vrai ou faux ?
« //Titre et //titre pointent vers le même élément. » Faux. XPath est sensible à la casse : la moindre différence de majuscule ne trouve rien et FILTRE.XML renvoie une erreur #VALEUR!.
FAQ

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.

Ressources

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