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

Le
elxav
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 cod=
e
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ènement=
s 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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick
Le #16532181
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.



elxav
Le #16532161
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
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 -


Patrick
Le #16533141
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 > 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 -




elxav
Le #16535831
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
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 > > 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 -


Publicité
Poster une réponse
Anonyme