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. Contributeur
    je t"avais posé cette "selection " appartient à quel objet ?
    0
    1. 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
    2. 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