Je te propose deux macro pour faire un peu de ménage dans ton classeur et probablement en reduire le poids.
Attention, travaille sur une copie
Sub Ménage()
On Error Resume Next
Dim S
Range(Cells.SpecialCells(xlCellTypeLastCell).EntireRow, Cells.Find("*", , , , xlByRows, xlPrevious).EntireRow).Offset(1, 0).Delete
Range(Cells.SpecialCells(xlCellTypeLastCell).EntireColumn, Cells.Find("*", , , , xlByColumns, xlPrevious).EntireColumn).Offset(0, 1).Delete
S = MsgBox("Voulez-vous enregistrer les modifications?", vbYesNo + vbDefaultButton1, "C'est bon?")
If S = vbYes Then ActiveWorkbook.Save Else: MsgBox "Fermer le document " & ActiveWorkbook.Name & " sans enregistrer les modifications."
Selection.SpecialCells(xlCellTypeLastCell).Select
End Sub
'Nettoyer un classeur et redéfinir le used range
'j 'utilise une feuille pour faire des importations de données. La taille de
'ces données varie d'une fois sur l'autre et du coup le used range ne correspond
'pas forcément aux données actuelles. Comment faire pour nettoyer ma feuille
'j 'ai retrouvé les explications que LL avait fourni l'an passé
'j 'en ai fait une macro qu'il suffit de mettre dans un classeur
'quelconque ( pourquoi pas perso.xls)
'ce classeur étant chargé dans Excel.
'Ensuite ouvrir le classeur à faire maigrir, activer ce classeur
'puis lancer la macro "Nettoie".
Sub GrandMénage()
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 : " _
& vbLf & ActiveWorkbook.FullName _
& vbLf & "dans chaque feuille de calcul" _
& vbLf & "- recherche la zone contenant des données," _
& vbLf & "- réinitialise la dernière cellule utilisée" _
& vbLf & "- optimise la taille du fichier Excel.", _
vbInformation, _
"d'après LL par GeeDee@m6net.fr"
'-------------------------------------------------------------
MsgBox "Taille initiale de ce classeur:" & vbLf & _
Format(FileLen(ActiveWorkbook.FullName), "### ###") & " octets.", _
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
If Avant - Sht.UsedRange.Cells.Count = 0 Then
MsgBox "Nom de la feuille de calcul :" _
& vbLf & Sht.Name & vbLf & _
"100% de la taille initiale", _
vbInformation, ActiveWorkbook.FullName
Else
MsgBox "Nom de la feuille de calcul :" _
& vbLf & Sht.Name & vbLf & _
Format((Avant - Sht.UsedRange.Cells.Count) / Avant, "0.00%") & " de la taille initiale", _
vbInformation, ActiveWorkbook.FullName
' Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") & " de la taille initiale", _
End If
Next Sht
'--------------------Message fin de traitement
MsgBox "Taille optimisée de ce classeur:" & vbLf & _
Format(FileLen(ActiveWorkbook.FullName), "### ###") & " octets.", _
vbInformation, ActiveWorkbook.FullName
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
End Sub
Si ton classeur comporte des macros, tu peux télécharger VBA CodeCleaner de Rob Bovey a l'adresse suivante:
excel 97-2003
http://www.appspro.com/downloads/CodeCleaner.exe
excel 5/95
http://www.appspro.com/downloads/Cleaner.exe