Sortie anticipée d’une boucle For … Next (Microsoft Excel)
Si vous utilisez les boucles For … Next dans votre programmation de macro (qui ne le fait pas?), Sachez qu’elles peuvent prendre beaucoup de temps. Vous pouvez minimiser cela en ne vérifiant que ce dont vous avez besoin. Par exemple, considérez le code suivant, qui vérifie un tableau pour voir si une valeur existe. Si ce n’est pas le cas, il ajoute la valeur à la fin du tableau. Si c’est le cas, la valeur n’est pas ajoutée.
AddIt = False For J = 1 to NumEntries If NumValues(J) = ToAdd Then AddIt = True Next J If AddIt Then NumEntries = NumEntries + 1 NumValues(NumEntries) = ToAdd End If
Cela fonctionne très bien, mais si le tableau devient grand, vous pouvez finir par passer par la boucle For … Next plusieurs fois. Considérez maintenant le code suivant, qui accomplit la même tâche, mais qui sort de la boucle For … Next tôt si une correspondance est détectée.
AddIt = False For J = 1 to NumEntries If NumValues(J) = ToAdd Then AddIt = True Exit For End If Next J If AddIt Then NumEntries = NumEntries + 1 NumValues(NumEntries) = ToAdd End If
Maintenant, si une correspondance est trouvée au début de la boucle, toutes les autres itérations sont ignorées car l’instruction Exit For est rencontrée et la boucle est pratiquement terminée immédiatement. Le résultat est une macro qui s’exécute plus rapidement.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (2260) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:
link: / excelribbon-Exiting_a_For_Next_Loop_Early [Quitter une boucle For … Next tôt]
.