XLSM

Qu’est-ce qu’un fichier XLSM ?

Un classeur Excel avec des macros embarquées.

Ce qu’est XLSM

XLSM est un conteneur : une enveloppe pour des flux encodés par autre chose. Il est utilisé pour la retouche.

L’extension est .xlsm et le nom complet Excel Macro-Enabled Workbook. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.

D’où vient XLSM

Microsoft l’a publié en 2007. La spécification est ECMA-376.

L’âge est utile à connaître pour une raison pratique : plus un format est ancien, plus les programmes ont eu le temps de l’apprendre.

La spécification est publique

Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.

Il peut contenir plusieurs pages dans un seul fichier

Un fichier XLSM n’est pas limité à une page, et cela compte au moment de le convertir vers quelque chose qui l’est : une conversion produit un fichier contenant une seule page — la première, sauf si le convertisseur vous laisse choisir laquelle.

Il peut contenir des macros

XLSM a le droit de transporter du code exécutable, et c’est en général la seule raison pour laquelle quelqu’un croise cette extension : un serveur de messagerie ou un portail documentaire l’a refusée. Convertir vers un format sans macros est le contournement habituel — et oui, les macros disparaissent au passage.

Quel genre de document c’est

XLSM contient un tableur : des cellules, des formules et les feuilles autour.

C’est ce qui décide de la conversion : un tableur devient une zone d’impression, et l’endroit où les colonnes se coupent est une décision que quelqu’un doit prendre.

Ce qui ouvre XLSM

Microsoft Excel le lit, comme la plupart des programmes du même genre.

Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.

L’ouvrir dans un navigateur

Aucun navigateur ne le lit.

C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.

C’est un format de travail

XLSM est fait pour être ouvert et modifié. Gardez le fichier dans ce format tant que le travail dure, et exportez depuis lui chaque fois qu’une version finie est nécessaire.

L’extension est un label d’avertissement, volontairement

XLSM et XLSX sont le même format. Tous deux sont des paquets ZIP de XML, tous deux portent les mêmes feuilles, formules et mise en forme, et la seule différence est qu’un XLSM peut contenir un projet VBA et qu’un XLSX ne le peut pas.

Cette séparation était le but. Avant 2007, un classeur pouvait porter des macros sans rien dans l’extension pour le dire, et les tableurs ont été l’une des routes de diffusion de logiciels malveillants les plus efficaces jamais utilisées. Séparer les extensions permet à un destinataire de voir, avant d’ouvrir quoi que ce soit, si un fichier prétend contenir un projet VBA. C’est plus étroit que sûr — les formules DDE et les objets OLE incorporés vivent dans un XLSX ordinaire aussi — mais c’est la garantie sur laquelle se construit toute règle de réception, et le simple fait qu’un XLSX ne contient jamais de code fait que les politiques de filtrage en entreprise peuvent être appliquées de manière fiable, sans devoir inspecter chaque fichier à la recherche d’un projet VBA caché.

Ce qu’une macro peut réellement faire

VBA est un langage de programmation à part entière avec accès au système de fichiers, au réseau et aux autres applications. Une macro peut lire et écrire des fichiers partout où l’utilisateur le peut, envoyer des données, lancer des programmes, et modifier d’autres documents. Ce n’est pas un langage de formules confiné à la feuille, et c’est ce qui rend la décision d’activer une macro irréversible au sens pratique : ce qui s’exécute alors s’exécute avec les droits de la session active.

C’est la raison honnête de la prudence. L’immense majorité des macros sont l’automatisation de rapport de quelqu’un, écrite par un collègue, faisant exactement ce qu’elle dit. La minorité qui ne l’est pas dispose des mêmes capacités, et le fichier n’offre aucun moyen de les distinguer à part lire le code. Le piège classique est la feuille héritée d’un précédent collègue : la macro fait ce que le collègue disait qu’elle faisait, mais fait aussi deux ou trois choses dont il n’a jamais parlé parce qu’elles étaient nécessaires à une version antérieure du classeur et qu’il les a laissées par oubli.

Pourquoi les macros ne s’exécutent pas à l’ouverture

Excel désactive les macros par défaut et affiche une bannière. Si le fichier vient d’Internet ou d’une pièce jointe, Windows le marque en plus d’un indicateur de zone, et depuis 2022 Excel bloque les macros dans de tels fichiers de manière catégorique — une bannière rouge plutôt qu’un bouton d’activation.

La correction prévue pour un fichier de confiance consiste à le débloquer dans les propriétés du fichier, ou à le placer dans un dossier configuré comme emplacement approuvé. Ce à quoi il faut résister, c’est à l’habitude de cliquer pour passer : le blocage existe parce que ce clic était la dernière étape d’un très grand nombre d’incidents réels.

Où vit le code, et pourquoi il est opaque

Le projet VBA est stocké à l’intérieur du ZIP comme un flux binaire — la seule partie d’un paquet Office Open XML qui n’est pas du XML lisible. Renommer le fichier en .zip et regarder à l’intérieur montre les feuilles en texte clair et la macro comme un blob illisible.

