fichier de 4 MO

  • Initiateur de la discussion MARION
  • Date de début
M

MARION

Guest
Bonjour a tous.
Je reviens vers vous pour une petite question, j'ai crée un fichier (avec votre aide) qui par sa taille est égale a 4 MO.
Il est trés ralenti lors des opérations, je dois préciser que ce fichier est plein de formule, je travaille sur 5 feuilles et sur 400 lignes sur chaque feuille.
il y a trés peu de couleur.
Ya t'il une solution pour l'accélérer
Ordi = XP familial processeur = ATHLON 2600
Si vous avez une petite idée
A+ M
 
D

Dan

Guest
Bonjour Marion,

Tu as déjà posé une question semblable il y a quelques temps et une réponse t'avait été donnée.

Peut-être l'as-tu perdu donc je te rends le fil : <http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=86573&t=86508>

Autres fils :
- <http://www.excel-downloads.com/html/French/forum/messages/1_49583_49583.htm>
- <http://www.excel-downloads.com/html/French/forum/messages/1_75429_75429.htm>


Si pb n'hésite pas.

@+

Dan
 
J

Jfazer

Guest
Pour accelérer les choses tu peux dans le menu Outils / Option / Calcul selectionner calcul sur ordre et non pas automatique, pour mettre à jour les formules il suffira d'utiliser la touche F9 comme cela tu choisiras le moment ou l'ordi fera ses calculs et tu seras pas obligée d'attendre sans arret...
 
M

m.lecxe

Guest
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
 
M

m.lecxe

Guest
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
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 502
Messages
2 089 033
Membres
104 010
dernier inscrit
Freba