Une macro VBA basique mais lente

Bonjour à tous,

Je suis embêté par cette macro qui tourne vraiment très lentement alors qu'il me semble qu'il n'y ait pas beaucoup d'opérations à réaliser. Voici le code :

'Recherche de la dernière ligne du tableau et analyse des programmés / non programmés
RowIndex = 2

While Cells(RowIndex, 1) <> ""
    'Cas programme : on compte 0 (on ne souhaite pas sommer avec les non programmes)
    'Note : On teste aussi si le patient a deja ete compte auparavant
    If Cells(RowIndex, 21) = "Oui" Or Cells(RowIndex, 1) = "" Then
            Cells(RowIndex, 21) = 0
            'Cas non programme : on compte 1 (qui s'additionne aux non programmes)
    ElseIf Cells(RowIndex, 21) = "Non" Then
            Cells(RowIndex, 21) = 1
    End If

     'On teste si il y a egalite entre deux lignes consecutive pour la date, le nom du patient et l'heure admission
 If Cells(RowIndex, 2) = Cells(RowIndex + 1, 2) And Cells(RowIndex, 3) = Cells(RowIndex + 1, 3) And Cells(RowIndex, 12) = Cells(RowIndex + 1, 12) Then
    If Cells(RowIndex, 7) = Cells(RowIndex + 1, 7) Then
        Cells(RowIndex, 7) = ""
    End If
    If Cells(RowIndex, 4) = Cells(RowIndex + 1, 4) Then
        Cells(RowIndex, 4) = ""
    End If
 End If

    RowIndex = RowIndex + 1
Wend

La boucle While principale est vrai sur 2 000 lignes ; cependant, il faut plusieurs minutes pour pouvoir récupérer la main sur Excel le temps que la macro s'exécute. Y a t il une explication ?

Merci de m'éclairer si vous le pouvez !

-- 13 Fév 2011, 23:57 --

Je m'excuse, la réponse est trouvée facilement dans Google.

Si quand vous exécutez une macro qui effectue automatiquement des modifications dans des cellules, vous constatez une lenteur étrange, c'est vraissemblablement parce que votre classeur contient de nombreuses formules, et à chaque changement quelconque d'une cellule, Excel recalcule tout. AUssi, il est sage de mettre avant toute macro l'instruction de blocage du recalcul automatique :

Application.Calculation = xlCalculationManual

Pensez à le remettre à automatique juste avant la fin de la macro :

Application.Calculation = xlCalculationAutomatic

Egalement pour des questions de vitesse d'exécution, il est conseillé de sésactiver le rafraîchissement de l'écran avant la macro, et réactiver après :

Application.ScreenUpdating = False

' Faire plein de choses qui affectent le contenu des cellules

Application.ScreenUpdating = True

Source : http://www.info-3000.com/vbvba/conseiloptimisation.php

Rechercher des sujets similaires à "macro vba basique lente"