Pas de pb ...je n'entrevois que des solutions et plus précisément C'est à cela que sert enableevents. Ta question ne me donnait pas d'éléments suffisants pour savoir que tu voulais exactement et elle exprime une assertion contradictoire avec la pratique normale de désactivation des évenements sans préciser l'objectif réel. C'est pourquoi je t'ai donné cette piste large comme une autoroute, afin que tu puisses adapter selon ce qui te sied!
Il faut donc toutefois réfléchir à partir de cet élément et ainsi :
Si tu prévois de redéclancher l'évènement , il se redéclanchera, comme je te l'ai expliqué mais comme il est prévu de le déclancher chaque fois qu'il se déclanche donc il se redéclanchera à chaque fois ...etc... C'est à cela que sert enableevents selon qu'il est à true ou false.
Et c'est cela (false ou true) que tu peux règler lors de l'execution
Par exemple si mavariablequejaideclareepubliquedansunmodulestandard prend 1 de + à chaque fois je peux décider qu'à trois on arrête de répèter et avant de changer ma valeur (action qui ne manquerait de redéclancher) je mets enableevents à false une fois la modif faite je remets à true et mavariable à zéro.
ou alors .. donnes plus de précisions sur ce que tu cherches à faire.
Cordialement.
-- lSteph
Bonjour LSteph,
Alors il n'y a pas de solution à mon problème ?
Bonjour Apitos,
Mais si justement!
Pas de pb ...je n'entrevois que des solutions et plus précisément
C'est à cela que sert enableevents. Ta question ne me donnait pas
d'éléments suffisants pour savoir que tu voulais exactement et
elle exprime une assertion contradictoire avec la pratique normale de
désactivation des évenements sans préciser l'objectif réel.
C'est pourquoi je t'ai donné cette piste large comme une autoroute, afin
que tu puisses adapter selon ce qui te sied!
Il faut donc toutefois réfléchir à partir de cet élément et ainsi :
Si tu prévois de redéclancher l'évènement , il se redéclanchera, comme
je te l'ai expliqué mais comme il est prévu de le déclancher chaque fois
qu'il se déclanche donc il se redéclanchera à chaque fois ...etc...
C'est à cela que sert enableevents
selon qu'il est à true ou false.
Et c'est cela (false ou true) que tu peux règler lors de l'execution
Par exemple si mavariablequejaideclareepubliquedansunmodulestandard
prend 1 de + à chaque fois je peux décider qu'à trois on arrête de
répèter et avant de changer ma valeur (action qui ne manquerait de
redéclancher) je mets enableevents à false
une fois la modif faite je remets à true et mavariable à zéro.
ou alors .. donnes plus de précisions sur ce que tu cherches à faire.
Pas de pb ...je n'entrevois que des solutions et plus précisément C'est à cela que sert enableevents. Ta question ne me donnait pas d'éléments suffisants pour savoir que tu voulais exactement et elle exprime une assertion contradictoire avec la pratique normale de désactivation des évenements sans préciser l'objectif réel. C'est pourquoi je t'ai donné cette piste large comme une autoroute, afin que tu puisses adapter selon ce qui te sied!
Il faut donc toutefois réfléchir à partir de cet élément et ainsi :
Si tu prévois de redéclancher l'évènement , il se redéclanchera, comme je te l'ai expliqué mais comme il est prévu de le déclancher chaque fois qu'il se déclanche donc il se redéclanchera à chaque fois ...etc... C'est à cela que sert enableevents selon qu'il est à true ou false.
Et c'est cela (false ou true) que tu peux règler lors de l'execution
Par exemple si mavariablequejaideclareepubliquedansunmodulestandard prend 1 de + à chaque fois je peux décider qu'à trois on arrête de répèter et avant de changer ma valeur (action qui ne manquerait de redéclancher) je mets enableevents à false une fois la modif faite je remets à true et mavariable à zéro.
ou alors .. donnes plus de précisions sur ce que tu cherches à faire.
Cordialement.
-- lSteph
Bonjour LSteph,
Alors il n'y a pas de solution à mon problème ?
LSteph
.... voici un exemple (c'est le end tout court qui réinitialise la variable à rien donc zero)
'''dans Module1 Public mavar As Integer
'''dans le code de Feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range Set isect = Intersect(Target, [b2]) If isect Is Nothing Then Exit Sub If mavar < 3 Then mavar = mavar + 1 [b2].Value = [b2].Value * 2 Else Application.EnableEvents = False [b2].Value = [b2].Value * 2 Application.EnableEvents = True End End If End Sub
';-) '@+
'-- 'lSteph
Bonjour LSteph,
Alors il n'y a pas de solution à mon problème ?
.... voici un exemple (c'est le end tout court qui réinitialise la
variable à rien donc zero)
'''dans Module1
Public mavar As Integer
'''dans le code de Feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range
Set isect = Intersect(Target, [b2])
If isect Is Nothing Then Exit Sub
If mavar < 3 Then
mavar = mavar + 1
[b2].Value = [b2].Value * 2
Else
Application.EnableEvents = False
[b2].Value = [b2].Value * 2
Application.EnableEvents = True
End
End If
End Sub
.... voici un exemple (c'est le end tout court qui réinitialise la variable à rien donc zero)
'''dans Module1 Public mavar As Integer
'''dans le code de Feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range Set isect = Intersect(Target, [b2]) If isect Is Nothing Then Exit Sub If mavar < 3 Then mavar = mavar + 1 [b2].Value = [b2].Value * 2 Else Application.EnableEvents = False [b2].Value = [b2].Value * 2 Application.EnableEvents = True End End If End Sub
';-) '@+
'-- 'lSteph
Bonjour LSteph,
Alors il n'y a pas de solution à mon problème ?
Apitos
Bonsoir LSteph,
Le problème est que :
Application.EnableEvents = False
Je l'ai déclaré au début de la procédure.
Alors comment faire pour de telles actions, au milieu de la procédure ?
Merci.
Bonsoir LSteph,
Le problème est que :
Application.EnableEvents = False
Je l'ai déclaré au début de la procédure.
Alors comment faire pour de telles actions, au milieu de la
procédure ?
regarde dans l'exemple que je t'ai donné... ce n'est pas précisément l'endroit où je l'ai mis!
Le but est prioritairement que tu adaptes toi même cela à ton objectif et ainsi utiliser un truc dont tu as maitrisé le fonctionnement. Il faut créer une variable publique comme proposé, ensuite tu as l'explication et l'exemple. Sinon dis moi ce qui n'est pas clair.
Cordialement.
-- lSteph
Bonsoir LSteph,
Le problème est que :
Application.EnableEvents = False
Je l'ai déclaré au début de la procédure.
Alors comment faire pour de telles actions, au milieu de la procédure ?
Merci.
Bonjour,
regarde dans l'exemple que je t'ai donné...
ce n'est pas précisément l'endroit où je l'ai mis!
Le but est prioritairement que tu adaptes toi même cela à ton objectif
et ainsi utiliser un truc dont tu as maitrisé le fonctionnement.
Il faut créer une variable publique comme proposé, ensuite tu as
l'explication et l'exemple. Sinon dis moi ce qui n'est pas clair.
Cordialement.
--
lSteph
Bonsoir LSteph,
Le problème est que :
Application.EnableEvents = False
Je l'ai déclaré au début de la procédure.
Alors comment faire pour de telles actions, au milieu de la
procédure ?
regarde dans l'exemple que je t'ai donné... ce n'est pas précisément l'endroit où je l'ai mis!
Le but est prioritairement que tu adaptes toi même cela à ton objectif et ainsi utiliser un truc dont tu as maitrisé le fonctionnement. Il faut créer une variable publique comme proposé, ensuite tu as l'explication et l'exemple. Sinon dis moi ce qui n'est pas clair.
Cordialement.
-- lSteph
Bonsoir LSteph,
Le problème est que :
Application.EnableEvents = False
Je l'ai déclaré au début de la procédure.
Alors comment faire pour de telles actions, au milieu de la procédure ?
Merci.
Apitos
Bonjour LSteph,
Il y'a un petit soucis
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une entrée (Ici le traitement d'une entréee="x" doit démarrer si la colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée est imposée par code (il n'y a pas de saisie).
Comment résoudre ce problème à ton avis ?
Merci.
Bonjour LSteph,
Il y'a un petit soucis
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une
entrée (Ici le traitement d'une entréee="x" doit démarrer si la
colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée
est imposée par code (il n'y a pas de saisie).
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une entrée (Ici le traitement d'une entréee="x" doit démarrer si la colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée est imposée par code (il n'y a pas de saisie).
Comment résoudre ce problème à ton avis ?
Merci.
LSteph
Bonjour,
J'étais un peu absent mais ne te laisse pas tomber, toutefois j'ai un souci avec ton sujet, voilà:
Je ne vois pas cela précisément, dans la mesure où tes deux exemples de code chez moi plantent et que tu ne m'as toujours pas dit ce que tu cherches à faire avec cela.
Déjà ce type de syntaxe est "plantard"
If Target.Column = 5 And Target.Count = 1 Then
si l'utilisateur veut et il le peut entrer "e" ou x dans plusieurs cellules ça ne marchera pas commme voulu puisque le .count est limité à 1! Tu te retrouves avec ton x qui est qd même entré et l'action voulue non executée
Dans un change il faut toujours définir une intersection avec la plage souhaitée par rapport à la cible (target) visée par l'utilisateur
Dim iSect as range , c as range
set iSect=intersect(target,[e:e])
if iSect is nothing then exit sub
..
Par suite on pourra traiter toutes les cellules de cette intersection uniquement For each c in iSect.cells
...etc..
Pour en revenir à ton objectif réel si tu l'expliques on pourra voir comment contourner ce que tu tentes et qui visiblement ne convient pas. Le fait que tu cherches à redéclancher quelquechose ça j'ai bien compris, le problème c'est qu'est ce que c'est sensé faire exactement entre le tableau de gauche et de droite car vu les éléments en présence dans les deux exemples , je ne vois pas la logique.
Cordialement.
-- lSteph
Bonjour LSteph,
Il y'a un petit soucis
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une entrée (Ici le traitement d'une entréee="x" doit démarrer si la colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée est imposée par code (il n'y a pas de saisie).
Comment résoudre ce problème à ton avis ?
Merci.
Bonjour,
J'étais un peu absent mais ne te laisse pas tomber, toutefois j'ai un
souci avec ton sujet, voilà:
Je ne vois pas cela précisément, dans la mesure où tes deux exemples de
code chez moi plantent et que tu ne m'as toujours pas dit ce que tu
cherches à faire avec cela.
Déjà ce type de syntaxe est "plantard"
If Target.Column = 5 And Target.Count = 1 Then
si l'utilisateur veut et il le peut entrer "e" ou x dans plusieurs
cellules ça ne marchera pas commme voulu puisque le .count est limité à
1! Tu te retrouves avec ton x qui est qd même entré et l'action voulue
non executée
Dans un change il faut toujours définir une intersection avec la plage
souhaitée par rapport à la cible (target) visée par l'utilisateur
Dim iSect as range , c as range
set iSect=intersect(target,[e:e])
if iSect is nothing then exit sub
..
Par suite on pourra traiter toutes les cellules de cette intersection
uniquement
For each c in iSect.cells
...etc..
Pour en revenir à ton objectif réel si tu l'expliques on pourra voir
comment contourner ce que tu tentes et qui visiblement ne convient pas.
Le fait que tu cherches à redéclancher quelquechose ça j'ai bien
compris, le problème c'est qu'est ce que c'est sensé faire exactement
entre le tableau de gauche et de droite car vu les éléments en présence
dans les deux exemples , je ne vois pas la logique.
Cordialement.
--
lSteph
Bonjour LSteph,
Il y'a un petit soucis
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une
entrée (Ici le traitement d'une entréee="x" doit démarrer si la
colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée
est imposée par code (il n'y a pas de saisie).
J'étais un peu absent mais ne te laisse pas tomber, toutefois j'ai un souci avec ton sujet, voilà:
Je ne vois pas cela précisément, dans la mesure où tes deux exemples de code chez moi plantent et que tu ne m'as toujours pas dit ce que tu cherches à faire avec cela.
Déjà ce type de syntaxe est "plantard"
If Target.Column = 5 And Target.Count = 1 Then
si l'utilisateur veut et il le peut entrer "e" ou x dans plusieurs cellules ça ne marchera pas commme voulu puisque le .count est limité à 1! Tu te retrouves avec ton x qui est qd même entré et l'action voulue non executée
Dans un change il faut toujours définir une intersection avec la plage souhaitée par rapport à la cible (target) visée par l'utilisateur
Dim iSect as range , c as range
set iSect=intersect(target,[e:e])
if iSect is nothing then exit sub
..
Par suite on pourra traiter toutes les cellules de cette intersection uniquement For each c in iSect.cells
...etc..
Pour en revenir à ton objectif réel si tu l'expliques on pourra voir comment contourner ce que tu tentes et qui visiblement ne convient pas. Le fait que tu cherches à redéclancher quelquechose ça j'ai bien compris, le problème c'est qu'est ce que c'est sensé faire exactement entre le tableau de gauche et de droite car vu les éléments en présence dans les deux exemples , je ne vois pas la logique.
Cordialement.
-- lSteph
Bonjour LSteph,
Il y'a un petit soucis
Le WorSheet_OnChange repose sur la cible (Target) pour traiter une entrée (Ici le traitement d'une entréee="x" doit démarrer si la colonne cible = 5 et sa valeur = "x").
Mais pour le deuxieme cas, la colonne cible et outre que 5 et l'entrée est imposée par code (il n'y a pas de saisie).
Comment résoudre ce problème à ton avis ?
Merci.
Apitos
Bonsoir LSteph,
C'est très généreux de ta part de t'intéresser à mon problème :
J'utilise ce code pour mes besoins personnels.
Le tableau Crédits (A1:A9) contient les dates des crédits avec les noms des créditeurs. Le tableau Rem-Crédits (I1:L4) contient les infos des crédits remboursés.
Il y'a trois cas :
1 - Si le crédit est remboursé en une seule fois, on mettra un "x" devant l'intitulé dans la colonne E Les informations nécessaires sont copies dans le deuxième tableau Rem- Crédit.
2 - Si le crédit sera remboursé par échéanciers, on mettre un "e" da ns la colonne E, et un tableau avec tous les infos vient s'ajouter au dessus du tableau Crédits, pour pouvoir suivre les payements.
Une fois la totalité du crédit est remboursé, on mettra automatiquement un "x" dans la colonne E, pour voir cette personne figuré dans le tableau Rem-Crédit (on relance le Onchange pour traiter le cas ou la cible est égal un "x" dans la colonne E).
3 - Cas où on pourra insérer une ligne vide supplémentaire dans le tableau Crédit pour saisir les informations d'un nouveau crédit.
Pour le count, je m'en sert pour dire à Excel, que je travail dans une seule cellule, et que ce n'est pas une sélection de plage par exemple
Maintenant la question posée c'est autour du deuxième partie du point 2)
Bon voilà !
Merci d'avance.
Bonsoir LSteph,
C'est très généreux de ta part de t'intéresser à mon problème :
J'utilise ce code pour mes besoins personnels.
Le tableau Crédits (A1:A9) contient les dates des crédits avec les
noms des créditeurs.
Le tableau Rem-Crédits (I1:L4) contient les infos des crédits
remboursés.
Il y'a trois cas :
1 - Si le crédit est remboursé en une seule fois, on mettra un "x"
devant l'intitulé dans la colonne E
Les informations nécessaires sont copies dans le deuxième tableau Rem-
Crédit.
2 - Si le crédit sera remboursé par échéanciers, on mettre un "e" da ns
la colonne E, et un tableau avec tous les infos vient s'ajouter au
dessus du tableau Crédits, pour pouvoir suivre les payements.
Une fois la totalité du crédit est remboursé, on mettra
automatiquement un "x" dans la colonne E, pour voir cette personne
figuré dans le tableau Rem-Crédit (on relance le Onchange pour traiter
le cas ou la cible est égal un "x" dans la colonne E).
3 - Cas où on pourra insérer une ligne vide supplémentaire dans le
tableau Crédit pour saisir les informations d'un nouveau crédit.
Pour le count, je m'en sert pour dire à Excel, que je travail dans une
seule cellule, et que ce n'est pas une sélection de plage par exemple
Maintenant la question posée c'est autour du deuxième partie du point
2)
C'est très généreux de ta part de t'intéresser à mon problème :
J'utilise ce code pour mes besoins personnels.
Le tableau Crédits (A1:A9) contient les dates des crédits avec les noms des créditeurs. Le tableau Rem-Crédits (I1:L4) contient les infos des crédits remboursés.
Il y'a trois cas :
1 - Si le crédit est remboursé en une seule fois, on mettra un "x" devant l'intitulé dans la colonne E Les informations nécessaires sont copies dans le deuxième tableau Rem- Crédit.
2 - Si le crédit sera remboursé par échéanciers, on mettre un "e" da ns la colonne E, et un tableau avec tous les infos vient s'ajouter au dessus du tableau Crédits, pour pouvoir suivre les payements.
Une fois la totalité du crédit est remboursé, on mettra automatiquement un "x" dans la colonne E, pour voir cette personne figuré dans le tableau Rem-Crédit (on relance le Onchange pour traiter le cas ou la cible est égal un "x" dans la colonne E).
3 - Cas où on pourra insérer une ligne vide supplémentaire dans le tableau Crédit pour saisir les informations d'un nouveau crédit.
Pour le count, je m'en sert pour dire à Excel, que je travail dans une seule cellule, et que ce n'est pas une sélection de plage par exemple
Maintenant la question posée c'est autour du deuxième partie du point 2)