Autres Optimiser UN CODE très lent

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chaelie2015

XLDnaute Accro
Bonsoir Forum
Ce code, nommé "Mise_a_jour", parcourt une plage de cellules dans la feuille de calcul "CRT", allant de C17 à C47. Pour chaque cellule dans cette plage (appelée "cell1"), il définit une autre cellule (appelée "cell2") en utilisant la même ligne, mais dans la colonne AO. Ensuite, il convient si la valeur de cell2 n'est ni "sam" ni "ven". S'il est vrai, il faut si la couleur de fond de cellule1 est blanche (RGB (255, 255, 255)). Si c'est le cas, il définit la valeur de cellule.
je souhaite le optimiser il semble qu'il est tres lent.
Merci

VB:
Sub Mise_a_jour() ' code moin rapide que le precedant
Dim cell1 As Range, cell2 As Range
For Each cell1 In Sheets("CRT").Range("C17:C47" & derniereLigne)
    Set cell2 = Sheets("CRT").Range("AO" & cell1.Row)
    If (cell2.Value <> "sam") And (cell2.Value <> "ven") Then
        If cell1.Interior.Color = RGB(255, 255, 255) Then
            cell1.Value = "8"
        End If
    ElseIf (cell2.Value = "sam") Or (cell2.Value = "ven") Then
        cell1.Value = "RH"
    End If
Next cell1
End Sub
 
Bonsoir
Alors sans fichier exemple pour tester, je peux uniquement te proposer :
VB:
Sub Mise_a_jour()

Dim Cellule As Range
Dim ValCellule2 As String

With Sheets("CRT")
    For Each Cellule In .Range("C17:C47")    ' j'ai viré le "& derniereLigne" du range car variable non déclarée qui sert à ???
        ValCellule2 = Cells(Cellule.Row, "AO").Value
        Select Case ValCellule2
            Case "sam", "ven"
                Cellule.Value = "RH"
            Case Else
                If Cellule.Interior.Color = RGB(255, 255, 255) Then Cellule.Value = 8
        End Select
    Next Cellule
End With

End Sub
 
Bonjour à tous,

@chaelie2015,

Franchement, après 1 481 messages ne pas joindre de fichier est incompréhensible. Ce sont les répondeurs qui doivent le faire ?

Dans le code initial il est écrit : ' code moins rapide que le précédant
Pourquoi ne pas conserver le précédent ? ( 🤪 )

Que vaut "derniereLigne" ? Si c'est 0, alors la plage examinée sera C17:C470. Si "derniereLigne" vaut 1 000, la plage examinée sera C17:C47000 😱.
 
Bonsoir
Alors sans fichier exemple pour tester, je peux uniquement te proposer :
VB:
Sub Mise_a_jour()

Dim Cellule As Range
Dim ValCellule2 As String

With Sheets("CRT")
    For Each Cellule In .Range("C17:C47")    ' j'ai viré le "& derniereLigne" du range car variable non déclarée qui sert à ???
        ValCellule2 = Cells(Cellule.Row, "AO").Value
        Select Case ValCellule2
            Case "sam", "ven"
                Cellule.Value = "RH"
            Case Else
                If Cellule.Interior.Color = RGB(255, 255, 255) Then Cellule.Value = 8
        End Select
    Next Cellule
End With

End Sub
Bonsoir Deadpool_CC
Merci beaucoup, il est un peu rapide que le mien
 
Que vaut "derniereLigne" ? Si c'est 0, alors la plage examinée sera C17:C470. Si "derniereLigne" vaut 1 000, la plage examinée sera C17:C47000 😱.
Bonjour mapomme
la variable "dernièreLigne" est utilisée pour stocker la valeur de la dernière ligne non vide de la colonne C dans la feuille de calcul "CRT". Cette valeur est utilisée pour limiter la plage de cellules parcourues par la boucle "For Each" pour seulement celle qui contient des données, donc éviter de parcourir des lignes vides ce qui va améliorer les performances de la boucle.
 
Bonjour à tous,

@chaelie2015,

Franchement, après 1 481 messages ne pas joindre de fichier est incompréhensible. Ce sont les répondeurs qui doivent le faire ?

Dans le code initial il est écrit : ' code moins rapide que le précédant
Pourquoi ne pas conserver le précédent ? ( 🤪 )

Que vaut "derniereLigne" ? Si c'est 0, alors la plage examinée sera C17:C470. Si "derniereLigne" vaut 1 000, la plage examinée sera C17:C47000 😱.
re
Si la variable "dernièreLigne" vaut 0, cela signifie qu'il n'y a aucune donnée dans la colonne C de la feuille de calcul "CRT", donc la plage examinée par la boucle "For Each" sera vide. Dans ce cas, la boucle ne sera pas exécutée car il n'y a pas de cellules à progression.
 
C'est l'avantage du Select Case ... il evalue pas les instructions du case Else s'il le case précédent est ok
et regarder 1 seul fois la valeur de la 'cellule2' plutôt qui de la lire pour tous les test que tu avais mis ... lol

après comme dit @mapomme sans fichier exemple difficile d'optimiser
RE Deadpool_CC
Merci pour les details
je vais faire mon possible pour préparer le fichier exemple (l'original est confidentiel et très volumineux)
Merci
 
Bonsoir,
Juste pour un p'tit truc...
C'est l'avantage du Select Case ...
Je me souviens d'un essai, effectué il y a quelques années... (je n'arrive pas à le retrouver, mais ça ne doit pas être difficile de le refaire...)(quelques années, en gros 15/20 ans...)
Et que le If...Then..End If était plus rapide que Select Case...
@ vérifier, donc...
Bonne soirée à tous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
422
Réponses
0
Affichages
378
Réponses
0
Affichages
537
Réponses
3
Affichages
598
Réponses
3
Affichages
458
Retour