Boucles très lentes !!! bizarre...

hbb

XLDnaute Occasionnel
Bonsoir à tous,

J'ai écris un code VBA qui me permets de colorier les colonnes correspondant aux jours fériés.

Je trouve que le traitement est très long !!!!
Peut-être parce que j'ai une boucle dans une autre ?

Avez-vous une idée ?

Merci,

Hbb
 

Pièces jointes

  • JoursFériés.xls
    29 KB · Affichages: 48
  • JoursFériés.xls
    29 KB · Affichages: 51
  • JoursFériés.xls
    29 KB · Affichages: 50

salim

XLDnaute Occasionnel
Re : Boucles très lentes !!! bizarre...

Bonsoir

Hbb t'a macro est lente pour toutes les raisons noté ci dessous dans ton code :
Code:
Sub JoursFériés()

Dim Listeferies As Date
Dim i As Long
Dim j As Long

[I] Ici tu t'es trompé c'est a la fin qu'il faut le remettre [/I]
    Application.ScreenUpdating = True

[I] c'est ici que cela ralenti enormement parceque a chaque tour de boucle tu
vas récuperer la valeur d'une cellules ListeFeries pour ensuite la comparées
avec l'une des cellules de la ligne 12[/I]

    For i = 27 To Range("F65536").End(xlUp)
        Listeferies = Cells(i, 6).Value
        For j = 10 To 19
            If Cells(12, j) = Listeferies Then
'la selection de la plage est inutile est ralenti 
                Range(Cells(12, j), Cells(15, j)).Select
                With Range(Cells(12, j), Cells(15, j))
                    With Selection.Interior
                        .ColorIndex = 0
                        .Pattern = xlLightUp
                        .PatternColorIndex = xlAutomatic
                    End With
                End With

            End If
        Next
    Next
[I] c'est au début[/I] 
    Application.ScreenUpdating = False
End Sub
Je te propose donc le code suivant ( il y a surement mieux mais bon...) qui est dans la pièces jointe:

Code:
Option Explicit
Sub JoursFériés()

Dim Listeferies As Range
Dim i As Long
Dim j As Long

    Application.ScreenUpdating = False

[I]Je charge d'un coup les Fériés[/I]
    Set Listeferies = Feuil3.Range("F27", Range("F65536").End(xlUp)).Rows
[I]La je travail avec les données en mémoire plutot que directement sur la feuille alors ça va plus vite.[/I]
    For i = 1 To Listeferies.Count
        For j = 10 To 19
            If Cells(12, j) = Listeferies(i) Then
                With Range(Cells(12, j), Cells(15, j))
[I]ici pas de select[/I]
                    With .Interior
                        .ColorIndex = 0
                        .Pattern = xlLightUp
                        .PatternColorIndex = xlAutomatic
                    End With
                End With
            End If
        Next
    Next i
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • JoursFériés.zip
    7.3 KB · Affichages: 24

Discussions similaires

Statistiques des forums

Discussions
312 652
Messages
2 090 539
Membres
104 572
dernier inscrit
saumech