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

Déclencher les évènements d'un control

4 réponses
Avatar
elxav
Bonjour la communaut=E9,

Je cherche une astuce pour d=E9clencher les =E9v=E8nements d'un controle
lorsque le contenu de celui-ci est modifi=E9 par VBA.

Exemple:

A l'ouverture d'un formulaire, certains controles sont inactif. La
saisie ou le choix d'une valeur dans une liste d=E9roulante (appelons l=E0
ListBox1), d=E9clenche l'=E9v=E8nement ListBox_Click(). C'est dans cet
=E9v=E8nement que j'active les controles le n=E9cessitant. En somme, du cod=
e
standard.

Mon probl=E8me: Si la modif de la valeur de ListBox1 est faite par du
code VBA, l'=E9v=E8nement _Click ne d=E9clenche pas. Jusque l=E0, toujours =
du
standard.

Mon interrogation g=E9n=E9ral: comment d=E9clencher le ou les =E9v=E8nement=
s qui
devraient l'=EAtre lorsque un control re=E7oit le focus, que la valeur
change, que le focus quitte le contr=F4le, etc... sans avoir =E0 l'=E9crire
formellement.
Ces controles pouvant =EAtre des cases =E0 cocher, des listes d=E9roulantes=
,
des zones de saisie, bref, tout type de controles.

Je pense vaguement =E0 envoyer une s=E9quence de touche au controle
(SendKeys), apr=E8s avoir modifi=E9 sa valeur, mais quelle s=E9quence?

D'avance merci pour toutes vos remarques.
Xav.

4 réponses

Avatar
Patrick
Bonjour,

Dans la procédure VBA tu peux tout simplement appeler la procédure de
l'événement, par exemple :

Call ListBox_Click

Bonne journée.

--
Patrick


"" wrote:

Bonjour la communauté,

Je cherche une astuce pour déclencher les évènements d'un controle
lorsque le contenu de celui-ci est modifié par VBA.

Exemple:

A l'ouverture d'un formulaire, certains controles sont inactif. La
saisie ou le choix d'une valeur dans une liste déroulante (appelons là
ListBox1), déclenche l'évènement ListBox_Click(). C'est dans cet
évènement que j'active les controles le nécessitant. En somme, du code
standard.

Mon problème: Si la modif de la valeur de ListBox1 est faite par du
code VBA, l'évènement _Click ne déclenche pas. Jusque là, toujours du
standard.

Mon interrogation général: comment déclencher le ou les évènements qui
devraient l'être lorsque un control reçoit le focus, que la valeur
change, que le focus quitte le contrôle, etc... sans avoir à l'écrire
formellement.
Ces controles pouvant être des cases à cocher, des listes déroulantes,
des zones de saisie, bref, tout type de controles.

Je pense vaguement à envoyer une séquence de touche au controle
(SendKeys), après avoir modifié sa valeur, mais quelle séquence?

D'avance merci pour toutes vos remarques.
Xav.



Avatar
elxav
Bonjour Patrick,

Oui, ca effectivement ca marcherait.
Mais je ne peux pas mettre en oeuvre.

Pour être exact:
- Une table qui contient (entre autre) => IdForm, IdControle,
ValeurControle
- Une procédure qui lit cette table, et qui, pour chaque
enregistrement de la table fait un truc du genre:
Forms(IdForm).Controls(IdControle).SetFocus
Forms(IdForm).Controls(IdControle).Value = ValeurControle

Dans cette table, je mets également des noms de procédures à exécut er
(sous une syntaxe du style "ExecuterProc NomProcedure").
Lorsque je lits une ligne de ce type, je passe par la fonction Eval
pour exécuter la procédure.
Tout cela fonctionne trés bien.

Le hic, certaines valeurs de certaines listes décroulantes,
conditionne l'activation/désactivation d'autres controles.
Exemple:
Sub ListBox1_Click()
If ListBox1 = "truc" then
Me.Control1.Enabled = True
...
Else
Me.Control1.Enabled = False
...
End If
End Sub

Le problème est de déclencher le ListBox1_Click, automatiquement si la
valeur de ListBox1 est changé par VBA, et sans avoir à l'écrire de
façon formelle dans ma table d'automatisation (je pourrais en effet
ajouter les lignes "ExecuterProc ListBox1_Click", mais cela va aloudir
la saisie des infos dans cette table.
Sans compter une éventuelle maintenance dans le formulaire, où l'on
pourrait ajouter des évènements sur lesdits controles.

