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 :

[VBA] Augmentation de la taille du fichier à chaque .copy


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Pool
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Pool

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Par défaut [VBA] Augmentation de la taille du fichier à chaque .copy
    Bonjour à tous,

    Mon problème est simple et très très ennuyeux.
    Je travail sur une macro de repporting automatisé, qui se charge de générer tableau/pwp/graph/etc..
    Le soucis c'est que je suis amené à copier des sheets, ici l'utilisation de la sheet_temp est pour éviter de travailler sur une sheet potentiellement modifié sur l'utilisateur. Mon process est donc le suivant :

    BDD Original (fichier externe)
    -> importation dans BDD_Temp (fichier local)
    -> Pushing de BDD_Temp dans BDD (fichier local)
    -> retraitement sur BDD

    -> si BDD <> BDD_Temp -> BDD_Temp remplace BDD (d'où le copy)

    Or chaque fois que j'effectue la copie de BDD_Temp vers BDD mon fichier augmente de taille, peut importe ce qui a pu se passer avant.

    Admettons que je ne lance que la macro qui copy BDD_Temp dans BDD, alors mon fichier augmente d'environs 80ko.
    Ce n'est rien vous me direz ? Eh bien... si... par ce que 80*beaucoup d'execution ça fait des fichiers totalement instable...
    Quand je met en commentaire la ligne de copie, le fichier n'augmente plus de taille (mais ne réduit pas pour autant).

    C'est très très embêtant, d'autant que l'ensemble du système fonctionne il est juste rendu instable par cette croissance continue du poids du fichier...

    J'ai l'impression que certaines variables/données ne sont pas purgé à la fin de chaque copy/execution de macro...
    Je n'ai pas de variable globale.

    Après plusieurs heures d'arrachage de cheveux et de recherche sur notre moteur de recherche favori, je ne trouve aucune solution...

    Mon code est pourtant simple (j'ai retiré tous ce qui n'était pas pertinent, à noter que le problème persiste même sans ce code non pertinent) :

    Le code se trouve dans un UserForm dans la fonction "initialize" donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
         Sheets("BDD_Reporting_Temp").Cells.Copy Sheets("BDD_Reporting").Cells
        Sheets("Table").Rows.Delete
    End Sub
    Et dans le module qui initialise l'userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub GenerateTable()
        TS_Choice.Show
        Set TS_Choice = Nothing
    End Sub
    A noter que j'ai déjà essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Sub ClearClipboard()
         Dim oDataObject As DataObject
     
         Set oDataObject = New DataObject
         oDataObject.SetText ""
         oDataObject.PutInClipboard
         Set oDataObject = Nothing
     End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CutCopyMode = False

    Bref... HELP

    Merci d'avance,

    Amicalement,
    Ed'

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    je te recommande d'utiliser un format ideal pour le stoackage de donnees, le format binaire xlsb.
    http://jpcheck.developpez.com/tutori...binaires-xlsb/

    ca ne resout pas l'aspect "prise de poids du fichier", mais ca en limite considerablement les effets =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Homme Profil pro
    Pool
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Pool

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Par défaut
    Bonjour,

    Encore désolé pour le mauvais choix du forum. Mon fichier est actuellement en xlsm pour pouvoir gérer aussi les rubans dynamiques, or de souvenir le xlsb ne permet pas de les gérer :/

    Merci de ta réponse !

    Ce bug est vraiment génant, puisque la macro est vouée à être utilisé plusieurs années...
    Et je ne peux pas me permettre de faire un fichier qui grossit grossit puis qui est supprimé et remplacé par un autre fichier une fois un seuil atteint... :/

    Edit :
    Je viens de trouver la solution !
    (comme quoi à force de chercher on trouve )
    Je laisse la sollution ci-après car le savoir est la seule chose qui augmente quand on le partage:
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Sheets("BDD_Reporting_Temp").Cells.Copy Sheets("BDD_Reporting").Cells
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("BDD_Reporting_Temp").Cells.Copy
        Sheets("BDD_Reporting").Cells.PasteSpecial Paste:=xlPasteValues
    A noter que si votre config est trop petite, le copy/paste peut provoquer un "out of memory".

    Elle parait aussi débile que le problème... mais ça marche donc bon...
    A noter que l'utilisation d'autre type de Paste ne fait pas non plus grossir le fichier...

    Vive le VBA ._.'

    Bonne journée à tous!

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ton fichier source utilise-t-il des mises en formes conditionnelles ou autres fonctionnalitées de ce type rattachées à des plages de cellules ? (plages nommées par exemple).

    car la méthode .Copy va TOUT embarquer, et tout dupliquer à chaque copie ... et tu te retrouves avec des doublons de MEF ou de plages nommées qui pompent de la place

    Le PasteSpecial a le mérite de n'embarquer.... que les éléments que tu lui indiques (valeurs, formats, formules etc...)

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

Discussions similaires

  1. Augmentation de la taille du fichier ibdata1
    Par Flipmode dans le forum Administration
    Réponses: 1
    Dernier message: 16/02/2009, 16h59
  2. Réponses: 4
    Dernier message: 09/02/2008, 11h18
  3. Réponses: 1
    Dernier message: 26/04/2006, 12h01
  4. [Redo log] : augmenter la taille des fichiers
    Par user_oracle dans le forum Oracle
    Réponses: 3
    Dernier message: 29/11/2005, 19h49
  5. Taille du fichier gdb augmente beaucoup trop
    Par Y dans le forum Débuter
    Réponses: 4
    Dernier message: 01/04/2005, 12h46

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