Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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
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...
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
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" ???
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.