• Initiateur de la discussion Initiateur de la discussion kevinch
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

K

kevinch

Guest
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
 
Re : lenteur d'une macro

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
 
Re : lenteur d'une macro

kevinch à dit:
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
Salut
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
......
Screenupdatig : tu le mets à FALSE une fois en début et une fois à TRUE en fin, pas besoin de le remettre à treu/false au milieu

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 édition:
Re : lenteur d'une macro

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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
481
Réponses
3
Affichages
655
L
Réponses
33
Affichages
4 K
Léraud Florian
L
Retour