web-dev-qa-db-fra.com

Comment réduire un gros fichier Excel

J'ai un fichier simple et petit dans * .XLS avec seulement une feuille, sur cette feuille juste beaucoup de cellules avec le petit texte sur le nombre. (taille du fichier 24Ko)

Mais j’ai fait beaucoup de modifications, copier/coller, étendre la formule, sauvegarder ... ensuite, j’ai supprimé la plupart de ces modifications et en ai dupliqué 4 copies avec peu de données.

Maintenant, mon nouveau fichier est TRÈS énorme : 2.5Mb!

Où se trouvent les données cachées et comment puis-je les supprimer?

J'ai le même problème sur le fichier réel avec 300 feuilles et 1 image sur chaque feuille: taille du fichier 280Mb

11
Alban

J'ai écrit un fichier VBA pour ajouter un outil nettoyant ces fichiers anormalement volumineux . Ce script efface toutes les colonnes et les lignes après les dernières cellules réellement utilisées pour réinitialiser les dernières cellules ([Ctrl] + [Fin]), et fournit également activer la compression des images.

Je dev un AddIns avec l'installation automatique (il suffit de l'exécuter avec la macro activée) pour inclure dans le menu contextuel de nombreux nouveaux boutons:

  1. Optimiser
  2. Optimiser et enregistrer
  3. Désactiver l'optimiseur

Context menu after install it

Ceci est basé sur KB de Microsoft Office 2003 et réponse de PP. avec amélioration personnelle:

  1. ajouter une compression d'images
  2. correction d'un bug pour les colonnes
  3. compatibilité feat avec Excel 2007 - 2010 - ... (plus de 255 colonnes)

SOLUTION> vous pouvez télécharger mon fichier * .xlam ToolsKit

le code principal est

Sub ClearExcessRowsAndColumns()
    Dim ar As Range, r As Double, c As Double, tr As Double, tc As Double
    Dim wksWks As Worksheet, ur As Range, arCount As Integer, i As Integer
    Dim blProtCont As Boolean, blProtScen As Boolean, blProtDO As Boolean
    Dim shp As Shape
    Application.ScreenUpdating = False
    On Error Resume Next
    For Each wksWks In ActiveWorkbook.Worksheets
      Err.Clear
      'Store worksheet protection settings and unprotect if protected.
      blProtCont = wksWks.ProtectContents
      blProtDO = wksWks.ProtectDrawingObjects
      blProtScen = wksWks.ProtectScenarios
      wksWks.Unprotect ""
      If Err.Number = 1004 Then
         Err.Clear
         MsgBox "'" & wksWks.Name & "' is protected with a password and cannot be checked.", vbInformation
      Else
         Application.StatusBar = "Checking " & wksWks.Name & ", Please Wait..."
         r = 0
         c = 0

         'Determine if the sheet contains both formulas and constants
         Set ur = Union(wksWks.UsedRange.SpecialCells(xlCellTypeConstants), wksWks.UsedRange.SpecialCells(xlCellTypeFormulas))
         'If both fails, try constants only
         If Err.Number = 1004 Then
            Err.Clear
            Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeConstants)
         End If
         'If constants fails then set it to formulas
         If Err.Number = 1004 Then
            Err.Clear
            Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeFormulas)
         End If
         'If there is still an error then the worksheet is empty
         If Err.Number <> 0 Then
            Err.Clear
            If wksWks.UsedRange.Address <> "$A$1" Then
               ur.EntireRow.Delete
            Else
               Set ur = Nothing
            End If
         End If
         'On Error GoTo 0
         If Not ur Is Nothing Then
            arCount = ur.Areas.Count
            'determine the last column and row that contains data or formula
            For Each ar In ur.Areas
               i = i + 1
               tr = ar.Range("A1").Row + ar.Rows.Count - 1
               tc = ar.Range("A1").Column + ar.Columns.Count - 1
               If tc > c Then c = tc
               If tr > r Then r = tr
            Next
            'Determine the area covered by shapes
            'so we don't remove shading behind shapes
            For Each shp In wksWks.Shapes
               tr = shp.BottomRightCell.Row
               tc = shp.BottomRightCell.Column
               If tc > c Then c = tc
               If tr > r Then r = tr
            Next
            Application.StatusBar = "Clearing Excess Cells in " & wksWks.Name & ", Please Wait..."
            Set ur = wksWks.Rows(r + 1 & ":" & wksWks.Rows.Count)
                'Reset row height which can also cause the lastcell to be innacurate
                ur.EntireRow.RowHeight = wksWks.StandardHeight
                ur.Clear

            Set ur = wksWks.Columns(ColLetter(c + 1) & ":" & ColLetter(wksWks.Columns.Count))
                'Reset column width which can also cause the lastcell to be innacurate
                ur.EntireColumn.ColumnWidth = wksWks.StandardWidth
                ur.Clear
         End If
      End If
      'Reset protection.
      wksWks.Protect "", blProtDO, blProtCont, blProtScen
      Err.Clear
    Next
    Application.StatusBar = False
    ' prepare les combinaison de touches pour la validation automatique de la fenetre
    ' Application.SendKeys "%(oe)~{TAB}~"

    ' ouvre la fenetre de compression des images
    Application.CommandBars.ExecuteMso "PicturesCompress"
    Application.ScreenUpdating = True
