Bonjour,

J'ai fait une routine en VBA qui permet de trier les x premières lignes par ordre chronologique (de la date la plus petite a la plus grande). La dernière ligne du champ à trier etant la ligne d'index LastTask.
Les dates se situe dans la première colonne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub switchligne_P(ByVal L1 As Integer, ByVal L2 As Integer) 'Permet d'intervertir 2 lignes
Dim L As Integer
If L1 > L2 Then
    L = L1
    L1 = L2
    L2 = L
End If
Cells(L2, 1).EntireRow.Cut
Cells(L1, 1).EntireRow.Insert Shift:=xlDown
Cells(L1 + 1, 1).EntireRow.Cut
Cells(L2 + 1, 1).EntireRow.Insert Shift:=xlDown
End Sub
 
 
LastTask = xxx 'Dernier ligne où doit se finir le trie
 
'Trie
    CurrentLigne = 1
    Do While (CurrentLigne < LastTask) 'Si CurrentLigne = LastTask il reste plus qu'une ligne, elle est donc dans l'ordre
        LowerDate = Cells(CurrentLigne, 1) 'Par default on considère les task du haut comme celle etant les plus petite date
        I_low = CurrentLigne
        i = CurrentLigne + 1
        Do While (i <= LastTask)
            IDate = Cells(i, 1)             'Lit la date de la ligne i
            If (LowerDate > IDate) Then    'Verifie que la date de la ligne i n'est pas plus petite
                LowerDate = IDate               'Sauvegarde la nouvelle date plus petite
                I_low = i
            End If
            i = i + 1
        Loop
        If (I_low <> CurrentLigne) Then
            switchligne_P CurrentLigne, I_low 'Met la ligne avec le date la plus petite à la place de la ligne courante
        End If
        CurrentLigne = CurrentLigne + 1
    Loop
le principe de cette alogo est pour chaque ligne de regarder si en de sous il y en a une plus petit. si il y en a une plus petit alors on on interverti le ligne.


Cette routine fonctionne parfaitement mais son temps d'exection et estrêmement lent.
En effet, il utilise deux boucles while imbriqué l'un dans l'autre ce qui n'est pas bon...
Quelqu'un a t'il une idée pour optimiser ce trie de maniere a le rendre plus rapide?

1)Cells(L2, 1).EntireRow.Cut
Cells(L1, 1).EntireRow.Insert Shift:=xlDown

2)IDate = Cells(i, 1)
Entre le 1 et 2 ci dessus quel est celui qui prend le plus de temps et combien de fois plus?