Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb validation par modif de sélection (VBE)

8 réponses
Avatar
LANIMAL
Bonsoir
Dans Excel, après avoir saisi une valeur (ex. en E4), sans valider,
le simple fait de modifier la sélection (ex. clic sur C5)
entraine automatiquement la validation de la saisie (en E4).
Dans l'exécution du code-évènement suivant,
dans la feuille "Zaza", ça ne marche pas,
ou, plus exactement, ça marche une fois,
et si je renouvelle une 2ème saisie selon le même mode, ça plante :
le sablier s'affiche indéfiniment, pas de retour dans la fenêtre VBE,
et sauvegarde inopérante.
--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If CodEnCours = 0 Then

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
CodEnCours = 1
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
CodEnCours = 0
End If

End If

End Sub
-------------------------------------------------------
Peut-être qq'un pourra m'expliquer, ou/et me dire comment faire pour
que la macro-évènement se comporte comme dans Excel,
c'est à dire qu'un changement de sélection soit équivalent à "Enter".
Merci d'avance.

8 réponses

Avatar
LSteph
Bonjour,

Attention
Il faut désactiver les events dans un change si on modifie
sinon ça boucle indéfiniment.

'...
application.enableeventsúlse
CodEnCours = 1
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
CodEnCours = 0
application.enableevents=true
'...


Sinon Cells(R,C) pourrait s'écrire target

Mais attention target peut comporter plusieurs cellules

comment souhaites tu agir selon cette hypothèse.

Cordialement.

lSteph

Bonsoir
Dans Excel, après avoir saisi une valeur (ex. en E4), sans valider,
le simple fait de modifier la sélection (ex. clic sur C5)
entraine automatiquement la validation de la saisie (en E4).
Dans l'exécution du code-évènement suivant,
dans la feuille "Zaza", ça ne marche pas,
ou, plus exactement, ça marche une fois,
et si je renouvelle une 2ème saisie selon le même mode, ça plante :
le sablier s'affiche indéfiniment, pas de retour dans la fenêtre VBE,
et sauvegarde inopérante.
--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If CodEnCours = 0 Then

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
CodEnCours = 1
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
CodEnCours = 0
End If

End If

End Sub
-------------------------------------------------------
Peut-être qq'un pourra m'expliquer, ou/et me dire comment faire pour
que la macro-évènement se comporte comme dans Excel,
c'est à dire qu'un changement de sélection soit équivalent à "Enter".
Merci d'avance.


Avatar
LANIMAL
Re-bonsoir lSteph
Oui tu as compris que j'ai écrit "ça plante" au lieu de "ça boucle".
Je ne connaissais pas ce moyen de désactiver l'évènement,
j'ai souvent utilisé l'artifice de la 'bascule' CodEnCours pour éviter
le bouclage dans de tels cas.
Le hic, c'est que le pb exposé subsiste dans le code suivant ds "Zaza" :
Ca boucle après la 2ème saisie de "n" en colonne E,
sans valider, mais en déplaçant la sélection (ex. clic sur C5).
Alors que dans Excel, la sélection d'une autre cellule réalise
implicitement la validation.
--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
Application.Enableevents = False
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
Application.Enableevents = True
End If

End Sub
-------------------------------------------------------
Pour Cells(R,C) au lieu de target, c'est effectivement pour réaliser un
test plus "pointu" que j'ai retenu cette écriture.
Merci encore pour ton aide... passé... et peut-être à venir ;-)
LANIMAL

Bonjour,

Attention
Il faut désactiver les events dans un change si on modifie
sinon ça boucle indéfiniment.

'...
application.enableeventsúlse
CodEnCours = 1
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
CodEnCours = 0
application.enableevents=true
'...


Sinon Cells(R,C) pourrait s'écrire target

Mais attention target peut comporter plusieurs cellules

comment souhaites tu agir selon cette hypothèse.

Cordialement.

lSteph

Bonsoir
Dans Excel, après avoir saisi une valeur (ex. en E4), sans valider,
le simple fait de modifier la sélection (ex. clic sur C5)
entraine automatiquement la validation de la saisie (en E4).
Dans l'exécution du code-évènement suivant,
dans la feuille "Zaza", ça ne marche pas,
ou, plus exactement, ça marche une fois,
et si je renouvelle une 2ème saisie selon le même mode, ça plante :
le sablier s'affiche indéfiniment, pas de retour dans la fenêtre VBE,
et sauvegarde inopérante.
--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If CodEnCours = 0 Then

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
CodEnCours = 1
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
CodEnCours = 0
End If

End If

End Sub
-------------------------------------------------------
Peut-être qq'un pourra m'expliquer, ou/et me dire comment faire pour
que la macro-évènement se comporte comme dans Excel,
c'est à dire qu'un changement de sélection soit équivalent à "Enter".
Merci d'avance.




