POurquoi mon code est-il si lent?

Bonjour,

je viens de terminé une macro pour le service production (fichier joint)

je pense qu'il n'y a pas d'erreur majeur dans mon code (la macro tourne) mais je ne comprend pas pourquoi c'est si lent:

les boucles les plus grandes contiennent 200 lignes c'est pas la mort pourtant

EDIT ADMIN : adresses email retirées

BOnjour

il y a quand même bcp de boucles dans tes macros...

mais on peut simplifier certaines choses... et surtout des choses qui prennent du temps

ici par exemple :

Sub verif_nok_avec_com()
'verif que tous les NOK ont un com avant de lancer
Dim j As Integer
Dim repnok2 As String

repnok2 = "NOK"

For j = 3 To 23
Cells(j, 34).Select
If Cells(j, 34) = repnok2 Then
        Cells(j, 35).Select
        If Cells(j, 35) = 0 Then
        MsgBox "verifier que tous les audits NOK ont un commentaire"
        GT = 1
        Exit Sub
        Else
        End If

Else
End If
Next
End Sub

A quoi servent les

Cells(j, 34).Select
Cells(j, 35).Select

Tu peux supprimer tout cela...

tu peux aussi simplifier ceci :

For i = 3 To 202
    If Cells(i, 2) = "" Then
    Cells(i, 6) = 0
    End If
    If Cells(i, 4) = "X" Then
    Cells(i, 6) = 0
    End If
Call BarreDeProgression
Next

en

For i = 3 To 202
    If Cells(i, 2) = "" OR  Cells(i, 4) = "X" Then Cells(i, 6) = 0
Call BarreDeProgression
Next

ensuite comme tu as des calculs matriciels dans tes cellules tu pourrais mettre au début d'exécution du code

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

et ceci à la fin

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Si tu n'as pas besoin de résultats de calcul dans l'exécution du code

Fred

Je ne peux pas exécuter ton code sur ma machine car tu as fais des déclaration d'API 32bits alors que moi je suis en 64bits.... et donc cela ne marche pas...

Fred

Tu ferais aussi bien de supprimer ton fichier et le remettre en ayant supprimer les mails présents dans la feuille liste cellule AD3 et suivantes...

Fred

Bonjour,

Avec le premier exemple, on peut même se délester totalement de la boucle :

Sub verif_nok_avec_com()

if application.countifs(range("AH3:AH23"), "NOK", range("AI3:AI23"), 0) > 0 then
    MsgBox "verifier que tous les audits NOK ont un commentaire"
    GT = 1 '??? variable publique ?
    Exit Sub
end if

End Sub

Cdlt,

Merci a tous pour vos réponse,

effectivement la meilleur amélioration c'est avec calculation=manual mais que je dois mettre a plusieurs endroits avec j'ai besoin de certains résultats intermédiaires

il y a aussi effectivement des .select qui trainent

@fred2406

moi je veux bien mais je n'ai plus accès a l'édition pour ce message

merci

Bonsoir

un admin est passé par là... et a supprimer les adresses mails....

Bonne continuation

Fred

cool merci

Rechercher des sujets similaires à "pourquoi mon code lent"