Microsoft 365 Fichier trop lent

Vilain

XLDnaute Accro
Bonjour à tous,

Je travaille actuellement sur des fichiers très très lourds (beaucoup de lignes, pas de macro, quelques formules matricielles).
J'ai désactivé le calcul automatique, supprimé toutes les MFC mais rien n'y fait, mon fichier est toujours très lent. Existe-t-il des solutions pour "booster" excel ? En cherchant un peu, je suis tombé sur un truc qui s'appelle "fast excel" (http://www.decisionmodels.com/fastexcel.htm") mais cela me semble un peu obscur. Quelqu'un connait-il ce truc ?

Merci d'avance
 

xUpsilon

XLDnaute Accro
Bonjour,

Je ne sais pas comment tu utilises ce fichier mais n'hésite pas à utiliser le merveilleux outil qu'est l'array pour alléger tes démarches.
Sinon navré, à part chercher un pc plus puissant, je ne m'y connais pas assez pour te dire comment accélérer ton excel.

Bonne continuation
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Vilain,
Et sans payer, on ne sait pas sur quoi il agit. Peut être sur les macros, peut être sur les feuilles. Quand vous dites obscur, ça l'est pour le moins.
Si un fichier est très très lourd et qu'il sature votre memoire alors il sera lent, c'est un fait.
Reste à voir si on peut le faire "maigrir".
En macro, supprimer tous les events, pas seulement le calcul automatique, ça peut accélérer :
VB:
Application.ScreenUpdating = false ' '( figer ), =true ( réactiver )
Application.Calculation = xlCalculationManual ' sinon xlautomatic'
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Ensuite, essayer de supprimer toutes les mises en forme ( couleurs, encadrements ... sur un fichier copié.
Il arrive qu'à force de faire plein de mise en forme, de couleurs ... ça finisse par grossir.
Regarder dans le Gestionnaire de noms si on a pas une ribambelle de noms déclarés qui ne servent plus, ou pire un nombre élevé de #REF!.
Si vous avez des macros faites une mesure de temps d'execution. Quelquefois on a des surprises.
Ensuite il y a du spécifique en fonction de la structure de votre fichier,..... mais il faut le fichier qui n'est pas tranférable.
Pour finir, si votre fichier fait 500Mo de données pures, alors il sera lent. La seule solution serait de le fractionner, mais là c'est une autre histoire.
 

job75

XLDnaute Barbatruc
Bonjour Gilles (Vilain), xUpsilon, sylvanu,

Présenté comme ça impossible de savoir si la lenteur est normale ou pas.

Il faudrait au moins connaître :

- le poids du fichier en Mo

- le nombre de feuilles

- dans chaque feuille l'adresse de la Dernière cellule (obtenue avec la commande Atteindre touche F5).

Y a -t-il dans les feuilles des lignes et colonnes inutiles (donc à supprimer) ?

A+
 

job75

XLDnaute Barbatruc
Pour la suppression dans toutes les feuilles de calcul des lignes et colonnes inutiles cette macro est classique :
VB:
Sub Nettoyage()
Dim w As Worksheet, c As Range
For Each w In Worksheets
    Set c = w.Cells.Find("*", , xlValues, , xlByRows, xlPrevious)
    If Not c Is Nothing Then w.Rows(c.Row + 1).Resize(w.Rows.Count - c.Row).Delete
    Set c = w.Cells.Find("*", , xlValues, , xlByColumns, xlPrevious)
    If Not c Is Nothing Then w.Columns(c.Column + 1).Resize(, w.Columns.Count - c.Column).Delete
    With w.UsedRange: End With 'actualise les barres de défilement
Next
End Sub
Si les feuilles sont protégées il faut bien sûr ôter la protection.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
avant d'investir dans un add-in onéreux,
déjà s'inspirer des préceptes développés là :

quant à faire maigrir un fichier Excel :
il y a 15 ans :
VB:
Sub Nettoie()
'Laurent Longre mpfe, mise en forme GeeDee
    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 Gee...@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
 

Discussions similaires

Réponses
2
Affichages
235