XL 2010 vba cel change

herve62

XLDnaute Barbatruc
Supporter XLD
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

  • test_change.xlsm
    12.8 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
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:

job75

XLDnaute Barbatruc
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+
 

herve62

XLDnaute Barbatruc
Supporter XLD
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

  • test_change.xlsm
    14.9 KB · Affichages: 4

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi