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