Avatar
LSteph
Bonjour LANIMAL
qui a tapoté avec ses petits doigts musclés:
...
Le hic, c'est que le pb exposé subsiste dans le code suivant ds "Zaza" :
Ca boucle après la 2ème saisie de "n" en colonne E,

--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
Application.Enableevents = False
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
Application.Enableevents = True
End If

End Sub
-------------------------------------------------------


En l'état et sur ces seuls éléments, il n'y a pas de raison.
Vérifie si tu n'aurais pas prévu quelque autre sub événnementielle
par ailleurs,Selection Change ou Calculate par exemple
et si ce n'est dans le private module de la feuille
voir celui du classeur: Thisworkbook

sans valider, mais en déplaçant la sélection (ex. clic sur C5).
Alors que dans Excel, la sélection d'une autre cellule réalise
implicitement la validation.



J'ai testé cela aussi et ne rencontre point ce pb.

Cordialement.

lSteph


Avatar
LANIMAL
Bonjour
Juste pour te dire que je n'abandonne pas... déjà 3h de sueur ce matin !
Merci pour tes suggestions, mais il semble que le pb soit dans une
référence circulaire qui se planque qqpart.
Une fois de tps en tps, l'alerte réf. circulaire apparaît, mais...
me précise qu'elle ne peut pas me dire où !
C'est pas de la provocation, ça ?...
Alors depuis ce matin je cherche, feuille par feuille (il y en a 12)
où peut bien être cette réf. circ. qui ne s'est jamais révélée avant
la création de la sub évènementielle.
Pour gagner du tps, pourrais-tu me rappeler comment on peut arrêter un
bouclage ? - Il me semble qqchose du genre Ctrl+Arrêt défil,
je ne me souviens plus.
Merci
LANIMAL



Bonjour LANIMAL
qui a tapoté avec ses petits doigts musclés:
...
Le hic, c'est que le pb exposé subsiste dans le code suivant ds "Zaza"
: Ca boucle après la 2ème saisie de "n" en colonne E,

--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
Application.Enableevents = False
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
Application.Enableevents = True
End If

End Sub
-------------------------------------------------------


En l'état et sur ces seuls éléments, il n'y a pas de raison.
Vérifie si tu n'aurais pas prévu quelque autre sub événnementielle
par ailleurs,Selection Change ou Calculate par exemple
et si ce n'est dans le private module de la feuille
voir celui du classeur: Thisworkbook

sans valider, mais en déplaçant la sélection (ex. clic sur C5).
Alors que dans Excel, la sélection d'une autre cellule réalise
implicitement la validation.



J'ai testé cela aussi et ne rencontre point ce pb.

Cordialement.

lSteph




Avatar
MichDenis
| pourrais-tu me rappeler comment on peut arrêter un bouclage ?

Ctrl + Break (pause)

Et pour trouver une référence circulaire, as-tu essayé à partir de
barre des menus / Outils / Audit des formules ...




"LANIMAL" a écrit dans le message de news:
%
Bonjour
Juste pour te dire que je n'abandonne pas... déjà 3h de sueur ce matin !
Merci pour tes suggestions, mais il semble que le pb soit dans une
référence circulaire qui se planque qqpart.
Une fois de tps en tps, l'alerte réf. circulaire apparaît, mais...
me précise qu'elle ne peut pas me dire où !
C'est pas de la provocation, ça ?...
Alors depuis ce matin je cherche, feuille par feuille (il y en a 12)
où peut bien être cette réf. circ. qui ne s'est jamais révélée avant
la création de la sub évènementielle.
Pour gagner du tps, pourrais-tu me rappeler comment on peut arrêter un
bouclage ? - Il me semble qqchose du genre Ctrl+Arrêt défil,
je ne me souviens plus.
Merci
LANIMAL



Bonjour LANIMAL
qui a tapoté avec ses petits doigts musclés:
...
Le hic, c'est que le pb exposé subsiste dans le code suivant ds "Zaza"
: Ca boucle après la 2ème saisie de "n" en colonne E,

--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
Application.Enableevents = False
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
Application.Enableevents = True
End If

End Sub
-------------------------------------------------------


En l'état et sur ces seuls éléments, il n'y a pas de raison.
Vérifie si tu n'aurais pas prévu quelque autre sub événnementielle
par ailleurs,Selection Change ou Calculate par exemple
et si ce n'est dans le private module de la feuille
voir celui du classeur: Thisworkbook

sans valider, mais en déplaçant la sélection (ex. clic sur C5).
Alors que dans Excel, la sélection d'une autre cellule réalise
implicitement la validation.



J'ai testé cela aussi et ne rencontre point ce pb.

Cordialement.

lSteph




