Lenteur d'exécution

Résolu
Bonjour,
j'ai un petit souci avec un code qui est pourtant simple. Il est très lent. Il met entre 10 et 15 secondes pour s'exécuter. Y aurait-il une solution svp?

A savoir qu'il est activé par le change de la selection à partir d'une autre feuille.
Sub annuler_mvt()
Dim i, c, j As Integer

Application.ScreenUpdating = False
For i = 3 To 9
    If Sheets(i).Range("L2") = Date Then
        For c = 13 To 70
        j = 4
        Sheets(i).Unprotect Password:=Mdpass
            If Selection.Offset(, -10).Value = Sheets(i).Cells(c, j).Value And Selection.Offset(, -11).Value = Sheets(i).Cells(c, j).Offset(, -1).Value And ActiveSheet.Range("L1").Value = Sheets(i).Cells(c, j).Offset(, -2).Value Then
                Sheets(i).Cells(c, j).Interior.Color = RGB(218, 150, 148)
                Sheets(i).Cells(c, j).Offset(, -1).Interior.Color = RGB(218, 150, 148)
                Sheets(i).Cells(c, j).Offset(, -2).Interior.Color = RGB(218, 150, 148)
                Sheets(i).Cells(c, j).Offset(, -3) = "Annulé"
                Sheets(i).Cells(c, j).Offset(, -3).Interior.Color = RGB(218, 150, 148)
            End If
        Sheets(i).Protect Password:=Mdpass
        Next c
    End If
Next i

Application.ScreenUpdating = True
End Sub


EDIT : Ajout des balises de code

Configuration: Windows / Chrome 83.0.4103.116

3 réponses

  1. Bonjour,

    Mets ce qui nécessite du temps de calcul et qui est indépendant de c, i et j en variable pour ne faire le calcul qu'une fois :
    Selection.Offset(, -10).Value
    Selection.Offset(, -11).Value
    ActiveSheet.Range("L1").Value

    Je pense que le And est évalué systématiquement => essaie peut-être en imbriquant les If (même si c'est moche).
    Je pense que Offset est plus lent que jouer sur la colonne :
    Sheets(i).Cells(c, j-2).Interior.Color

    Mais Range est peut-être encore mieux :
    Sheets(i).Range(Sheets(i).Cells(c, j-3),Sheets(i).Cells(c, j)).Interior.Color = RGB(218, 150, 148)


    A+
    0
    1. Ok je vois ça et je te dis, merci d'avance.
      0
    2. Zoul67
      j'ai effectué toutes les modifs, le souci venait de la protection qui était dans la 2ème boucle. merci pour ton aide précieuse.
      0
    3. @ngio1301Ah oui, on ôte puis remet la protection une multitude de fois.
      0
  2. Contributeur
    Bonjour,

    "selection" désigne quelle cellule ?

    Pourquoi remontes tu les cellules (elles ont toutes la m^me couleur) et il me semble ( à vue de nez que la colonne 4 entre les lignes 10 à 67 auront la couleur demandée (gain de temps ?)

    quand "c" s'incrémente (boucle) la cellule remontée de 3 va écrire annulé" donc à la fin tu auras 57 "annulé"

    j'avoue que je ne comprends ce que cela a pu donner quand tu as fait tes essais

    A te lire

    0
    1. Contributeur
      Excusez moi d'avoir dérangé en essayant d'aider....
      0
    2. salut michel!
      Merci pour ton post, toutefois j'ai codé avec les infos données par Zoul67 et j'ai toujours le souci. J'en déduis que c'est dans le fichier qu'il y a quelque chose qui cloche.
      0
    3. @michel_mj'ai trouvé le problème, c'était dû à la unprotect/protect des feuilles dans la boucle. Je l'ai placé au bon endroit et ça fonctionn super bien maintenant. Merci pour ton aide.
      0
  3. Contributeur
    je t"avais posé cette "selection " appartient à quel objet ?
    0