OVH Cloud OVH Cloud

taille de fichier excel

3 réponses
Avatar
JEAN
bjr,

j'ai le meme souci que quelqu'un sur le forum

j'ai un fichier qui fait environ 8 MO et je voudrai savoir si il est
possible de le reduire, étan donnée qu'il n'y a pas de données importantes la
dessus.

j'ai regarder dernièrement le site exellabo, j'ai essayé quelque
programme,j'ai rencontré des bugs,les programme du sites sont certainement
bon, mais c'est moi qui tombe sur des bugs.

avez vous un petit programme, qui me permmetra de réduire la taille de mon
fichier

merci

3 réponses

Avatar
Philippe.R
Bonsoir Jean,

Il est possible que ta plage de données soit plus grande que nécessaire ;
copie ce qui suit dans un module standard de ton classeur et execute le.

'===================début de copie======================= Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String
Dim 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 "
'-------------------------------------------------------------
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
'===================fin de copie==========================
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"JEAN" a écrit dans le message de news:

bjr,

j'ai le meme souci que quelqu'un sur le forum

j'ai un fichier qui fait environ 8 MO et je voudrai savoir si il est
possible de le reduire, étan donnée qu'il n'y a pas de données importantes la
dessus.

j'ai regarder dernièrement le site exellabo, j'ai essayé quelque
programme,j'ai rencontré des bugs,les programme du sites sont certainement
bon, mais c'est moi qui tombe sur des bugs.

avez vous un petit programme, qui me permmetra de réduire la taille de mon
fichier

merci



Avatar
JEAN
j'ai essayé ton code, ca a l'air de marcher

mon fichier a diminué de 1,5 MO
il ne peut pas plus.

ton programme fait qoi exactement au fait quand j'execute ton programme
j'ai des messbox avec le nom de feuille

ca me nettoie tout au fait?

merci

"Philippe.R" wrote:

Bonsoir Jean,

Il est possible que ta plage de données soit plus grande que nécessaire ;
copie ce qui suit dans un module standard de ton classeur et execute le.

'===================début de copie======================= > Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String
Dim 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 "
'-------------------------------------------------------------
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
'===================fin de copie========================== >
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"JEAN" a écrit dans le message de news:

bjr,

j'ai le meme souci que quelqu'un sur le forum

j'ai un fichier qui fait environ 8 MO et je voudrai savoir si il est
possible de le reduire, étan donnée qu'il n'y a pas de données importantes la
dessus.

j'ai regarder dernièrement le site exellabo, j'ai essayé quelque
programme,j'ai rencontré des bugs,les programme du sites sont certainement
bon, mais c'est moi qui tombe sur des bugs.

avez vous un petit programme, qui me permmetra de réduire la taille de mon
fichier

merci







Avatar
Philippe.R
Re bonsoir,
Ce programme n'est pas de moi, mais, comme indiqué à cette ligne : "d'après LL par "
de GeeDee, inspiré par notre chef à 4 plumes Laurent Longre.
Il est disponible sur le site Excelabo, à cette adresse :
http://www.excelabo.net/xl/plantages.php#vraiusedrange
avec malheureusement quelques lignes malencontreusement coupées.
Sa fonction est de supprimer de la plage de référence prise par Excel pour les calculs les lignes et
colonnes vides de chaque feuille du classeur.
Pour te rendre compte de que fais précisément ce code, ouvre VBE à l'aide de la combinaison de touches
Alt + F11, place toi dans le code (au début de préférence) et presse la touche F8 pour l'exécuter en pas
à pas ; tu verras ainsi, ligne après ligne, les actions faites par le code.
--
Amicales Salutations
XL 97 / 2000 / 2002
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"JEAN" a écrit dans le message de news:

j'ai essayé ton code, ca a l'air de marcher

mon fichier a diminué de 1,5 MO
il ne peut pas plus.

ton programme fait qoi exactement au fait quand j'execute ton programme
j'ai des messbox avec le nom de feuille

ca me nettoie tout au fait?

merci

"Philippe.R" wrote:

Bonsoir Jean,

Il est possible que ta plage de données soit plus grande que nécessaire ;
copie ce qui suit dans un module standard de ton classeur et execute le.

'===================début de copie======================= >> Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String
Dim 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 "
'-------------------------------------------------------------
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
'===================fin de copie========================== >>
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"JEAN" a écrit dans le message de news:

bjr,

j'ai le meme souci que quelqu'un sur le forum

j'ai un fichier qui fait environ 8 MO et je voudrai savoir si il est
possible de le reduire, étan donnée qu'il n'y a pas de données importantes la
dessus.

j'ai regarder dernièrement le site exellabo, j'ai essayé quelque
programme,j'ai rencontré des bugs,les programme du sites sont certainement
bon, mais c'est moi qui tombe sur des bugs.

avez vous un petit programme, qui me permmetra de réduire la taille de mon
fichier

merci