IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimiser / réduire taille fichier Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut Optimiser / réduire taille fichier Excel
    Bonjour à tous,

    Objectif : Réduire la taille d'un fichier Excel qui contient des lignes avec des formats, données / validation, filtre et formule…

    Contexte : Version Excel 2003. Le fichier contient une base de donnée de 3000 lignes et 56 colonnes qui augmente de jour en jour. Aujourd'hui la taille du fichier est de 12 Mo. Au final, cette base de données va contenir dans les 12000 lignes.

    Première question : existe-il l'équivalent dans Excel de la commande Outil / Utilitaire de base de donnée / Compacter dans Access (qui est vraiment efficace) ?

    Deuxième question : il y avait un tableau croisé dynamique qui a été supprimé. Y a-t-il en mémoire des éléments stockés qui n'on plus d'utilité et que l'on pourrait supprimer ?

    Troisième question :
    existe-t-il une procédure, une fonction… de "nettoyage" vraiment efficace pour supprimer du code ou des éléments qui prennent de la place inutilement dans le fichier ?

    Merci infiniment pour la, les réponses apportées.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    12 Mo pour 56 colonnes et 3000 lignes, ce n'est pas normal. Combien de feuilles, de graphes, de boutons, de lignes de code, d'images ?
    N'as-tu pas passé ton fichier d'une version d'Excel dans une autre ? Cela se produit si un fichier créé sur 2003 est sauvegardé dans la version 1997. Idem avec PowerPoint.
    Est-ce le cas ?

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut
    je me suis laissé dire que l'instruction suivante, exécutée 2 fois de suite faisait des miracles au niveau de la récupération d'espace libre du sheet sur lequel on l'effectue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveSheet.UsedRange
    ActiveSheet.UsedRange
    Cela me semble très étrange mais j'ai l'impression que cela fonctionne, alors que je ne comprends pas.

    Ce qui donne sur tout le worksheet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Compact_All()
    '
    ' Compact All Worksheets List Macro
    '
        On Error Resume Next
     
        'Browse detailled Sheets
        For Sheet_number = 1 To Sheets.Count                'BFor10
            Sheets(Sheet_number).UsedRange
            Sheets(Sheet_number).UsedRange
        Next                                                'Efor10
    End Sub

    Est-ce un Hoax ? aucune idée. Moi je l'utilise.

    Qu'en penses-tu ouskel'n'or ?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour,
    Citation Envoyé par Godzestla Voir le message
    Qu'en penses-tu ouskel'n'or ?
    Je ne connaissais pas mais si ça fonctionne, philoflore nous le dira et la solution méritera de figurer dans Contribuez, voire dans la FAQ

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    Merci pour toutes ces réponses.

    Effectivement, avec un Edition / Effacer tout sur les lignes hors base de données, le fichier perd 6Mo !

    Après avoir essayé le code plus haut "ActiveSheet.UsedRange" j'obtiens une réduction de 2 ko.

    Je me demande s'il existe une procédure permettant de nettoyer ou de compacter le fichier Excel ?

    Encore merci

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    6 Mo (12 - 6) c'est encore trop pour le fichier que tu décris. A mon avis tu as un autre pb.
    Je testerai une copie du contenu des feuilles sur un classeur tout neuf.
    Tu te mets en A1 et tu fais Ctrl + A, tu copies et tu colles sur le nouveau classeur. Enregistre et vérifie.
    Enfin, c'est ce que je ferais...
    Pour les macros, on verra après mais j'ai un code de plus de 20000 lignes, 16 userforms, une douzaine de modules, etc, et la taille du classeur n'est "que" de 1, 8 Mo

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Il arrive que l'on sélectionne toute une colonne, toute une ligne voir même toute une feuille et qu'on lui applique une mise en forme.
    Une petite cure d'amaigrissement parfois efficace, consiste à supprimer toutes les lignes et les colonnes vides, Excel les remplacera automatiquement par des nouvelles. Ce qui permet de supprimer toutes traces de mise en forme qu'Excel garde en mémoire malgré que ces cellules ne sont pas utilisées.

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Essaies avec cette macro :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Option Explicit
    Sub Nettoie()
    Dim wsh As Worksheet
    Dim rng As Range
    Dim dL As Long
    Dim nL As Long
    Dim dC As Long
    Dim nC As Long
    Dim i As Long
      If MsgBox("Nettoyer " & ActiveWorkbook.Name & " ?", vbOKCancel + vbDefaultButton2) <> vbOK Then Exit Sub
      For Each wsh In ActiveWorkbook.Worksheets
        With wsh
          Set rng = .UsedRange
          dL = rng.Row + rng.Rows.Count - 1
          ' Chercher la dernière colonne
          For i = 1 To dL
            nC = .Cells(i, .Columns.Count).End(xlToLeft).Column
            If nC > dC Then dC = nC
          Next i
          ' Supprimer les colonnes vides
          .Range(.Columns(dC + 1), .Columns(.Columns.Count)).Delete
          ' Chercher la dernière ligne
          dL = 0
          For i = 1 To dC
            nL = .Cells(.Rows.Count, i).End(xlUp).Row
            If nL > dL Then dL = nL
          Next i
          ' Supprimer les lignes vides
          .Range(.Rows(dL + 1), .Rows(.Rows.Count)).Delete
        End With
      Next wsh
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel 2003] Taille fichier Excel trop gros
    Par damsmut dans le forum Excel
    Réponses: 10
    Dernier message: 17/03/2011, 10h27
  2. Probleme de taille fichier excel avec POI
    Par stratocasters dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 31/03/2010, 19h13
  3. Pb taille fichier Excel
    Par tieumss dans le forum Excel
    Réponses: 3
    Dernier message: 02/12/2009, 18h19
  4. Réduire taille fichier users.dbr sur Xe
    Par nmicoud dans le forum Administration
    Réponses: 7
    Dernier message: 09/01/2009, 15h39
  5. Réponses: 1
    Dernier message: 02/10/2008, 04h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo