OVH Cloud OVH Cloud

Valeur de la touche Esc

9 réponses
Avatar
A COSTA
Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa

9 réponses

Avatar
Argyronet
Bonjour,

Pour intercepter les séquences de touches du clavier sur un formulaire, il
faut définir la propriété "Aperçu des touche" (KeyPreview) à Oui (True)
De là, vous pouvez très bien faire ce que bon vous semble :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then
On Error Resume Next
MsgBox "Pour annuler il faut écrire :" & vbCrLf & "DoCmd.RunCommand
acCmdUndo", 64, "Appuie sur Esc"
End If
End Sub

Espérant que cela vous aidera...
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa



Avatar
A Costa
Merci pour la reponse
Je vais essayer.
A Costa


Bonjour,

Pour intercepter les séquences de touches du clavier sur un formulaire, il
faut définir la propriété "Aperçu des touche" (KeyPreview) à Oui (True)
De là, vous pouvez très bien faire ce que bon vous semble :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then
On Error Resume Next
MsgBox "Pour annuler il faut écrire :" & vbCrLf & "DoCmd.RunCommand
acCmdUndo", 64, "Appuie sur Esc"
End If
End Sub

Espérant que cela vous aidera...
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa





Avatar
Eric
Bonjour,

Je pense que le controle de la quantité disponible doit être fait avant
la mise à jour et non après.

Ayant du mal à comprendre la méthode, le code donné m'amène à me poser
les questions suivantes:
- Que représente Test.Value ? Ne serait-pas un champ de la table
référencée par Piece_ID ?
- La ligne: Piece ID.Value = Empty ne génère-t-elle pas une erreur ?
De même, le nom de la procédure n'est pas bon, ça devrait être Private
Sub Piece_ID_AfterUpdate()

Tel que donné, le contrôle est effectué trop tard car la mise à jour a
eu lieu et donc la ligne est écrite.

En définitive, des questions en lieu et place de réponse ;-)



Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Papy Bernard
Slt,

De A COSTA


Bonjour,


Pour le code de la touche ESC, voir :

http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node137.html

--
A+
Papy Bernard (RTCien malgré lui)

Avatar
A Costa
Bonjour, et merci d'abord
Effcetivement c'est PieceID et non Piece ID
Le Text.value c'est Combo1.Value (une case à cocher que j'itilise dans un
autre form pour indiquer qu'il n'y a plus de pieces.
A Costa

Bonjour,

Je pense que le controle de la quantité disponible doit être fait avant
la mise à jour et non après.

Ayant du mal à comprendre la méthode, le code donné m'amène à me poser
les questions suivantes:
- Que représente Test.Value ? Ne serait-pas un champ de la table
référencée par Piece_ID ?
- La ligne: Piece ID.Value = Empty ne génère-t-elle pas une erreur ?
De même, le nom de la procédure n'est pas bon, ça devrait être Private
Sub Piece_ID_AfterUpdate()

Tel que donné, le contrôle est effectué trop tard car la mise à jour a
eu lieu et donc la ligne est écrite.

En définitive, des questions en lieu et place de réponse ;-)



Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Argyronet
Humm effectivement, ma réponse ne vous apportera pas grand chose...
En fait, si vous indiquez manuellement qu'il n'y a plus de pièce dans un
autre formulaire, il faut que le formulaire actif soit en mesure de
déterminer que cette case est cochée ou non ; or, avec le code que vous nous
avez transmi, j'ai un gros doute.

Tout comme Eric, il serait souhaitable que vous soyez plus clair dans ce que
vous désirez faire en exposant les objets que vous utilisez.

Là, on pourra vous aider sans problèmes

--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment


"A Costa" wrote:

Bonjour, et merci d'abord
Effcetivement c'est PieceID et non Piece ID
Le Text.value c'est Combo1.Value (une case à cocher que j'itilise dans un
autre form pour indiquer qu'il n'y a plus de pieces.
A Costa

Bonjour,

Je pense que le controle de la quantité disponible doit être fait avant
la mise à jour et non après.

