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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    je t"avais posé cette "selection " appartient à quel objet ?
    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

      1. Contributeur
        Excusez moi d'avoir dérangé en essayant d'aider....
      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.
      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.
    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+
      1. Ok je vois ça et je te dis, merci d'avance.
      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.
      3. @ngio1301Ah oui, on ôte puis remet la protection une multitude de fois.