Bug macro worksheet_change en boucle

c.sintive

XLDnaute Nouveau
Bonjour le forum,

Je suis nouveau sur le forum et j'aurai besoin de votre aide précieuse.
Voilà mon problème. Je possède dans mon fichier une base de données que j'ai restreinte à 3 colonnes.
colonne 1 : numéro national (identifiant unique)
colonne 2 : numéro de travail
colonne 3: nom de l'individu (des vaches en l’occurrence ...)

Je souhaiterai, pour chaque ligne, qu'à la saisie d'un de ces 3 éléments les deux autres s'affichent automatiquement si la vache a déjà été renseignée une première fois et que les données sont donc disponibles dans la base de données.

J'ai donc réalisé une macro avec worksheet_change. Seulement elle s'applique sur les 3 colonnes et donc à chaque fois qu'elle inscrit une valeur dans une des cellules, elle se recharge et donc tourne en boucle... du moins c'est l'impression que j'ai.
Le soucis c'est que je ne veux pas bloquer la saisie sur une seule colonne mais bien laisser le choix à l'utilisateur en fonction de l'élément qu'il souhaite saisir (à priori numéro de travail ou nom).

Les "1" en colonne A servent à savoir si la vache a déjà été renseigné, la macro n'est censée se déclencher que sur cette condition. A terme, il faudra que j'insère une fonction sur cette colonne.

J'apprends sur le tas en VBA et mon code n'est surement pas très "beau".... Pour info, au départ dans mon code, je faisais les recherches index/equiv directement en VBA mais j'ai changé parce que ça ramait. Je suis donc passé en "FormulaLocal=".

Merci d'avance pour votre aide.
 

Pièces jointes

  • fichier.xlsm
    23.7 KB · Affichages: 33
  • fichier.xlsm
    23.7 KB · Affichages: 34
  • fichier.xlsm
    23.7 KB · Affichages: 40

Papou-net

XLDnaute Barbatruc
Re : Bug macro worksheet_change en boucle

Bonjour c.sintive,

Pour éviter la récursivité de la macro événementielle, il faut insérer en début de code la commande suivante :

Code:
Application.EnableEvents = False
Et ne pas oublier de la rétablir à la fin :

Code:
Application.EnableEvents = True
En règle générale, ce couple de lignes est à prévoir systématiquement dans l'événement Change.

Tu peux aussi utiliser le paramètre Target pour limiter l'action à une colonne, par exemple :

Code:
If Target.Column >1 Then Exit Sub
N'agira que si la cellule est située dans la colonne A.

Tu peux bien sûr spécifier une plage de cellules, dans ce cas :

Code:
If Intersect(Range("A10:E100"),Target) Is Nothing Then Exit Sub
Espérant avoir répondu.

Cordialement.

Aïe, encore "grillé" par Pierrot !
 

Discussions similaires

Réponses
8
Affichages
158
Réponses
12
Affichages
246

Statistiques des forums

Discussions
312 213
Messages
2 086 307
Membres
103 174
dernier inscrit
OBUTT