OVH Cloud OVH Cloud

Créer un évènement personalisé

11 réponses
Avatar
Greg
Bonjour,

J'ai besoin de faire éxecuter un procédé sous un évènement qui n'existe pas:
"Lorsque l'enfoqué (Focus) change de champ (et non pas de Recordset) dans un
formulaire" (Mon Access n'est pas en français -> Demandez-moi si les mots
utilizés ne sont pas corrects).
Est-il possible de créer un évènement dans un module (où d'une autre façon)?

Merci d'avance.

--
Bonne journée, soirée,...
------
Greg

10 réponses

1 2
Avatar
Buddy
Salut
Créer ses propres évènements, c'est possible mais uniquement dans les modules de classe. C'est pas simple du tout et surtout c'est
pas documenté dans Access ni dans les livres. Les évènements c'est l'ossature de Windows, d'où la discretion de Microsoft à ce
sujet.
Dans tous les cas, access gère nativement sur perte focus et sur réception focus, donc pas la peine de créer cet évènement.

Private Sub zdtTexte_GotFocus()
Private Sub zdtTexte_LostFocus()

Ouala
Bye
Buddy

"Greg" a écrit dans le message de news:
Bonjour,

J'ai besoin de faire éxecuter un procédé sous un évènement qui n'existe pas:
"Lorsque l'enfoqué (Focus) change de champ (et non pas de Recordset) dans un
formulaire" (Mon Access n'est pas en français -> Demandez-moi si les mots
utilizés ne sont pas corrects).
Est-il possible de créer un évènement dans un module (où d'une autre façon)?

Merci d'avance.

--
Bonne journée, soirée,...
------
Greg




Avatar
Greg
Merci pour ta réponse Buddy, c'est du très clair.

- En ce qui concerne el GotFocus y el LostFocus dont tu me parles, cela
implique copier le même procédé pour chaque champ. Je m'explique:

Si je veux que se réalise une certaine action (toujours la même acción avec
comme variable le nom champ qui a le focus) dès que le focus change de champ
dans un formulaire, je suis obligé d'instaler le même procédé dans
l'évènement GotFocus de chaque champ, c'est à dire, pour un formulaire avec
30 champs, 30 fois le même procédé. Ça marche mais ce n'est pas très
"élégant".
Il y aussi une autre métode qui consiste à instaler de procédé dans
l'évènement Timer en lui demandant de controler chaque intervale de x
milisecondes quel est le champ qui a le focus pour utiliser son nom comme
variable. Le problème, c'est qu'un Timer, c'est pas très recomendable vu la
charge de travail que cela impose.

- En ce qui concerne la création d'évènements dans des modules de classe, si
c'est possible, cela doit bien être expliqué qq part, non ;-)?

Merci
--
Bonne journée, soirée,...
------
Greg

"Buddy" escribió en el mensaje
news:%23$
Salut
Créer ses propres évènements, c'est possible mais uniquement dans les
modules de classe. C'est pas simple du tout et surtout c'est

pas documenté dans Access ni dans les livres. Les évènements c'est
l'ossature de Windows, d'où la discretion de Microsoft à ce

sujet.
Dans tous les cas, access gère nativement sur perte focus et sur réception
focus, donc pas la peine de créer cet évènement.


Private Sub zdtTexte_GotFocus()
Private Sub zdtTexte_LostFocus()

Ouala
Bye
Buddy

"Greg" a écrit dans le message de
news:

Bonjour,

J'ai besoin de faire éxecuter un procédé sous un évènement qui n'existe
pas:


"Lorsque l'enfoqué (Focus) change de champ (et non pas de Recordset)
dans un


formulaire" (Mon Access n'est pas en français -> Demandez-moi si les
mots


utilizés ne sont pas corrects).
Est-il possible de créer un évènement dans un module (où d'une autre
façon)?



Merci d'avance.

--
Bonne journée, soirée,...
------
Greg








Avatar
Buddy
ReSalut
Dis-moi ce que tu veux réaliser à chaque fois que l'utilisateur passe d'un contrôle à un autre ?

Buddy

"Greg" a écrit dans le message de news:
Merci pour ta réponse Buddy, c'est du très clair.

- En ce qui concerne el GotFocus y el LostFocus dont tu me parles, cela
implique copier le même procédé pour chaque champ. Je m'explique:

Si je veux que se réalise une certaine action (toujours la même acción avec
comme variable le nom champ qui a le focus) dès que le focus change de champ
dans un formulaire, je suis obligé d'instaler le même procédé dans
l'évènement GotFocus de chaque champ, c'est à dire, pour un formulaire avec
30 champs, 30 fois le même procédé. Ça marche mais ce n'est pas très
"élégant".
Il y aussi une autre métode qui consiste à instaler de procédé dans
l'évènement Timer en lui demandant de controler chaque intervale de x
milisecondes quel est le champ qui a le focus pour utiliser son nom comme
variable. Le problème, c'est qu'un Timer, c'est pas très recomendable vu la
charge de travail que cela impose.

- En ce qui concerne la création d'évènements dans des modules de classe, si
c'est possible, cela doit bien être expliqué qq part, non ;-)?

Merci
--
Bonne journée, soirée,...
------
Greg

"Buddy" escribió en el mensaje
news:%23$
Salut
Créer ses propres évènements, c'est possible mais uniquement dans les
modules de classe. C'est pas simple du tout et surtout c'est

pas documenté dans Access ni dans les livres. Les évènements c'est
l'ossature de Windows, d'où la discretion de Microsoft à ce

sujet.
Dans tous les cas, access gère nativement sur perte focus et sur réception
focus, donc pas la peine de créer cet évènement.


Private Sub zdtTexte_GotFocus()
Private Sub zdtTexte_LostFocus()

Ouala
Bye
Buddy

"Greg" a écrit dans le message de
news:

Bonjour,

J'ai besoin de faire éxecuter un procédé sous un évènement qui n'existe
pas:


"Lorsque l'enfoqué (Focus) change de champ (et non pas de Recordset)
dans un


formulaire" (Mon Access n'est pas en français -> Demandez-moi si les
mots


utilizés ne sont pas corrects).
Est-il possible de créer un évènement dans un module (où d'une autre
façon)?



Merci d'avance.

--
Bonne journée, soirée,...
------
Greg












Avatar
Greg
Obtenir Screen.ActiveControl.Name et l'indiquer comme variable d'une
fonction que j'ai dans un module.

--
Bonne journée, soirée,...
------
Greg

"Buddy" escribió en el mensaje
news:
ReSalut
Dis-moi ce que tu veux réaliser à chaque fois que l'utilisateur passe d'un
contrôle à un autre ?


Buddy

"Greg" a écrit dans le message de
news:

Merci pour ta réponse Buddy, c'est du très clair.

- En ce qui concerne el GotFocus y el LostFocus dont tu me parles, cela
implique copier le même procédé pour chaque champ. Je m'explique:

Si je veux que se réalise une certaine action (toujours la même acción
avec


comme variable le nom champ qui a le focus) dès que le focus change de
champ


dans un formulaire, je suis obligé d'instaler le même procédé dans
l'évènement GotFocus de chaque champ, c'est à dire, pour un formulaire
avec


30 champs, 30 fois le même procédé. Ça marche mais ce n'est pas très
"élégant".
Il y aussi une autre métode qui consiste à instaler de procédé dans
l'évènement Timer en lui demandant de controler chaque intervale de x
milisecondes quel est le champ qui a le focus pour utiliser son nom
comme


variable. Le problème, c'est qu'un Timer, c'est pas très recomendable vu
la


charge de travail que cela impose.

- En ce qui concerne la création d'évènements dans des modules de
classe, si


c'est possible, cela doit bien être expliqué qq part, non ;-)?

Merci
--
Bonne journée, soirée,...
------
Greg

"Buddy" escribió en el mensaje
news:%23$
Salut
Créer ses propres évènements, c'est possible mais uniquement dans les
modules de classe. C'est pas simple du tout et surtout c'est

pas documenté dans Access ni dans les livres. Les évènements c'est
l'ossature de Windows, d'où la discretion de Microsoft à ce

sujet.
Dans tous les cas, access gère nativement sur perte focus et sur
réception



focus, donc pas la peine de créer cet évènement.