Avatar
LANIMAL
Merci Mich
Il est 13h44, je vais pouvoir faire le "Break" ;-)
Oui j'ai essayé l'audit - qui n'indique aucune adresse, en accord avec
l'alerte : "Microsoft Excel ne parvient pas à calculer cette formule. Un
classeur ouvert contient une référence circulaire, mais il est
impossible d'afficher les références erronées..."
Dans mon cas, pas d'autre classeur ouvert.
Par ailleurs,le défaut n'existe pas quand je valide la saisie de "n" par
<Enter>, or, s'il y avait vraiment une réf. circ. elle devrait aussi se
manifester dans ce cas.
Mon classeur est assez lourd, le calcul est relativement long (sur 12
feuilles) et je penserais que VBE va + vite que Excel qui s'empêtre dans
les calculs.
Alors j'ai abandonné, et ai contourné le pb. Je suis clair maintenant.

Une observation si qqun est intéressé par ce pb (peut-être lSteph ?):
En exécution pas à pas :
Quand je valide la saisie de "n" par <Entrée>,
la ligne Cells(R,C)=... s'exécute dès le passage à la ligne suivante.
Quand je saisis une 1ère fois "n", sans valider, mais en déplaçant la
sélection, la ligne Cells(R, C) ne s'exécute qu'à la sortie de la sub,
et ensuite VBE se perd... Je ne sais si c'est un bouclage car Ctrl+Pause
ne l'arrête pas.
Merci à vous Mich et lSteph pour votre aide
(j'ai découvert Application.EnableEvents)
LANIMAL

| pourrais-tu me rappeler comment on peut arrêter un bouclage ?

Ctrl + Break (pause)

Et pour trouver une référence circulaire, as-tu essayé à partir de
barre des menus / Outils / Audit des formules ...




"LANIMAL" a écrit dans le message de news:
%
Bonjour
Juste pour te dire que je n'abandonne pas... déjà 3h de sueur ce matin !
Merci pour tes suggestions, mais il semble que le pb soit dans une
référence circulaire qui se planque qqpart.
Une fois de tps en tps, l'alerte réf. circulaire apparaît, mais...
me précise qu'elle ne peut pas me dire où !
C'est pas de la provocation, ça ?...
Alors depuis ce matin je cherche, feuille par feuille (il y en a 12)
où peut bien être cette réf. circ. qui ne s'est jamais révélée avant
la création de la sub évènementielle.
Pour gagner du tps, pourrais-tu me rappeler comment on peut arrêter un
bouclage ? - Il me semble qqchose du genre Ctrl+Arrêt défil,
je ne me souviens plus.
Merci
LANIMAL


Bonjour LANIMAL
qui a tapoté avec ses petits doigts musclés:
...
Le hic, c'est que le pb exposé subsiste dans le code suivant ds "Zaza"
: Ca boucle après la 2ème saisie de "n" en colonne E,
--------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

C = Target.Column
R = Target.Row
If C = 5 And Cells(R, C) = "n" Then
Application.Enableevents = False
Cells(R, C) = Worksheets("Toto").Range("B2") + 1
Application.Enableevents = True
End If

End Sub
-------------------------------------------------------
En l'état et sur ces seuls éléments, il n'y a pas de raison.

Vérifie si tu n'aurais pas prévu quelque autre sub événnementielle
par ailleurs,Selection Change ou Calculate par exemple
et si ce n'est dans le private module de la feuille
voir celui du classeur: Thisworkbook

sans valider, mais en déplaçant la sélection (ex. clic sur C5).
Alors que dans Excel, la sélection d'une autre cellule réalise
implicitement la validation.
J'ai testé cela aussi et ne rencontre point ce pb.



Cordialement.

lSteph








Avatar
LSteph
Bonsoir,


Que se passe-t-il, si tu mets les lignes de cette macro provisoirement
'en commentaires
et que tu effectues la même manoeuvre?

@+

lSteph

Quand je saisis une 1ère fois "n", sans valider, mais en déplaçant la
sélection, la ligne Cells(R, C) ne s'exécute qu'à la sortie de la sub,
et ensuite VBE se perd... Je ne sais si c'est un bouclage car
Ctrl+Pause


ne l'arrête pas




Avatar
LANIMAL
Bonsoir,


Que se passe-t-il, si tu mets les lignes de cette macro provisoirement
'en commentaires
et que tu effectues la même manoeuvre?


Bonsoir
La macro étant mise en commentaires, je saisis "n" en colonne E, sans
faire <Entrée>, et je clique n'importe où ailleurs. Alors "n" est bien
validé là où il a été saisi.
Et cela plusieurs fois de suite, sans problème (ce qui est habituel dans
Excel)
Je précise que chez moi aussi, dans un classeur-test (pas encombré)la
macro "change" telle que ci-dessous fonctionne très bien.
Note bien que maintenant, sur ce sujet, on roule pour l'honneur car j'ai
contourné le pb.
Bien amicalement - LANIMAL


@+

lSteph

Quand je saisis une 1ère fois "n", sans valider, mais en déplaçant la
sélection, la ligne Cells(R, C) ne s'exécute qu'à la sortie de la sub,
et ensuite VBE se perd... Je ne sais si c'est un bouclage car
Ctrl+Pause


ne l'arrête pas