Y aurait-il un moyen de nettoyer un fichier Excel? car le fichier en
question est énorme et fait 24 Mo. Il ne contient plus aucune colonne vide à
part une seule, et dès que je touche une cellule de cette colonne, Excel
crache et doit se ferme.
dans Access, il existe la fonction 'Clean and repaire' qui réinitialise les
variables système et vide le cache.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichDenis
Essaie cette procédure, elle est de Laurent Longre
'===================================== Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long Dim 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 " '---------------------------------------------------------
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 :" & vbCrLf & _ 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 '=====================================
"Warrio" a écrit dans le message de news: 45953d74$0$3861$ Bonjour,
Y aurait-il un moyen de nettoyer un fichier Excel? car le fichier en question est énorme et fait 24 Mo. Il ne contient plus aucune colonne vide à part une seule, et dès que je touche une cellule de cette colonne, Excel crache et doit se ferme.
dans Access, il existe la fonction 'Clean and repaire' qui réinitialise les variables système et vide le cache.
Existe-il une fonction similaire dans Excel?
Merci pour toute suggestion
Essaie cette procédure, elle est de Laurent Longre
'===================================== Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long
Dim 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 :" & vbCrLf & _
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
'=====================================
"Warrio" <warrio@hotmail.com> a écrit dans le message de news:
45953d74$0$3861$5402220f@news.sunrise.ch...
Bonjour,
Y aurait-il un moyen de nettoyer un fichier Excel? car le fichier en
question est énorme et fait 24 Mo. Il ne contient plus aucune colonne vide à
part une seule, et dès que je touche une cellule de cette colonne, Excel
crache et doit se ferme.
dans Access, il existe la fonction 'Clean and repaire' qui réinitialise les
variables système et vide le cache.
Essaie cette procédure, elle est de Laurent Longre
'===================================== Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long Dim 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 " '---------------------------------------------------------
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 :" & vbCrLf & _ 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 '=====================================
"Warrio" a écrit dans le message de news: 45953d74$0$3861$ Bonjour,
Y aurait-il un moyen de nettoyer un fichier Excel? car le fichier en question est énorme et fait 24 Mo. Il ne contient plus aucune colonne vide à part une seule, et dès que je touche une cellule de cette colonne, Excel crache et doit se ferme.
dans Access, il existe la fonction 'Clean and repaire' qui réinitialise les variables système et vide le cache.