Lenteur d'exécution

Résolu/Fermé
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022 - Modifié le 9 juil. 2020 à 11:09
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022 - 9 juil. 2020 à 15:21
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

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
9 juil. 2020 à 11:36
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
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022
9 juil. 2020 à 13:16
Ok je vois ça et je te dis, merci d'avance.
0
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022
Modifié le 9 juil. 2020 à 13:49
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149 > ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022
9 juil. 2020 à 14:26
Ah oui, on ôte puis remet la protection une multitude de fois.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 9 juil. 2020 à 11:40
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2020 à 13:23
Excusez moi d'avoir dérangé en essayant d'aider....
0
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
9 juil. 2020 à 15:21
j'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
ngio1301 Messages postés 46 Date d'inscription jeudi 5 décembre 2019 Statut Membre Dernière intervention 14 mai 2022
9 juil. 2020 à 13:44
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2020 à 14:09
je t"avais posé cette "selection " appartient à quel objet ?
0