Passage de xlsx en xlsb
Bonjour,
Je souhaite passer plusieurs fichiers (xlsx en xlsb) d'un dossier, faut-il impérativement utiliser VBA ? Ne m'en servant presque jamais, je ne suis pas très à l'aise.
Certains d'entre vous ont-ils déjà des macros pour réaliser cette opération ?
Vladt
Bonjour,
Si vous n'en avez pas beaucoup vous pouvez aussi le faire à la main.
Mais sans vouloir etre indiscret pourquoi les changer ? Les fichiers xlsb ne seront pas nécessairement plus légers.
Pour le VBA, on peut vous écrire la macro ce n'est vraiment pas compliqué.
Bonjour,
Pas besoin de macro YAKA faire enregistrer sous... et choisir le format xlsb...
A+
Bonjour,
J'ai plus de 200 fichiers concernés, donc je voulais m'éviter de refaire 200 sauvegardes en ouvrant les fichiers à chaque fois.
Mais sans vouloir etre indiscret pourquoi les changer ? Les fichiers xlsb ne seront pas nécessairement plus légers.
Il me semble que j'arrive à diviser le volume par plus de 2. Ainsi, si je peux alléger mon fichier PowerBi, cela m'arrangerait.
Ci-après la macro reprise et adaptée de Loop Through All Excel Files In A Given Folder (thespreadsheetguru.com).
Fichier joint avec la macro si vous ne savez pas comment l'ajouter.
Le code (ajouté) en dessous, le reste est identique au lien.
' save copy as .xlsb in same folder
Dim endPos As Long
endPos = InStrRev(myFile, ".") - 1
myFile = Left(myFile, endPos)
wb.SaveCopyAs myPath & myFile & ".xlsb"
'Save and Close Workbook // edit: no save
wb.Close SaveChanges:=FalseLa macro ouvre les fichiers un par un (pas vraiment d'autre méthode), et les sauvegarde en tant que ... xlsb dans le meme dossier. Vous aurez une msgbox quand la boucle est terminé car j'imagine que cela prend du temps pour 200 fichiers.
Bonjour,
Merci beaucoup pour la macro.
Les fichiers xlsb ne seront pas nécessairement plus légers.
Je comprends maintenant votre remarque, en passant par la macro le fichier est bien converti en binaire mais devient plus lourd. Pourtant quand je fais la manipulation de sauvegarde par moi même, le fichier devient plus léger. Je n'y ai pas trouvé d'explications décisives.
Merci
Bonjour,
C'est peut etre un cas particulier que vous avez observé : certains fichiers deviennent plus petits, mais au global ça prend plus de place. Autrement c'est quelque chose d'assez obscur dans les options de sauvegarde, mais ça malheureusement on n'y a pas trop accès via VBA.
Deux points cependant :
Il faut bien comprendre les implications d'un passage de fichiers zip/xml (xslx) à binaire (xlsb).
- Pour ma part je n'ai pas vraiment vu que les fichiers XSLB étaient plus légers. Etant encodés en binaire, Excel les ouvre et sauvegarde plus rapidement en revanche, c'est normal puisqu'il n'y a plus ce travail de "lecture/compilation" à effectuer pour "traduire" les différents objets de l'archive en quelque chose d'utilisable pour Excel. Pour la taille par contre, xlsx étant déjà un fichier compressé, on ne va pas gagner beaucoup de place à sauvegarder en binaire, après tout il faut bien enregistrer l'information quelque part.
D'ailleurs j'ai lu à quelques endroits que l'import dans PowerBi était plus rapide depuis xlsx que xlsb. Je pense cela logique car l'import de données va probablement chercher dans l'archive seulement les données dont il a besoin, sans aller lire toutes les autres propriétés du classeur (police, formats, fonctions etc). Pour un fichier binaire, il faut probablement "tout lire".
- Un autre point important : le binaire est comme "compilé", dans le sens où il est illisible dans une application n'ayant pas le "décodage" implémenté. Et cela est dangereux ! Votre fichier peut se corrompre pour de multiples raisons, et tout est perdu ! Pas terrible pour une BDD PowerBI. En revanche sur un xlsx on peut, en parcourant l'archive, retrouver plus facilement les données, ou en tout cas une partie, si le fichier devient inutilisable.
En résumé, le passage à des fichiers xlsb me semble réévaluable dans votre cas, d'autant plus si vous n'ouvrez pas manuellement ces fichiers très régulièrement.
Pour accélérer le process, jetez un oeil aux conseils donnés en ligne, si la requête est faite en local, améliorer votre machine peut vous faire gagner un temps significatif, et peut etre que la requête peut etre simplifiée/optimisée.
Merci pour toutes ces informations.
Cela donne finalement un tout autre point de vue, effectivement je n'ouvre jamais ces fichiers ce sont des extractions automatiques.
En revanche sur un xlsx on peut, en parcourant l'archive, retrouver plus facilement les données, ou en tout cas une partie, si le fichier devient inutilisable.
Je ne comprends pas très bien ce que vous entendez par archive ? Je ne comprends pas la différence avec une sauvegarde.
Pour accélérer le process, jetez un oeil aux conseils donnés en ligne, si la requête est faite en local, améliorer votre machine peut vous faire gagner un temps significatif, et peut etre que la requête peut etre simplifiée/optimisée.
Normalement ce sont bien des requêtes en local puisque mes fichiers sont des extractions (xlsx, xslx ?).
Machine = PC ?
Merci pour toutes vos réponses
En revanche sur un xlsx on peut, en parcourant l'archive, retrouver plus facilement les données, ou en tout cas une partie, si le fichier devient inutilisable.
How to open and view the XML structure of an Excel file? - Stack Overflow
Les fichiers xlsx sont des archives compressées. Si vous renommez un "classeur.xslx" en "classeur.zip" puis l'ouvrez, vous verrez qu'il s'agit en fait d'un dossier contenant d'autres dossiers, et fichiers. C'est une arborescence XML pour etre précis.
Ces fichiers XML peuvent etre lus par de très nombreux programmes, et la restauration d'un fichier est souvent plus facile car, par exemple sur le screen ci-dessus :en supposant que l'erreur soit localisée dans "docProps", on pourra récupérer le reste des données du classeur sans problème. Bon rassurez-vous, on ne fait cela à la main, il existe des outils pour ça. Mais ces outils sont basés sur ce principe.
Pour accélérer le process, jetez un oeil aux conseils donnés en ligne, si la requête est faite en local, améliorer votre machine peut vous faire gagner un temps significatif, et peut etre que la requête peut etre simplifiée/optimisée.
Oui je voulais dire votre PC. Tout d'abord si vos classeurs ne sont pas sur un SSD, forcément cela prend beaucoup plus de temps à les ouvrir. Et ensuite la RAM et le processeur jouent un role primordial.
Pour compléter, je viens de trouver cet article (EN), qui synthétise la question
Excel XLSB vs XLSX file format. The Pros and Cons of XLSB Files (analystcave.com)
Comme indiqué en fin d'article, une manière efficace de réduire la taille des fichiers est de supprimer toutes les mises en forme (couleurs, polices, dimensions de cellules, MFC, etc…). Bon après vu que vous avez déjà beaucoup de fichiers ce n'est pas forcément "très utile", mais pour l'avenir.
Merci pour votre retour.
C'est beaucoup plus clair, j'ai pu voir la composition d'un fichier xslx en suivant votre lien, je comprends donc mieux vos précédentes explications sur la restauration des "données compromises".
Oui je voulais dire votre PC. Tout d'abord si vos classeurs ne sont pas sur un SSD, forcément cela prend beaucoup plus de temps à les ouvrir. Et ensuite la RAM et le processeur jouent un role primordial.
Pas de difficultés, étant donné que j'utilise mon pc perso, mais mes collaborateurs sur les pc pro...
Je ne vous dérange pas plus.
Bonne journée