Ayant du mal à comprendre la méthode, le code donné m'amène à me poser
les questions suivantes:
- Que représente Test.Value ? Ne serait-pas un champ de la table
référencée par Piece_ID ?
- La ligne: Piece ID.Value = Empty ne génère-t-elle pas une erreur ?
De même, le nom de la procédure n'est pas bon, ça devrait être Private
Sub Piece_ID_AfterUpdate()

Tel que donné, le contrôle est effectué trop tard car la mise à jour a
eu lieu et donc la ligne est écrite.

En définitive, des questions en lieu et place de réponse ;-)



Bonjour,
Je remplie une tab à l'aide d'un formulaire.
J'ai crée un message qui me dit si une pièce n'existe plus en stock, le
message m'informe et le champ devient vide.

Dans le champ Piece:

Private Sub Piece ID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
Piece ID.Value = Empty
DoCmd.GoToControl " Piece ID"
End If
End Sub

Mon problème c'est que automatiquement une nouvelle ligne d'enregistrement
est crée et je voudrais ne pas avoir nouvelle ligne dans cette situation. Je
peux annuler la ligne avec la touche Esc, mais comment le faire avec la macro?
J'ai essaie avec Undo et Cancel mais je n'arrive pas à résoudre le problème.
De l'aide, s.v.p.
A Costa



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Eric
re,

Je controlerai sur l'évènement Avant Mise à jour du contrôle PieceID.
Fait à main levée, je mettrai quelque chose comme ceci en adaptant le
nom du formulaire contenant Test:

Private Sub PieceID_BeforeUpdate(Cancel as integer)
If Forms!NomFormulaireContenantTest!Test Then
MsgBox "Attention, plus de pièces !", vbExclamation
Cancel=True
PieceID.Undo
End If
End Sub

PS: Test est une CheckBox et non une ComboBox

Bonjour, et merci d'abord
Effcetivement c'est PieceID et non Piece ID
Le Text.value c'est Combo1.Value (une case à cocher que j'itilise dans un
autre form pour indiquer qu'il n'y a plus de pieces.
A Costa


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
A COSTA
Effectivement Test est une CheckBox et non une ComboBox

J'ai remplacé:
If Forms!NomFormulaireContenantTest!Test Then
par
If Forms!NomFormulaireContenantTest!Test = TrueThen
mais j'ai le message :

The value in the field or record violates the validation rule for the record
or field.

Je pense que je dois aussi informer que le formulaire est lié à 4 tables
(Tbl_Distrubution, Pieces, Service et Nom) et je fais l'attribution des
pièces à quelqu'un qui est dans un quelque Service.

Avec le code que j'ai envoyé la première fois ça marche bien sauf la ligne
que s'ajoute. Si je veux annuler l'enregistrement je dois faire Escape et je
voudrais le faire automatiquement en ajoutant un command à :

Private Sub PieceID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces de cette reference"
PieceID.Value = Empty
DoCmd.GoToControl "PieceID"
End If
End Sub

Un tres gand merci d'avance
A Costa


re,

Je controlerai sur l'évènement Avant Mise à jour du contrôle PieceID.
Fait à main levée, je mettrai quelque chose comme ceci en adaptant le
nom du formulaire contenant Test:

Private Sub PieceID_BeforeUpdate(Cancel as integer)
If Forms!NomFormulaireContenantTest!Test Then
MsgBox "Attention, plus de pièces !", vbExclamation
Cancel=True
PieceID.Undo
End If
End Sub

PS: Test est une CheckBox et non une ComboBox

Bonjour, et merci d'abord
Effcetivement c'est PieceID et non Piece ID
Le Text.value c'est Combo1.Value (une case à cocher que j'itilise dans un
autre form pour indiquer qu'il n'y a plus de pieces.
A Costa


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
A COSTA
Bonjour
J'ai trouvé.
La solution c'est ajouter Me.Undo

Private Sub PieceID_AfterUpdate()
If Test.Value = True Then
MsgBox "attention, plus de piéces"
PieceID.Value = Empty
DoCmd.GoToControl " PieceID"

Me.Undo

End If
End Sub

Merci à tous qui ont essayer de m'aider.
A Costa


Slt,

De A COSTA


Bonjour,


Pour le code de la touche ESC, voir :

http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node137.html

--
A+
Papy Bernard (RTCien malgré lui)