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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 31
    Points
    31
    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
    Points : 15 543
    Points
    15 543
    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 émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    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
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    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.

  5. #5
    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
    Points : 15 543
    Points
    15 543
    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

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 31
    Points
    31
    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

  7. #7
    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
    Points : 15 543
    Points
    15 543
    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

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    petite question!

    Utilise tu le format d'enregistrement multi versions?
    genre "excel 95-2003" ?

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    une autre piste : essaie d'effacer les noms de ton classeur, ça peut significativement diminuer la taille.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci à tous pour tous ces éléments de réponses.

    Le fichier est bien enregistré au format xls.

    Après nettoyage, la feuille de la base de données représente 2,5 Mo.

    Dans le classeur, il y'avait des tableaux croisés supprimés et il y a d'autres feuilles qui contiennent des formules et des objets (zone de texte, rectangle, ellipse).

    Voilà, je pensais qu'il y aurait des fonctionnalités pour nettoyer la base (c'est-à dire, supprimer des éléments qui ne sont plus utilisés…) ou compacter le fichier comme dans ACCESS.

    Si vous avez une autre idée ?

  11. #11
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Ben moi je trouve que 2,5 Mo c'est encore beaucoup !

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Effectivement, il ya des formats (importants pour la lecture) de type bordure, couleur... et une quantité importante de cellules avec des données /validation comprenant des listes de valeur autorisées.

  13. #13
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour répondre à ta question (à part le zip ) je ne connais pas de méthode pour compacter un classeur Excel (95 - 2003 après je ne sais pas)

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci à tous.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 9
    Points
    9
    Par défaut macro
    ci-dessous une macro qui réduit le fichier, mais vérifier après si tt ok :
    PS : elle n'est pas de moi

    Code : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub Nettoie()
    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 <a href="mailto:GeeDee@m6net.fr">GeeDee@m6net.fr</a>"
    '-------------------------------------------------------------
    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

  16. #16
    Membre du Club
    Homme Profil pro
    Assistant de Direction
    Inscrit en
    Janvier 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Liban

    Informations professionnelles :
    Activité : Assistant de Direction
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2010
    Messages : 81
    Points : 55
    Points
    55
    Par défaut MACRO NETTOYAGE / REDUCTION TAILLE
    LORSQUE J'essaie d'utiliser cette macro, cela supprime bcp de données dans mes tables comportants des zones de cellules nommées (mais pas toute, pourquoi?) la taille est réduite de moitié mais inexploitable après car un nombre de plages nommées on disparues

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    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, 09h27
  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, 18h13
  3. Pb taille fichier Excel
    Par tieumss dans le forum Excel
    Réponses: 3
    Dernier message: 02/12/2009, 17h19
  4. Réduire taille fichier users.dbr sur Xe
    Par nmicoud dans le forum Administration
    Réponses: 7
    Dernier message: 09/01/2009, 14h39
  5. Réponses: 1
    Dernier message: 02/10/2008, 03h30

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