Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
XLSM
Un classeur Excel avec des macros embarquées.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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é.
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.
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.
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.
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.
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.
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.
| Extension | .xlsm |
|---|---|
| Type de média | application/vnd.ms-excel.sheet.macroEnabled.12 |
| Publié par | Microsoft |
| Première publication | 2007 |
| Spécification | ECMA-376 |
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.
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.
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.
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.
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.
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.