Bonjour Korgger, bonjour le forum,
L'événementielle Change, comme son nom l'indique, s'exécute à chaque changement dans l'onglet. Comme lors du changement en B5 on pourrait modifier d'autres cellules de ce même onglet, cela relancerait la procédure et provoquerait une boucle. La ligne de code :
If Target.Address <> "$B$5" Then Exit Sub
fait qu'à la première boucle si le changement se fait ailleurs qu'en B5 on sort de la procédure et la boucle cesse. Je ne sais pas si c'est clair mais en bref c'est pour éviter les boucles... Ça permet de restreindre l'action de l'événementielle Change (ou toute autre événementielle) ici à une seule cellule mais on pourrait la limiter à une plage, une colonne, une ligne, etc.
If Application.Intersect(Target, Range("A1:C20")) Is Nothing Then Exit Sub 'ne fonctionne que sur la plage A1:C20
If Target.Column <> 1 Then Exit Sub 'ne fonctionne que dans la colonne A
If Target.Row <> 1 Then Exit Sub 'ne fonctionne que dans la ligne 1
Les procédures doivent, par défaut, se trouver dans un module plutôt que dans un composant Worksheet. D'ailleurs les variables déclarées publiques ne fonctionnent que si elles se trouvent dans un module. Toutefois, on peut utiliser une procédure dans un composant Worksheet si elle est utilisée que dans cet onglet mais, par habitude, je ne place que les événementielles dans les composants Worksheet et les autres procédures dans des modules...