![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Junior
Date d'inscription: juillet 2006
Messages: 65
|
Bonsoir le forum,
Voilà j'ai un fichier que voici :http://cjoint.com/?jhsK66XSUx J'ai une macro, située dans le module 4 de mon fichier, qui est associée au bouton de commande situé en bas de la feuille macros_i. Même si je ne remplis rien dans mes tableaux ma macro est super lente. Je connais le code screenupdating. Je l'ai essayé mais ça n'arrange rien. Peut être que je ne le mets pas au bon endroit...Qualqu'un peut-il m'aider à ce sujet? Merci d'avance pour votre aide/ A plus |
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: février 2005
Version Excel : Excel 2000 (PC)
Messages: 255
|
Bonjour,
regarde peut-être calculationmode pour éviter peut-être des recalculs inutiles. Ce qui peut faire perdre du temps aussi ce sont les sélections : Range("D40:E44").Copy va beaucoup plus vite que : Range("D40:E44").Select Selection.Copy pareil : Range("D40:E44").Select Selection.ClearContents peut être remplacé par Range("D40:E44").ClearContents Même les copier collage spécial valeur peuvent être remplacés par Range("D40:E44").value=range("A1:b5").value |
|
|
|
|
|
#4 (permalink) | |
|
XLDnaute Accro
Date d'inscription: avril 2006
Localisation: Basse Goulaine
Version Excel : Excel 2003 (PC)
Messages: 1 408
|
Citation:
je pense que ton problème de vitesse est généré par tes select. Je suis un peu embêté parce que je ne connais pas le but de ta macro et que je pas trop envie de m'y plonger pour savoir si le résultat correspond : par exemple tu fais des tests du style : If ActiveCell = "0" Then Cells(i, 7) = "1" Pourquoi utiliser des chiffres (texte) et pas des nombres ? If ActiveCell = 0 Then Cells(i, 7) = 1 Marche aussi bien sinon mieux (je pense), sauf si tu travailles du texte le début de ta macro devient avec moi : Code:
Dim Lig As Long
Dim derligne1 As Long
Dim i As Long
'arrêt du rafraîchissement dès le début
Application.ScreenUpdating = False
'Copies
'Désignation de la ligne de copie
Lig = Sheets("taches_i").Range("A65536").End(xlUp).Row + 1
'copies directes
With Sheets("macros_i")
.Range("D40:E44").Copy (Sheets("taches_i").Range("A" & Lig))
.Range("F40:F44").Copy (Sheets("taches_i").Range("D" & Lig))
.Range("G40:H44").Copy (Sheets("taches_i").Range("F" & Lig))
.Range("D40:H44").ClearContents
End With
'Feuille taches_i:étendre formule dans colonne 3 ****************
Sheets("taches_i").Select
'Boucle
For i = 3 To 2000 Step 1
derligne1 = Sheets("Paramètres").SpecialCells(xlLastCell).Row
Select Case Range("B" & i)
Case 1
Range("C" & i) = Sheets("Paramètres").Range("I" & derligne1)
Case 2
Range("C" & i) = Sheets("Paramètres").Range("J" & derligne1)
Case 3
Range("C" & i) = Sheets("Paramètres").Range("K" & derligne1)
Case 4
Range("C" & i) = Sheets("Paramètres").Range("L" & derligne1)
Case Else
'si la valeur est différente, on peut mettre un message
End Select
'Feuille taches_i:étendre formule dans colonne 5
If Range("D" & i) <> "" Then _
Range("E" & i) = Sheets("Paramètres").Range("E" & derligne1) / Range("D" & i)
'Feuille taches_i:étendre formule dans colonne 8 et 9
Select Case Range("G" & i)
Case 0
Range("H" & i) = 1
Range("I" & i) = Range("C" & i) * Range("E" & i) * Range("F" & i) * _
Range("G" & i) + 1
Case ""
Range("H" & i) = ""
Range("I" & i) = ""
Case Else
Range("H" & i) = 0
Range("I" & i) = Range("C" & i) * Range("E" & i) * Range("F" & i) * Range("G" & i)
End Select
Next i
......
Je préfère utiliser Range que cells, c'est plus lisible pour moi, mais question vitesse, je n'ai rien mis en évidence sur différents tests Tu fais une boucle de i=3 à 200 : il y a une raison ? pourquoi de 3 à dernière utilisée ? Select case est plus rapide que elseif. le problème est que je ne suis pas sûr que ça ne plante pas avec 1 à la place de "1" et vice-versa A+ Dernière modification par Gorfael ; 08/09/2006 à 08h15. |
|
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: février 2005
Version Excel : Excel 2000 (PC)
Messages: 255
|
Désolé, c'était calculation tout seul.
Objet Application : renvoie ou définit le mode de calcul. Il peut s'agir de l'une des constantes XlCalculation suivantes : xlCalculationAutomatic, xlCalculationManual ou xlCalculationSemiautomatic. Ca correspond à ce qu'on fait quand on fait outils option/calcul/mode de calcul. |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Junior
Date d'inscription: juillet 2006
Messages: 65
|
Salut Sylvain, Salut Gorfael,
Merci de votre aide. Gorfael, je vais essayer ton code qui m'a l'air beaucoup plus simple que le mien.Si problème je reposte ce soir. Bonne journée A+ |
|
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|
Discussions similaires
|
||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| lenteur macro | michel33 | Forum Excel | 20 | 15/05/2005 11h22 |
| Validation - lenteur ! | andré | Forum Excel Downloads - Archives | 14 | 14/10/2004 23h41 |
| lenteur | jacques | Forum Excel Downloads - Archives | 1 | 17/08/2004 14h30 |
| Ouverture et fermeture de fichier d'une lenteur digne d'un 486 | G'Claire | Forum Excel Downloads - Archives | 2 | 15/01/2004 23h50 |
| fichier trop gros? trop de macro? énorme lenteur pour ouvrir le fichier | sam | Forum Excel Downloads - Archives | 1 | 18/12/2002 08h10 |