Gros probleme de macros

nobleza

XLDnaute Nouveau
Bonjour à tous,;)

j'ai déjà posé ce problème mais sans succès!:( :confused:c'est pourquoi je me permet aujourd'hui de reposer la question espérant avoir une issue.;)
bon, j'ai créé une application de facturation sur excel 2007 qui se compose de deux feuilles :

feuille 1 : où est élaboré la facture ( c'est un modèle qui puise les informations en fonction du client, à travers la formule RECHERCHEV)
feuille 2 : c'est là où se trouve le tableau regroupant les informations clients ( là où la facture puise ses informations)

j'ai remarqué qu'à chaque fois que j'enregistre une facture via le code en bas, le classeur prend du volume, il est passé à 23 Mo en unee semaine. j'arrive même pas à l'ouvrir tellement il est lourd.

Sub Enregistrer_Facture_Excel()
'
' Enregistrer_Facture_Excel Macro
'
' Touche de raccourci du clavier: Ctrl+v
'
Sheets("Facture").Select
Sheets("Facture").Copy
Sheets("Facture").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoSelection
End Sub


merci d'avance:D
 

nobleza

XLDnaute Nouveau
Re : Gros probleme de macros

bonjour, je te le confirme: mon classeurs comprends plusieurs images que j'ai compressé comme on me la demander .
mais même avec ça, je ne vois pas pourquoi le classeur source gonfle à chaque foi que j'enregistre !!!
merci
 

jeanpierre

Nous a quitté
Repose en paix
Re : Gros probleme de macros

Bonjour nobleza, phlaurent, le forum,

Ce que je comprends, c'est qu'à chaque nouvelle facture tu l'enregistres pour archivage, dans ce cas, il est donc normal que le fichier gonfle.

Il faudrait que, lors de cet archivage, tu enregistres sans les images (la seule chose qui intéresse c'est la facture, pas le reste). Je ne vois pas d'autre solution.

Bonne journée.

Jean-Pierre
 

gilbert_RGI

XLDnaute Barbatruc
Re : Gros probleme de macros

Bonjour

Voilà une réponse pour les fichiers ayant une tendance à l'obésité.

FichierObèse-Commentaire-procédure-Laurent Longre

Je crois que dans la plupart des cas, les classeurs qui font de la
surcharge pondérale à l'insu de leur plein gré sont victimes du
phénomène suivant:

- Crée un classeur tout neuf, avec 5 feuilles vides.
- Sélectionne toutes les feuilles, et mets le nombre 1 dans leur cellule
A1
- Enregistre le classeur => sa taille devrait être de 20 K.
- Maintenant, toujours avec les 5 feuilles sélectionnées, va sur la
cellule A65536 et mets sa police par exemple en couleur rouge.
- Enregistre le classeur => sa taille est maintenant de 142 K.
Multipliée par 7.

Comme la surcharge pondérale est dûe à une seule cellule, qui plus est
ici "invisible" (elle ne contient rien du tout, seul son format est
modifié), difficile de voir a priori par quoi elle est causée.

La solution ? Utiliser cette macro :

Sub Nettoie()
Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String
On Error Resume Next
Calc = Application.Calculation
With Application
.Calculation = xlCalculationManual
.StatusBar = "Nettoyage en cours..."
.EnableCancelKey = xlErrorHandler
.ScreenUpdating = False
End With
For Each Sht In Worksheets
If Sht.UsedRange.Address <> "$A$1" Or Not IsEmpty(Sht.[A1]) Then
Set DCell = Sht.Cells.Find("*", , , , xlByRows, xlPrevious)(2)
If Not DCell Is Nothing Then
Sht.Range(DCell, Sht.Cells([A:A].Count, 1)).EntireRow.Clear
Set DCell = Nothing
Set DCell = Sht.Cells.Find("*", , , , xlByColumns, xlPrevious)(,2)
If Not DCell Is Nothing Then _
Sht.Range(DCell, Sht.[IV1]).EntireColumn.Clear
End If
Rien = Sht.UsedRange.Address
End If
Next Sht
Application.StatusBar = False
Application.Calculation = Calc
End Sub

Maintenant, pourquoi ce phénomène ? Parce qu'Excel stocke les données
des cellules sous la forme suivante:

- Pour chaque feuille, il mémorise les numéros de ligne de la première
cellule et de la dernière cellule utilisées, au sens large (cellule
contenant une valeur ou ayant un format particulier).

- Toutes les lignes se situant entre ces deux cellules sont divisées en
blocs de 32 lignes maxi.

- L'adresse de départ de chacun de ces blocs est mémorisée dans un
enregistrement dénommé INDEX. Ces adresses sont stockées sur 4 octets.

- Chaque bloc comprend au moins un enregistrement (DBCELL) de taille
variable contenant les adresses des enregistrements décrivant les lignes
de données (ROW) et les contenus des cellules (champs RK, ARRAY, BLANK,
BOOLERR, FORMULA, NUMBER, MULRK etc selon le type de valeur). Si le bloc
ne contient rien, cad si les 32 lignes sont complètement vides,
l'enregistrement DBCELL correspondant fait une taille de 8 caractères
(descripteur d'enregistrement + adresse du premier bloc suivant).

Je vais prendre l'exemple d'une feuille contenant une valeur (ou
simplement un format particulier) en A1, une autre en A65536, et à part
ça du vide total, pour déduire par calcul la taille nécessitée:

- Nombre de lignes de la plage "utile" : 65536

- Nombre de blocs de 32 lignes :
65536 / 32 = 2048 blocs

- Stockage des adresses (4 octets) de ces 2048 blocs dans
l'enregistrement INDEX:
2048 * 4 = 8 192 octets

- Stockage des enregistrements DBCELL des 2048 blocs (8 octets chacun):
2048 * 8 = 16 384 octets

- Total nécessaire : 8192 + 16384 = 24 576 octets, soit 24 K.

Toutes les lignes vides entre A1 et A65536 vont donc entraîner une
surcharge pondérale d'environ 24 K.

Si je reprends mon premier exemple (les 5 feuilles), le compte est bon:
classeur sans lignes vides = 20 K, classeur avec cellule A65536 remplie
= 142 K, différence = 122 K, divisée par 5 feuilles = 24,4 K.

Conclusion : quand la taille du classeur paraît démseurée, il est
impératif de vérifier au moins qu'il ne traîne aucune cellule isolée
quelque-part très bas dans une des feuilles de calcul, contenant soit
une valeur, soit un format particulier. Et de supprimer le cas échéant
toutes les lignes qui vont de cette cellule à la dernière ligne
réellement utilisée dans la feuille. Ce que fait automatiquement la
macro ci-dessus, sur l'ensemble du classeur.

C'est une raison possible d'obésité parmi d'autres, il y en a d'autres
possibles que je détaillerai peut-être dans un prochain chapitre. ;-)

Laurent

Cdlt

Gilbert_RGI
 

jeanpierre

Nous a quitté
Repose en paix
Re : Gros probleme de macros

Re, Bonjour Gilbert_RGI,

A bien relire, ne tiens pas compte de ce que j'ai dit (j'avais zappé classeur source).

Par contre, que fait ton code donné dans le premier post ?

Il semblerait que tu copies la facture sur elle même, donc et si c'est le cas, tu multiplies les images alors que le reste de ta facture reste unique. Si j'ai bien compris évidemment.

Sur une copie de ton fichier, tu fais Edition/Atteindre, en bas tu cliques sur Cellules et tu coches Objets et tu supprimes pour voir ce qui ce passe. Et tu recommences autant de fois que nécessaire. Fais quelques enregistrements intermédiaires et vérifie le poids.

Essaie et dis nous.

Bon WE.

Jean-Pierre
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 595
Messages
2 090 105
Membres
104 383
dernier inscrit
steph2808