Private Sub zdtTexte_GotFocus()
Private Sub zdtTexte_LostFocus()

Ouala
Bye
Buddy

"Greg" a écrit dans le message de
news:

Bonjour,

J'ai besoin de faire éxecuter un procédé sous un évènement qui
n'existe




pas:
"Lorsque l'enfoqué (Focus) change de champ (et non pas de Recordset)
dans un


formulaire" (Mon Access n'est pas en français -> Demandez-moi si les
mots


utilizés ne sont pas corrects).
Est-il possible de créer un évènement dans un module (où d'une autre
façon)?



Merci d'avance.

--
Bonne journée, soirée,...
------
Greg
















Avatar
3stone
Salut,

"Greg"
Obtenir Screen.ActiveControl.Name et l'indiquer comme variable d'une
fonction que j'ai dans un module.



Ecris ta fonction...


Function MaFonctionMachin ( sCtlName )
...
End function



Ensuite, tu sélectionne TOUS LES CHAMPS concernés!
Clic sur le premier, ensuite Shift Clic tous les suivants.


Clique sur propriété, et dans la ligne "GotFocus"
tu écris:

=MaFonctionMachin(Screen.ActiveControl.Name)


Je dis bien *dans la ligne* là, ou habituellement
s'affiche "Procédure événementielle"

De cette facon, tu ne l'écris qu'une seule fois.


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
Greg
Tout à fait d'accord avec toi Pierre mais le problème n'est pas de l'écrire
1 fois ou 30 fois (merci quand même pour le tuyau, je ne le connaissais
pas).

C'est un problème de conviction:
Je pense que l'informatique sert entre autre à automatiser des taches donc
je ne trouve pas cohérent que pour cela, il faille que la solution consiste
en que la même instruction soit répétée dans plusieurs endroits.
Il me semble donc plus correct avoir/créer un évènement "ChangeFocus" avec
une procédure que 30 procédures pour 30 évènement (un pour chaque control)
Il est évident que si c'est la seule solution, je ne vais pas être assez
stupide pour refuser de l'utiliser (C'est ainsi que je l'avais avant de fair
un essai avec la fonction Timer ce qui résoud le probléme mais provoque
évidemment une surcharge de travail).
Mais je préfère trouver un moyen plus "cohérent" et moins "brute", s'il
existe....

"3stone" escribió en el mensaje
news:
Salut,

"Greg"
Obtenir Screen.ActiveControl.Name et l'indiquer comme variable d'une
fonction que j'ai dans un module.



Ecris ta fonction...


Function MaFonctionMachin ( sCtlName )
...
End function



Ensuite, tu sélectionne TOUS LES CHAMPS concernés!
Clic sur le premier, ensuite Shift Clic tous les suivants.


Clique sur propriété, et dans la ligne "GotFocus"
tu écris:

=MaFonctionMachin(Screen.ActiveControl.Name)


Je dis bien *dans la ligne* là, ou habituellement
s'affiche "Procédure événementielle"

De cette facon, tu ne l'écris qu'une seule fois.


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------







Avatar
3stone
Salut,

"Greg"
C'est un problème de conviction:
Je pense que l'informatique sert entre autre à automatiser des taches donc
je ne trouve pas cohérent que pour cela, il faille que la solution consiste
en que la même instruction soit répétée dans plusieurs endroits.


La fonction n'est écrite qu'une fois!

Et, il faut bien bien que l'appel se fasse à chaque fois
que tu veux l'utiliser, me semble-t-il.

Donc, la bonne maintenance est garantie.


Il me semble donc plus correct avoir/créer un évènement "ChangeFocus" avec
une procédure que 30 procédures pour 30 évènement (un pour chaque control)


Si au niveau tu formulaire, cet événement "ChangeFocus" existerait...
il faudra alors, spécifier si oui ou non il faut en tenir compte.
Ce qui reviendrait au même...


Il est évident que si c'est la seule solution, je ne vais pas être assez
stupide pour refuser de l'utiliser (C'est ainsi que je l'avais avant de fair
un essai avec la fonction Timer ce qui résoud le probléme mais provoque
évidemment une surcharge de travail).