Merci pour ta suggestion.


On 12 août, 17:01, Patrick wrote:
Bonjour,

Dans la procédure VBA tu peux tout simplement appeler la procédure de
l'événement, par exemple :

  Call ListBox_Click

Bonne journée.

--
Patrick



"" wrote:
> Bonjour la communauté,

> Je cherche une astuce pour déclencher les évènements d'un control e
> lorsque le contenu de celui-ci est modifié par VBA.

> Exemple:

> A l'ouverture d'un formulaire, certains controles sont inactif. La
> saisie ou le choix d'une valeur dans une liste déroulante (appelons l à
> ListBox1), déclenche l'évènement ListBox_Click(). C'est dans cet
> évènement que j'active les controles le nécessitant. En somme, du code
> standard.

> Mon problème: Si la modif de la valeur de ListBox1 est faite par du
> code VBA, l'évènement _Click ne déclenche pas. Jusque là, toujo urs du
> standard.

> Mon interrogation général: comment déclencher le ou les évène ments qui
> devraient l'être lorsque un control reçoit le focus, que la valeur
> change, que le focus quitte le contrôle, etc... sans avoir à l'éc rire
> formellement.
> Ces controles pouvant être des cases à cocher, des listes déroula ntes,
> des zones de saisie, bref, tout type de controles.

> Je pense vaguement à envoyer une séquence de touche au controle
> (SendKeys), après avoir modifié sa valeur, mais quelle séquence?

> D'avance merci pour toutes vos remarques.
> Xav.- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
Patrick
Pour les listes, utilise plutôt l'événement Change à la place de Click
(ListBox1_Change).

Ainsi, si tu changes une valeur de la liste, l'événement sera pris en compte.

--
Patrick


"" wrote:

Bonjour Patrick,

Oui, ca effectivement ca marcherait.
Mais je ne peux pas mettre en oeuvre.

Pour être exact:
- Une table qui contient (entre autre) => IdForm, IdControle,
ValeurControle
- Une procédure qui lit cette table, et qui, pour chaque
enregistrement de la table fait un truc du genre:
Forms(IdForm).Controls(IdControle).SetFocus
Forms(IdForm).Controls(IdControle).Value = ValeurControle

Dans cette table, je mets également des noms de procédures à exécuter
(sous une syntaxe du style "ExecuterProc NomProcedure").
Lorsque je lits une ligne de ce type, je passe par la fonction Eval
pour exécuter la procédure.
Tout cela fonctionne trés bien.

Le hic, certaines valeurs de certaines listes décroulantes,
conditionne l'activation/désactivation d'autres controles.
Exemple:
Sub ListBox1_Click()
If ListBox1 = "truc" then
Me.Control1.Enabled = True
...
Else
Me.Control1.Enabled = False
...
End If
End Sub

Le problème est de déclencher le ListBox1_Click, automatiquement si la
valeur de ListBox1 est changé par VBA, et sans avoir à l'écrire de
façon formelle dans ma table d'automatisation (je pourrais en effet
ajouter les lignes "ExecuterProc ListBox1_Click", mais cela va aloudir
la saisie des infos dans cette table.
Sans compter une éventuelle maintenance dans le formulaire, où l'on
pourrait ajouter des évènements sur lesdits controles.

Merci pour ta suggestion.


On 12 août, 17:01, Patrick wrote:
> Bonjour,
>
> Dans la procédure VBA tu peux tout simplement appeler la procédure de
> l'événement, par exemple :
>
> Call ListBox_Click
>
> Bonne journée.
>
> --
> Patrick
>
>
>
> "" wrote:
> > Bonjour la communauté,
>
> > Je cherche une astuce pour déclencher les évènements d'un controle
> > lorsque le contenu de celui-ci est modifié par VBA.
>
> > Exemple:
>
> > A l'ouverture d'un formulaire, certains controles sont inactif. La
> > saisie ou le choix d'une valeur dans une liste déroulante (appelons là
> > ListBox1), déclenche l'évènement ListBox_Click(). C'est dans cet
> > évènement que j'active les controles le nécessitant. En somme, du code
> > standard.
>
> > Mon problème: Si la modif de la valeur de ListBox1 est faite par du
> > code VBA, l'évènement _Click ne déclenche pas. Jusque là, toujours du
> > standard.
>
> > Mon interrogation général: comment déclencher le ou les évènements qui
> > devraient l'être lorsque un control reçoit le focus, que la valeur
> > change, que le focus quitte le contrôle, etc... sans avoir à l'écrire
> > formellement.
> > Ces controles pouvant être des cases à cocher, des listes déroulantes,
> > des zones de saisie, bref, tout type de controles.
>
> > Je pense vaguement à envoyer une séquence de touche au controle
> > (SendKeys), après avoir modifié sa valeur, mais quelle séquence?
>
> > D'avance merci pour toutes vos remarques.
> > Xav.- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -




