Autres Optimiser UN CODE très lent

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
 

chaelie2015

XLDnaute Accro
Bonsoir,
Juste pour un p'tit truc...

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
Bonsoir bhbh
selon mes recherches sur le net , Il n'y a pas de réponse définitive quant à savoir si "If...Then..End If" ou "Select Case..." est plus rapide, car cela dépend de la situation spécifique dans laquelle ils sont utilisés.
En général, "If...Then..End If" est plus rapide lorsque vous avez un nombre limité de conditions à tester, tandis que "Select Case..." peut être plus rapide lorsque vous avez un grand nombre de conditions qui doivent être testées.
 

Cousinhub

XLDnaute Barbatruc
Inactif
Bonsoir bhbh
selon mes recherches sur le net , Il n'y a pas de réponse définitive quant à savoir si "If...Then..End If" ou "Select Case..." est plus rapide, car cela dépend de la situation spécifique dans laquelle ils sont utilisés.
En général, "If...Then..End If" est plus rapide lorsque vous avez un nombre limité de conditions à tester, tandis que "Select Case..." peut être plus rapide lorsque vous avez un grand nombre de conditions qui doivent être testées.
C'était juste pour pinailler, le pb ne vient pas de là, mais peut-être que mon fil précédent va te donner une piste?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonsoir le fil

à part bhbh qui y fait allusion, je suis le seul que cela choque, que pour un problème de rapidité de traitement, l'affichage écran et le calcul automatique ne soient pas désactivés dans le code posté ?
ou alors j'ai loupé quelque chose !

Cordialement, @+
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
VB:
Sub Mise_a_jour()

Dim Cellule As Range
Dim ValCellule2 As String
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
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
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
et si le problème vient de MFC mal montées, on désactive aussi le calcul pour elles pendant l'exécution
Code:
Sub Mise_a_jour()

Dim Cellule As Range
Dim ValCellule2 As String
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
On Error GoTo Gere_Erreurs
With Sheets("CRT")
    .EnableFormatConditionsCalculation = False
    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
Gere_Erreurs:
Sheets("CRT").EnableFormatConditionsCalculation = True
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

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.
Ne serait-il pas plus simple d'utiliser tout simplement une formule et une MFC ?
 

Deadpool_CC

XLDnaute Accro
Et que le If...Then..End If était plus rapide que Select Case...
c'est vrai quand tu fait un seul test dans ton IF mais si tu as une condition complexe et que tu dois évaluer plein de valeur ... c'est le select case qui l'emporte haut la main :)

[Edit] le temps de retrouver l'info 24,5% de temps en moins sur un de mes gros fichiers comportant un peu plus 873000 lignes sur 253 colonnes ... lors d'un test un novembre sur un de mes dev.
Mais les conditions des IF est pour le moins complexe :)
 

Discussions similaires

Réponses
0
Affichages
304
Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
314 496
Messages
2 110 236
Membres
110 708
dernier inscrit
novy16