Beeeerg... un Timer pour "voir" où on se trouve ;-(

Sans parler de la surchage, ce sont les effets de bord...
et la gestion... à inclure jusque dans la gestion d'erreur...


Mais je préfère trouver un moyen plus "cohérent" et moins "brute", s'il
existe....


Je ne trouve cela pas "brut" du tout :o))


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
Greg
Je ne veux pas avoir l'air tétu (même si je le suis ;-)):

- La fonction n'est certes écrite qu'une fois.
Mais
- Chaque controle a la même procédure pour le même évènement -> 30 controles
= 30 évènements = 30 procédures (identiques) auxquelles faire appel.
Au lieu de:
- Un seul évènement "ChangeFocus" avec une seule procédure dans un seul
endroit: Le formulaire.

¿Pourquoi faire bien quand on peut faire mieux?

--
Bonne journée, soirée,...
------
Greg

"3stone" escribió en el mensaje
news:%23xOnS$
Salut,

"Greg"
C'est un problème de conviction:
Je pense que l'informatique sert entre autre à automatiser des taches
donc


je ne trouve pas cohérent que pour cela, il faille que la solution
consiste


en que la même instruction soit répétée dans plusieurs endroits.


La fonction n'est écrite qu'une fois!

Et, il faut bien bien que l'appel se fasse à chaque fois
que tu veux l'utiliser, me semble-t-il.

Donc, la bonne maintenance est garantie.


Il me semble donc plus correct avoir/créer un évènement "ChangeFocus"
avec


une procédure que 30 procédures pour 30 évènement (un pour chaque
control)



Si au niveau tu formulaire, cet événement "ChangeFocus" existerait...
il faudra alors, spécifier si oui ou non il faut en tenir compte.
Ce qui reviendrait au même...


Il est évident que si c'est la seule solution, je ne vais pas être assez
stupide pour refuser de l'utiliser (C'est ainsi que je l'avais avant de
fair


un essai avec la fonction Timer ce qui résoud le probléme mais provoque
évidemment une surcharge de travail).


Beeeerg... un Timer pour "voir" où on se trouve ;-(

Sans parler de la surchage, ce sont les effets de bord...
et la gestion... à inclure jusque dans la gestion d'erreur...


Mais je préfère trouver un moyen plus "cohérent" et moins "brute", s'il
existe....


Je ne trouve cela pas "brut" du tout :o))


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------







Avatar
3stone
re,

"Greg"
- La fonction n'est certes écrite qu'une fois.
Mais
- Chaque controle a la même procédure pour le même évènement -> 30 controles
= 30 évènements = 30 procédures (identiques) auxquelles faire appel.



Tu confond...

Il n'y a PAS 30 procédures, mais, il y à

30 APPELs de la procédure !!!


Sacré différence...



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
Greg
Ok mais ça reste toujours 30 contre 1:

De cette manière, on ne l'écrit qu'une fois grace à un raccourci pour ne pas
l'écrire 30 fois (mais le même texte est présent dans 30 endroits
différents)
De l'autre manière, on ne l'écrit qu'une fois parce que il n'y a besoin de
l'écrire qu'1 fois (et le texte n'est présent qu'à un seul endroit)

Dans le même style, que préfères-tu:
Envoyer un même mail (d'un seul coup) à 30 personnes pour savoir si elles
ont reçu le journal
Ou envoyer un mail au type qui répartit le journal pour demander la liste
des personnes à qui il l'a envoyé?

C'est pareil:
Inclure un appel de fonction dans 30 controls lorsqu'il reçoivent le focus
Ou provoquer un appel de fonction dans le formulaire chaque fois que le
focus change de control?

PS: J'ai comme l'impression que je vais pas avoir mon évènement personnalisé
;-)

--
Bonne journée, soirée,...
------
Greg


--
Bonne journée, soirée,...
------
Greg

"3stone" escribió en el mensaje
news:
re,

"Greg"
- La fonction n'est certes écrite qu'une fois.
Mais
- Chaque controle a la même procédure pour le même évènement -> 30
controles


= 30 évènements = 30 procédures (identiques) auxquelles faire appel.



Tu confond...

Il n'y a PAS 30 procédures, mais, il y à

30 APPELs de la procédure !!!


Sacré différence...



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------








1 2