Avatar
elxav
Bonjour Patrick,

Fonctionne pas non plus.
Change ne déclenche pas si la modif est faite par VBA.

Tant pis, à défaut d'une solution, je vais rajouter un appel à
l'évènement dans mon "Script" ("ExecuterProc ListBox1_Click").

Merci.
Cordialement.


On 12 août, 19:04, Patrick wrote:
Pour les listes, utilise plutôt l'événement Change à la place de Click
(ListBox1_Change).

Ainsi, si tu changes une valeur de la liste, l'événement sera pris en compte.

--
Patrick



"" wrote:
> Bonjour Patrick,

> Oui, ca effectivement ca marcherait.
> Mais je ne peux pas mettre en oeuvre.

> Pour être exact:
>   - Une table qui contient (entre autre) => IdForm, IdControle,
> ValeurControle
>   - Une procédure qui lit cette table, et qui, pour chaque
> enregistrement de la table fait un truc du genre:
>        Forms(IdForm).Controls(IdControle).SetFocus
>        Forms(IdForm).Controls(IdControle).Value = ValeurContr ole

> Dans cette table, je mets également des noms de procédures à ex écuter
> (sous une syntaxe du style "ExecuterProc NomProcedure").
> Lorsque je lits une ligne de ce type, je passe par la fonction Eval
> pour exécuter la procédure.
> Tout cela fonctionne trés bien.

> Le hic, certaines valeurs de certaines listes décroulantes,
> conditionne l'activation/désactivation d'autres controles.
> Exemple:
>    Sub ListBox1_Click()
>        If ListBox1 = "truc" then
>          Me.Control1.Enabled = True
>          ...
>        Else
>          Me.Control1.Enabled = False
>          ...
>        End If
>     End Sub

> Le problème est de déclencher le ListBox1_Click, automatiquement si la
> valeur de ListBox1 est changé par VBA, et sans avoir à l'écrire d e
> façon formelle dans ma table d'automatisation (je pourrais en effet
> ajouter les lignes "ExecuterProc ListBox1_Click", mais cela va aloudir
> la saisie des infos dans cette table.
> Sans compter une éventuelle maintenance dans le formulaire, où l'on
> pourrait ajouter des évènements sur lesdits controles.

> Merci pour ta suggestion.

> On 12 août, 17:01, Patrick wrote :
> > Bonjour,

> > Dans la procédure VBA tu peux tout simplement appeler la procédur e de
> > l'événement, par exemple :

> >   Call ListBox_Click

> > Bonne journée.

> > --
> > Patrick

> > "" wrote:
> > > Bonjour la communauté,

> > > Je cherche une astuce pour déclencher les évènements d'un con trole
> > > lorsque le contenu de celui-ci est modifié par VBA.

> > > Exemple:

> > > A l'ouverture d'un formulaire, certains controles sont inactif. La
> > > saisie ou le choix d'une valeur dans une liste déroulante (appelo ns là
> > > ListBox1), déclenche l'évènement ListBox_Click(). C'est dans cet
> > > évènement que j'active les controles le nécessitant. En somme , du code
> > > standard.

> > > Mon problème: Si la modif de la valeur de ListBox1 est faite par du
> > > code VBA, l'évènement _Click ne déclenche pas. Jusque là, t oujours du
> > > standard.

> > > Mon interrogation général: comment déclencher le ou les év ènements qui
> > > devraient l'être lorsque un control reçoit le focus, que la val eur
> > > change, que le focus quitte le contrôle, etc... sans avoir à l' écrire
> > > formellement.
> > > Ces controles pouvant être des cases à cocher, des listes dér oulantes,
> > > des zones de saisie, bref, tout type de controles.

> > > Je pense vaguement à envoyer une séquence de touche au controle
> > > (SendKeys), après avoir modifié sa valeur, mais quelle séquen ce?

> > > D'avance merci pour toutes vos remarques.
> > > Xav.- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

- Afficher le texte des messages précédents -