]]>

vendredi 27 avril 2007

Réduire la taille d'un fichier excel

Voici une macro excel, proposée par GeeDee sur Excelabo, qui permet de réduire la taille des fichiers excel

Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String,
Avant As Double, plage As Range
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, _
"d'après LL par GeeDee@m6net.fr"
'-------------------------------------------------------------
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
'--------------------Message fin de traitement
MsgBox "Taille optimisée de ce classeur en octets " & Chr(10) &
FileLen(ActiveWorkbook.FullName), _
vbInformation, _
ActiveWorkbook.FullNameActive
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
End Sub

A bientôt

Thomas

12 commentaires:

Shi a dit…

ça à l'air séduisant !!
je vais tester ça
Merci

Anonyme a dit…

j'ai enfin réussi à diminuer la taille de ce foutu fichier (10Mo => 296ko)

Je sens que ce script va être mon meilleur ami !!

Niko a dit…

Bonjour,
Cette macro m'intresse vraiment mais je ne sais pas comment l'utiliser... pour l'instant je l'ai copiée et collée dans l'editeur vb d'excel mais j'ai une erreur de compilation / erreur de syntaxe des la premiere ligne...
faut il modifier quelque chose pour que ca fonctionne?

Niko010180@hotmail.com

Anonyme a dit…

Bonjour,

Je viens de tester cette macro, elle est vraiment trop géniale.
Tout le monde me disait qu'il fallait que je recommence mon fichier feuille par feuille.
Merci pour le gain de temps...

Anonyme a dit…

Génial ce truc, je le rajoute à ma caisse à outils, et en réponse à niko, remplace les _ avec retour à la ligne par rien, Thomassss la laissé ainsi pour la clarté de sa page !

Merci Thomassss
A+
JC+2000

Anonyme a dit…

simple et efficace Bravo! et MERCI

Anonyme a dit…

Ca avait l'air génial pourtant.

Sur certaines de mes feuilles le programme m'indique des réductions de taille fort interessantes mais au final mon fichier qui pesait 1,40Mo se retrouve à 1,46MO. Pas cool!

au passage pourquoi sauvegarder à chaque feuille? ça prend des plombes.

Anonyme a dit…

Bonsoir,

J'ai testé cette macro qui semblé génial!
Cependant, je ne remarque pas de réduction de taille de mon fichier!
Peut-il y avoir un lien avec la protection de mon fichier?
J'ai pa mal de photos sur le fichier! es ce que la macro a des effets également sur les photos?

Merçi

Thomas a dit…

Bonjour,

Pour réduire la taille des photos, fait un clic droit sur la photo, format de l'image, choisie l'onglet image puis clic sur compresser.

A+

Thomassss

mike a dit…

Bjr j'ai fais un copier coller du programme mais j'ai plein de ligne rouge et des erreurs de compilation alors svp pour ceux qui l'ont testé et qui trouve que ça marche dite moi ce que vous aviez modifié et comment merci

gaelle a dit…

Merci. c'est tout simplement genial d'avoir inventer cette macro ! :)

Anonyme a dit…

Le code est ouf.
Ca m'a supprimé des infos parfois par contre.
de 11 à 2 Mo
Merci encore