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 :

Reduire taille fichier relance ancien post


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut Reduire taille fichier relance ancien post
    Bonjour à toutes et tous,

    Je relance cet ancien post :
    http://www.developpez.net/forums/d54...fichier-excel/

    Car après avoir utilisé le code ci dessous copié, certes il fonctionne très bien mais j'ai remarqué le problème suivant.
    La macro efface toutes les colonnes à partir de IV (L1C256) certainement ce qui était la limite du nombre de colonne maxi avant excel 2007.
    malgré mes essais je n'arrive pas à adapter ce code pour tenir compte que mon fichier utilise des colonnes au delà de IV

    Auriez vous une solution ?

    Merci
    Cordialement
    Hugues

    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

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour, bonjour !

    Sur ce forum comme sur un autre où tu as posté la même demande, en respectant les règles (suffit de les lire !)
    cela inciterait peut-être un peu plus à t'aider !

    Déjà baliser le code via l'icône dédiée, y a même une animation pour les moins doués dans les règles !
    Puis mettre un lien sur chaque forum où la même question a été posée afin de vérifier si une réponse a déjà été donnée …


    __________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut
    Bonjour Marc-L,

    Je te remercie pour ta réponse et tu as tout à fait raison de m'alerter sur le fonctionnement de ce forum.
    J'avoue ne pas avoir relu les règles et vais donc m'empresser de le faire.
    Donc à toutes et tous, j'espère que ma démarche ne vous aura pas heurté mais parfois au pied du mur du problème on perd un peu de lucidité.

    Merci
    Cordialement
    Hugues

  4. #4
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut
    Re bonjour à toutes et tous,

    Je sollicite de nouveau votre aide en espérant cette fois ci respecter le mode de fonctionnement du forum

    Je ne parviens pas à adapter le code Excel VBA ci après qui fonctionnait très bien sous excel 2003 mais qui à partir de excel 2007 supprime de leur contenu toutes les colonnes à partir de IV, même celle contenant des donnés.

    Merci
    Cordialement
    Hugues

    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

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 725
    Par défaut
    Bonjour,

    Pour aller au plus simple, tu as juste à remplacer "IV" par la colonne max ("XFD" sur xlsx/xlsm) dans la ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not DCell Is Nothing Then Sht.Range(DCell, Sht.[IV1]).EntireColumn.Delete

  6. #6
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Par défaut
    Bonjour,

    Merci beaucoup Promethee25
    Mon problème est résolu, c'était effectivement tout simple

    Cordialement

    Hugues

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

Discussions similaires

  1. logiciel : reduire taille des fichiers
    Par Emcy dans le forum Outils
    Réponses: 3
    Dernier message: 02/12/2008, 12h55
  2. [Servlet] Créer un fichier sur un poste distant
    Par JohnBlatt dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 07/05/2005, 18h51
  3. Limiter taille fichier joint à un mail
    Par fdthierry dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 27/08/2004, 12h12
  4. [URL] taille fichier
    Par hocinema dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/07/2004, 16h03

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