« Macros-commandes VBA/Devenez un expert » : différence entre les versions

Contenu supprimé Contenu ajouté
modification et ajout de contenu
réorganisation de contenu
Ligne 274 :
</source>
}}
 
== Erreurs ==
 
Toutes les macros peuvent comporter des erreurs, en voici 2 exemples courant :
 
=== L’erreur de débordement ===
Créer une macro qui supprime certaines lignes en rencontrant une certaine condition
 
Soit la feuille suivante : A1 = AAAA, A2 = BBBB, A3 = CCCC
 
L'algorithme suivant qui semble juste à première vue est faux :
 
Pour i de 1 à 3
Si ConditionSurLigne(i) Alors SupprimerLigne(i)
Suivant
 
En effet avec un compteur allant de 1 à 3, lors de la première itération, la ligne supprimée sera la ligne 1 : AAAA. En revanche, lorsque l’itération passera à 2, elle analysera donc la ligne dorénavant en 2eme position, c’est-à-dire « CCCC » puisque la ligne BBBB sera passer en ligne 1, du fait de la précédente suppression de ligne. Nous venons de rencontrer une erreur de débordement.
 
Il existe une solution simple pour éviter ce genre d’erreur : partir du bas du tableau et remonter
 
Pour i de 3 à 1
Si ConditionSurLigne(i) Alors SupprimerLigne(i)
Suivant
 
Traduction en langage VBA :
 
For i = 3 To 1 Step -1
If ConditionSurLigne(i) Then Rows(i).Delete
Next
 
=== La boucle infinie ===
 
 
En informatique une boucle infinie désigne une boucle qui tourne indéfiniment car la condition de sortie n'est jamais respectée. Dès lors le programme est bloqué dans cette boucle ce qui oblige à quitter le programme pour sortir de la boucle.
 
 
Une telle boucle est très souvent considérée comme un problème car l'ordinateur sollicite trop de ressources pour exécuter la boucle infinie. Si le programme ne peut être fermé cela implique même d'éteindre l'ordinateur pour réussir à arrêter le processus.
L’exemple le plus simple d’une boucle infinie est le suivant :
 
Tant que VRAI
 
ou en anglais
 
while TRUE
 
 
C'est-à-dire que les instructions doivent être exécutées tant que l'évaluation de l'expression logique « VRAI » a comme résultat « VRAI ».
On pourrait également très simplement créer une boucle infinie comme ceci :
 
i = 0
 
while i < 10:
 
i = 1
 
 
En effet, la boucle se termine lorsque i n'est plus inférieur à 10, or l'instruction présente dans la boucle donne toujours à i la valeur 1 ; la condition d'entrée de la boucle est donc toujours vraie.
 
== Annexes ==