Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 vba cel change

  • Initiateur de la discussion Initiateur de la discussion herve62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

herve62

XLDnaute Barbatruc
Bonjour
Je ne maitrise pas trop ce type de sub
j'aimerai avoir un indice qui se mette en A1 selon les valeurs de F1, F2 .... ( il y en aura encore plus avec des SI AND ..)
J'ai choisi le "Change" mais la sub boucle infini
Ou est l'erreur ?
Merci
 

Pièces jointes

Bonjour @herve62 🙂,

Cette procédure évènementielle se déclenche dès qu'une valeur (ou plus ) est modifiée dans la feuille.
Les cellules dont la valeur a changé sont représenté par un range qui s'appelle Target.

Si vous modifiez la cellule F1 alors target représente la cellule F1
Si vous modifiez la plage K2:M4 alors target représente la plage K2:M4
Si vous modifiez trois plages disjointes F1, K2:M4, B1:B9 alors target est le range("F1,K2:M4, B1:B9")

En général, on limite la procédure aux seules cellules dont la modification nous intéresse par une instruction du type:
VB:
if not intersect(target, range("f1:f2")) is nothing then

    ici les instructions qu'on doit exécuter su F1 et/ou F2 ont été modifiés.

endif

Cette procédure et la votre en particulier peut présenter un comportement bien connu:
  • Vous changez A1
  • la procédure se lance
  • vous modifiez A1 dans la procédure
  • donc la procédure se relance une seconde fois
  • vous modifiez A1 dans la deuxième instance de la procédure
  • donc la procédure se relance une troisième fois
  • et ainsi de suite.... jusqu'à débordement de la pile 🙁

Pour éviter cela, juste après l'instruction if not intersect(target, range("f1:f2")) is nothing then,
insérer l'instruction Application.EnableEvents=false (qui inhibe l’interception des évènements - on n'appelera plus la procédure lors d'un changement de valeur)

et après l'instruction du Endif correspondant,
insérer l'instruction Application.EnableEvents=true (qui remet en service l’interception des évènements)
VB:
if not intersect(target, range("f1:f2")) is nothing then
    EnableEvents=false
    .....
    ici les instructions qu'on doit exécuter su F1 et/ou F2 ont été modifiés.
    .....
endif
EnableEvents=True

En fait, il faut insérer l'instruction Application.EnableEvents=true avant toute instruction qui fait sortir de la procédure de type End Sub, Exit Sub...
 
Dernière édition:
Bonjour herve62, mapomme,

Cette macro compte le nombre de valeurs en colonne F :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
[A1] = Application.CountA([F:F])
Application.EnableEvents = True
End Sub
A+
 
Slt Job ,Mapomme
Merci , j'ai essayé d'adapter c'est ok , je sais pas , j'avais déjà utilisé comme dab !! borné ; là j'ai repris l'ordre des instructions ça va mieux
Job : pas pigé ta sub ?
Ce qui me reste à faire est , pour raccourcir je fais ( juste pour voir) : IF Range("F2:F6")="" then .... mais erreur ?
sûr que faire F2 and F3 ..etc ça va marcher mais pour faire plus court ??


PS : Mapomme ... ce n'est plus le Luc que j'ai connu ????? en 2012 juste après mon opération du coeur ? maintenant c'est "vous" avant c'était "tu" ???
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
245
W
  • Question Question
Microsoft 365 Ajout de données
Réponses
3
Affichages
551
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…