End Sub


Function ColLetter(ColNumber As Integer) As String
    ColLetter = Left(Cells(1, ColNumber).Address(False, False), Len(Cells(1, ColNumber).Address(False, False)) - 1)
End Function
5
Alban

Je sauve des fichiers au format .XLSB pour couper la taille. XLSB permet également à VBA et aux macros de rester avec le fichier. J'ai vu des fichiers de 50 Mo avec moins de 10 avec le formatage binaire. 

11
RazorSky

Si votre fichier est simplement du texte, la meilleure solution consiste à enregistrer chaque feuille de calcul au format .csv, puis à le réimporter dans Excel.

3
user4216274

J'ai beaucoup travaillé dans Excel et j'ai trouvé les 3 points suivants très utiles

Recherchez s'il existe des cellules qui ne contiennent apparemment aucune donnée mais que Excel considère comme contenant des données.

Vous pouvez le trouver en utilisant la propriété suivante sur une feuille

ActiveSheet.UsedRange.Rows.Count
ActiveSheet.UsedRange.Columns.Count

Si cette plage est supérieure aux cellules sur lesquelles vous avez des données, supprimez le reste des lignes/colonnes.

Vous serez surpris de voir la quantité d'espace qu'il peut libérer

Convertir des fichiers au format .xlsb

Le format XLSM doit rendre Excel compatible avec Open XML, mais il existe très peu d'instances dans lesquelles nous utilisons réellement le format XML d'Excel. Cela réduit la taille de près de 50% sinon plus

Mode optimal de stockage de l'information

Par exemple, si vous devez enregistrer le cours de l'action pendant environ 10 ans et si vous souhaitez enregistrer les actions suivantes: Ouvert, Elevé, Faible, Fermé, vous obtiendrez ainsi (252 * 10) * (4) cellules utilisées

Au lieu de cela, utilisez des colonnes séparées pour Ouvrir, Élevé, Faible, Fermer, enregistrez-les dans une seule colonne avec un séparateur de champ.

Vous pouvez facilement écrire une fonction pour extraire les informations de la colonne unique quand vous le souhaitez, mais cela libérera presque les deux tiers de l'espace que vous utilisez actuellement.

3
Anant Gupta

changer le format du fichier en * .XLSX cette modification compresse mon fichier et réduit la taille du fichier de 15%

2
Alban

J'avais un fichier Excel de 24 Mo en taille, grâce à plus de 100 images. J'ai réduit la taille à moins de 5 Mo en procédant comme suit:

  1. Sélectionne chaque image, la coupe (CTRL X) et la colle en mode spécial avec l'option ALT E S Bitmap
  2. Pour trouver quel bitmap était encore volumineux, il faut sélectionner un des fichiers par feuille, puis faire CTRL A. Cela sélectionnera toutes les images.
  3. Double-cliquez sur une image pour afficher l'option RESET Image en haut.
  4. Cliquez sur l'image de réinitialisation et toutes les images qui sont encore grandes apparaissent.
  5. Faites un CTRL Z (UNDO) et collez à nouveau ces images de balance dans BITMAP (* .BMP) comme à l’étape 1.

Il m'a fallu 2 jours pour comprendre cela car cela ne figurait dans aucun forum d'aide. J'espère que cette réponse aide quelqu'un

BR Gautam Dalal (Inde)

1
Gautam Dalal
0
PP.

Je suis tombé sur une raison intéressante pour un fichier .xlsx gigantesque ... Le classeur original comportait une vingtaine de feuilles et faisait environ 20 Mo. J'ai créé un nouveau classeur avec l'une des feuilles, de sorte qu'il serait plus facile à gérer: 11,5 MB Imaginez ma surprise de constater que la feuille simple dans le nouveau classeur contenait 1 041 776 (les compte!) Lignes vides . Maintenant, il est 13,5 KB

0
user6320980