Taille de fichier et macro lente

loub35

XLDnaute Junior
Bonjour le Forum,
J'ai un fichier avec quelques macros (qui font essentiellement de la copie de cellules d'une feuille sur une autre), après l'avoir modifié légèrement (copie de 3 cellules supplémentaires), mon fichier est passé de 279 Ko à 2278 Ko ! et de plus la principale macro est très lente (presque du pas à pas).
Quelqu'un aurait-il une petite idée ???
C'est difficile de vous joindre le fichier vu sa taille !!
Merci de votre aide
 

Kobal

XLDnaute Junior
Re : Taille de fichier et macro lente

Bonjour loub35,
A vue de nez (enrhumé), vérifie que si tes macros font appel à des données venant de documents exterieurs (autres classeurs excel, ou autres fichiers), ces documents soient bien refermés ensuite.
 

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

merci pour ta réponse Kobal, mais je ne fais appel qu'à des données issues du fichier du style :

Rows("16:16").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

Sheets("feuil1").Select
Range("C2").Select
Selection.Copy
Sheets("feuil2").Select
Range("B16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("feuil1").Select
Range("C4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("feuil2").Select
Range("C16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Etc...
Je copie environ 40 cellules, la macro tournait en 2 sec, elle met maintenant 15 à 20 sec !!
 

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

bonjour,

tu peux essayer d'exporter tes tes modules, une fois cette opération effectuée, supprime ceux que tu viens d'exporter, enregistre, importe, enregistre.

Vérifie aussi les dernières cellules de tes feulles
touche F5 / Alt C / R / OK

tu peux aussi optimiser ton code
Code:
     Sheets("feuil1").Range("C2").Copy 
Sheets("feuil2").Range("B16").PasteSpecial Paste:=xlPasteValues


cordialement
 
Dernière édition:

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

Salut Fred, effectivement qd je fais F5 AltC dernière cellule : il m'indique AM 65536 !! alors que mon tableau s'arrête à AM 18. Quelle est la signification de "dernière cellule" = cellules non vides ? comment supprimer?
merci pour ton aide
 

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

re


dernière cellule" = cellules non vides ou formatée...


sélectionne ta colonne AN
Appuie sur la touche majuscule temporaire et flèche droite
Ctrl -

idem pour ligne 19 sauf la flèche vers le bas

enregistre, vérifie ta dernière cellule (normalement AM18)

Refais tourner ta macro, enregistre , vérifie la dernière cellule

@+
 

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

Nickel : Ca fonctionne, j'avais dans ma macro une mise en forme du style :
Columns ("P:p").Select
Selection.NumberFormat = "0.00%"
D'où le format jusqu'en bas !!!
Par contre mes sous totaux ne sont plus en format %... Qd je sélectionne la cellule ou la colonne Format-%, l'enregistrement suivant (ma macro qui copie...) enlève le format du total des colonnes. Je ne sais pas si je me fais comprendre !!
 

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

re :
inverse les lignes de code

colle et formate ensuite
mais c'est étrange si tu utilises xlPasteValues

edit evite autant que possible les select dans tes macros
Code:
 Columns ("P:P").Select
Selection.NumberFormat = "0.00%"
devient
Code:
 Columns ("P:P").NumberFormat = "0.00%"
@+
 
Dernière édition:

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

Je ne suis pas du tout un expert, et mes lignes de code viennent surtout des macros que je fais à la main et ensuite je copie ce qui est généré pour étendre les macros selon mes besoins...Je me doute que mon code est loin d'être optimisé!!
J'ai joint un petit fichier pour te montrer ce que je veux faire, j'utilise la plage où j'enregistre mes données (feuil2) sous forme de liste pour pouvoir récupérer les sommes ou moyennes de mes colonnes de la feuil2. je veux suivre l'évolution du ratio dans la cellule jaune au fur et à mesure de mes enregistrements.
Sûrement existe-t'il un meilleur moyen pour y arriver que les "listes" qui mettent un peu la pagaille je crois...
 

Pièces jointes

  • test.xls
    19 KB · Affichages: 55
  • test.xls
    19 KB · Affichages: 53
  • test.xls
    19 KB · Affichages: 57

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

re

l'enregistreur de macro c'est bien pour trouver une expression
Après essaie de retravailler le code
blabla.Select
Selection.copy
devient blabla.copy

ensuite lorsque tu veux effectuer une tâche répétitive, fait une boucle

dans ton cas, tu peux faire un copie toutes les valeurs, collage spécial, valeur, transposé

@
 

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

"dans ton cas, tu peux faire un copie toutes les valeurs, collage spécial, valeur, transposé" = en code ça donne quoi?

Dans mon fichier exemple, les données sont en colonnes, en réalité, j'ai une feuille-tableau (feuil1) avec une centaine de données dans lesquelles je vais piocher...pour les copier en ligne (feuil2). Puis je remet à zéro mon tableau (feuil1) pour resaisir des valeurs...
Transposer = passer de col en ligne non?
 

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

re :


effectivement, Transpose passe les lignes en colonnes ou l'inverse.

je n'avais pas compris que tu prenais des valeurs dans un tableau.

Tes valeurs sont-elles toujours au même endroit ?

nb le code plus lisible
Code:
Sub Macro1()

' Initialisation des variables
Dim F1 As Worksheet
Dim F2 As Worksheet

' Association des variables aux références
Set F1 = Sheets("Feuil1")
Set F2 = Sheets("Feuil2")

 ' Insertion d'une ligne ??
 'Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
 
  ' Copie des valeurs
  F1.Range("D10").Copy
  F2.Range("C8").PasteSpecial Paste:=xlPasteValues
    
  F1.Range("D11").Copy
  F2.Range("D8").PasteSpecial Paste:=xlPasteValues
  
  F1.Range("D12").Copy
  F2.Range("E8").PasteSpecial Paste:=xlPasteValues
  
  F1.Range("D13").Copy
  F2.Range("F8").PasteSpecial Paste:=xlPasteValues
  
  ' passage à la feulle Feuil2
  Application.Goto F2.Range("A1")
End Sub

bon courage
 

loub35

XLDnaute Junior
Re : Taille de fichier et macro lente

Super ton code !! Ca va plus vite..
Oui mes valeurs sont toujours au même endroit dans 1 er tableau
J'insère une ligne pour que les nouvelles données s'insèrent au dessus, peut-être que je peux id la dernière cellule et insérer dessous?
A+
Loub
 

fred65200

XLDnaute Impliqué
Re : Taille de fichier et macro lente

re :

plus rapide avec un tableau

Code:
Sub Macro6()

Dim F2 As Worksheet
Dim Tablo(3) As Variant 'nombre de valeur à coller -1

' Association des variables aux références
Set F2 = Sheets("Feuil2")

' Insertion d'une ligne Feuil2
 F2.Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

'initialisation du tableau avec les valeurs de cellule
'si tes cellules à copier sont toujours à la même adresse

Tablo(0) = ['Feuil1'!D10]
Tablo(1) = ['Feuil1'!D11]
Tablo(2) = ['Feuil1'!D12]
Tablo(3) = ['Feuil1'!D13]

'remplisage des cellules
F2.Range("c8:f8") = Tablo
End Sub
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 465
Messages
2 088 659
Membres
103 910
dernier inscrit
amor57