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
WendLa 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