Ainsi, inspecter une macro signifie ouvrir l’éditeur VBA dans Excel ou LibreOffice, ce que la plupart des gens ne feront pas et qui est la seule façon fiable de savoir ce que fait un classeur. Cela signifie aussi que le contrôle de version ne peut pas montrer un diff signifiant du code, et c’est pourquoi l’automatisation sérieuse de tableurs finit par quitter VBA pour quelque chose qui vit dans des fichiers texte. Le problème va plus loin que la seule lisibilité : un classeur qui change de version tous les mois sans moyen de voir ce qui a changé dans la logique est un classeur dans lequel les régressions s’accumulent en silence, et c’est la situation que rencontre toute équipe qui maintient des feuilles automatisées depuis plus de quelques années.

Convertir en XLSX élimine l’automatisation

Enregistrer un XLSM en XLSX retire le projet VBA et conserve tout le reste — feuilles, formules, mise en forme, graphiques, plages nommées. Excel avertit avant de le faire, et l’avertissement est toute la transaction.

C’est exactement ce que vous voulez pour un classeur reçu de l’extérieur dont vous n’avez besoin que de lire les nombres, et exactement ce que vous ne voulez pas pour un fichier dont l’automatisation est la raison d’être. La distinction est simple : si le classeur fait quelque chose quand vous appuyez sur un bouton, convertir le casse ; s’il ne fait que contenir des données, convertir le rend plus sûr. Le piège classique est d’hériter d’un classeur sans savoir s’il s’appuie sur ses macros ou non, et de l’enregistrer au mauvais format après une modification anodine — l’opération est silencieuse et la macro disparaît sans laisser de trace, ce qui rend le diagnostic particulièrement déplaisant quand on s’aperçoit du problème.

Et la conversion en PDF ou CSV

PDF pour tout ce qui est envoyé, archivé ou imprimé. Le résultat est figé, ne contient aucun contenu exécutable, et supprime en une étape la question de mise en page et la question des macros. Pour faire circuler un rapport généré par un classeur piloté par macros, c’est presque toujours la bonne sortie.

CSV quand la cible est une base de données, un script ou un pipeline d’analyse. Cela porte une feuille de valeurs et rien d’autre — pas de formules, pas de mise en forme, pas de code — ce qui est précisément pourquoi les routines d’import et les systèmes soucieux de sécurité le demandent par son nom.

Quand un classeur a dépassé les macros

Un projet VBA qui est devenu la façon dont un département travaille est un risque à nommer : le code est opaque au contrôle de version, il ne s’exécute que là où Excel s’exécute, il casse quand une feuille est renommée, et il est en général maintenu par une seule personne qui est passée à autre chose depuis. La première panne est en général déclenchée par un changement anodin — un nom de feuille raccourci, une nouvelle colonne ajoutée, un classeur de données déplacé — et la réparation demande quelqu’un qui comprend encore le code, qui n’est plus là.

La direction prise par Microsoft lui-même est Office Scripts et Power Automate pour ce travail, et en dehors du monde Microsoft un petit script dans un langage qui lit le fichier directement fait le même travail dans des fichiers que l’on peut différencier. Ni l’un ni l’autre n’est une raison de réécrire une macro qui marche. Les deux méritent d’être connus avant d’en écrire une nouvelle dont cent personnes dépendront, parce que le coût d’une bonne décision à ce stade est de quelques jours de conception, et le coût d’une mauvaise décision est un classeur orphelin qu’il faudra maintenir à la main pendant les dix ans suivants.

Les données, au même endroit

Identifiants et origine du format XLSM.
Extension.xlsm
Type de médiaapplication/vnd.ms-excel.sheet.macroEnabled.12
Publié parMicrosoft
Première publication2007
SpécificationECMA-376

Fichiers XLSM : questions courantes

Quelle est la différence entre XLSM et XLSX ?

Seulement qu’un XLSM peut contenir des macros VBA et qu’un XLSX ne le peut pas. Les formats sont par ailleurs identiques — tous deux des paquets ZIP de XML portant les mêmes feuilles, formules et mise en forme. L’extension séparée existe pour qu’un destinataire puisse voir avant d’ouvrir si le fichier prétend contenir du code.

Pourquoi les macros sont-elles désactivées à l’ouverture du fichier ?

Excel les désactive par défaut, et depuis 2022 il les bloque catégoriquement dans les fichiers venus d’Internet ou d’une pièce jointe. Pour un fichier de confiance, débloquez-le dans les propriétés du fichier ou placez-le dans un emplacement approuvé — mais le blocage existe parce que ce clic était la dernière étape de nombreux incidents réels.

Est-il sûr d’ouvrir un fichier XLSM ?

L’ouvrir avec les macros désactivées est aussi sûr que d’ouvrir un XLSX. Activer les macros est la décision, et VBA a un accès complet au système de fichiers, au réseau et aux autres applications. N’activez que pour des fichiers dont vous connaissez réellement l’origine.

Comment retirer les macros d’un classeur ?

Enregistrez-le en XLSX. Le projet VBA est écarté et tout le reste — feuilles, formules, mise en forme, graphiques — est conservé. Excel avertit d’abord, et cet avertissement est toute l’opération.

Peut-on voir ce que fait une macro ?

Seulement en ouvrant l’éditeur VBA dans Excel ou LibreOffice. Le code est stocké comme un flux binaire à l’intérieur du paquet, donc renommer en .zip montre les feuilles en XML lisible et la macro comme un blob illisible.

LibreOffice exécute-t-il les macros Excel ?

Il ouvre le fichier et garde les données, et il n’exécute pas VBA de manière fiable — les deux applications utilisent des systèmes de script différents avec des modèles d’objet différents. Tout ce qui dépasse les macros simples demande à être réécrit plutôt que traduit.