Réduire la taille d'un fichier Excel

Bonsoir

Après vous avoir consulté plusieurs fois, je viens au bout de mon fichier de suivi de patients...

Tout est ok, tout fonctionnait pour 20 patients. Et donc pour pouvoir le remettre aux utilisateurs, je devais étendre ce nombre de patients.

J'ai voulu étendre à 2 000 patients et à 5 000 patients.

Le fichier à 20 patients faisait 3 397 ko. celui de 2 000, fait 13 736 (il est long à ouvrir) et celui de 5 000 fait 33 532 ko et ne s'ouvre pas une fois fermé.

J'ai essayé la sélection des lignes avec Fn et supprimer les lignes. J'ai gagné 200 ko sur le tableur de 2000 patients.

Mais quand je clique de nouveau sur Fn, Excel me "déplace" tjs à la même case.

Est ce qu'il y a d'autres techniques pour supprimer du "poids"? et permettre l'ouverture des fichiers.

J'ai également tenté de supprimer mes MFC mais je ne "gagne" quasiment rien.

Je vous remercie

Hélène

1-Transformer le fichier en XLSX (les xls sont très gourmands)

2-Virer MFC, virer formules matricielles et formules volatiles, ou réduire leur range de données

3-Desactiver le recalcul automatique

4-Eviter les formules de type offset match...

5-Eviter TCD's et liaisons externes

Bonjour,

Un peu de lecture

Conseils pour éliminer les obstacles aux performances

http://msdn.microsoft.com/fr-fr/library/office/ff726673(v=office.14).aspx

Amélioration des performances de calcul

http://msdn.microsoft.com/fr-fr/library/office/ff700515(v=office.14).aspx

Améliorations en matière de performances et de limites

http://msdn.microsoft.com/fr-fr/library/office/ff700514(v=office.14).aspx

Merci à vous deux.

Je vais lire tout ça.

Et malheureusement je ne peux pas enlever mes formules et mes MFC...

Bonne soirée

Bonjour,

Code à copier dans l'éditeur VBE

(ALT F11 puis Insérer un module)

Sauvegarde ton fichier sous un autre nom (par précaution).

Exécute la procédure et redis nous

Cdlt.

Option Explicit
Public Sub Nettoie()
'd'après LL par GeeDee@m6net.fr
Dim Sht As Worksheet, _
    DCell As Range, plage As Range, _
    Calc As Long, _
    Rien As String, _
    Avant As Double

    On Error Resume Next
    Calc = Application.Calculation    ' ---- mémorisation de l'état de recalcul
    '------------------------------------------------------------
    MsgBox "Pour le classeur actif : " _
         & Chr(10) & ActiveWorkbook.FullName _
         & Chr(10) & "dans chaque feuille de calcul" _
         & Chr(10) & "recherche la zone contenant des données," _
         & Chr(10) & "réinitialise la dernière cellule utilisée" _
         & Chr(10) & "et optimise la taille du fichier Excel", _
           vbInformation
    '-------------------------------------------------------------
    MsgBox "Taille initiale de ce classeur en octets" _
         & Chr(10) & FileLen(ActiveWorkbook.FullName), _
           vbInformation, ActiveWorkbook.FullName
    '------------------------------------------------------------
    With Application
        .Calculation = xlCalculationManual
        .StatusBar = "Nettoyage en cours..."
        .EnableCancelKey = xlErrorHandler
        .ScreenUpdating = True
    End With
    '-------------------- le traitement
    For Each Sht In Worksheets
        Avant = Sht.UsedRange.Cells.Count
        Application.StatusBar = Sht.Name & "-" & Sht.UsedRange.Address
        '-------------------Traitement de la zone trouvée
        If Sht.UsedRange.Address <> "$A$1" Or Not IsEmpty(Sht.[A1]) Then
            Set DCell = Sht.Cells.Find("*", , , , xlByRows, xlPrevious)(2)
            '----------------Suppression des lignes inutilisées
            If Not DCell Is Nothing Then
                Sht.Range(DCell, Sht.Cells([A:A].Count, 1)).EntireRow.Delete
                Set DCell = Nothing
                Set DCell = Sht.Cells.Find("*", , , , xlByColumns, xlPrevious)(, 2)
                '----------------Suppression des colonnes inutilisées
                If Not DCell Is Nothing Then Sht.Range(DCell, Sht.[IV1]).EntireColumn.Delete
            End If
            Rien = Sht.UsedRange.Address
        End If
        ActiveWorkbook.Save
        '---------------------Message pour la feuille traitée
        MsgBox "Nom de la feuille de calcul :" _
             & Chr(10) & Sht.Name _
             & Chr(10) & Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") _
             & " de la taille initiale", vbInformation, ActiveWorkbook.FullName
    Next Sht
    On Error GoTo 0
    '--------------------Message fin de traitement
    MsgBox ActiveWorkbook.FullName & Chr(10) & "Taille optimisée de ce classeur en octets " & _
           Chr(10) & FileLen(ActiveWorkbook.FullName), vbInformation
    '--------------------
    Application.StatusBar = False
    Application.Calculation = Calc
End Sub
Rechercher des sujets similaires à "reduire taille fichier"