IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Evènement sur plusieurs contrôles en même temps [AC-2010]


Sujet :

IHM

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut Evènement sur plusieurs contrôles en même temps
    Bonjour,


    Avec l'aide de la recherche multi critères de Caféine, j'ai créé un formulaire similaire.

    Seulement, une question me taraude : Dans sa recherche, il effectue une mise à jour de sa liste (lstResults) à l'aide de la fonction RefreshQuery, qui s'active au moment où on coche les cases pour faire apparaitre les champs.

    Dans mon formulaire actuel, j'ai à peu près une dizaine de Textbox (sans checkbox "associée"). je voudrais lancer la requête RefreshQuery à chaque fois qu'un de mes contrôles est modifié.
    Pour exemple, dès que je tape une lettre dans une Textbox, ma liste va se mettre à jour. Voici quelques exemples plus concrets.


    Dans un premier temps, j'ai essayé de le faire sur un controle.
    J'ai appelé ma textbox textBox1. J'ai essayé avec l'évènement suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Textbox1_Change()
    RefreshQuery
    End Sub
    Sauf que ça fonctionne pas : quand je vérifié la valeur de ma textbox quand j'ai tapé la lettre a (par exemple), il me dit que la valeur est null
    Par contre, si je quitte ma textbox et que je reviens dessus, et qu eje tape une autre lettre il voit bien la lettre a
    Auriez-vous une explication ?

    Par ailleurs, j'ai ensuite essayé sur l'évènement KeyPress, mais j'ai le même phénomène.

    Enfin, j'ai fait sur l’événement AfterUpdate et BeforeUpdate, et là ça fonctionne dès que je quitte le champ, mais c'est pas ce que je veux

    Quelqu'un aurait une idée ?


    Dans un 2e temps, plutôt que d'écrire des :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Textbox1_Change()
    RefreshQuery
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Textbox2_Change()
    RefreshQuery
    End Sub
    etc.. pour chaque Textbox, je voudrais savoir s'il n'existe pas un moyen "plus court" pour le faire sur chaque événement de chaque contrôle.
    J'ai entendu parler de collections, mais j'ai cherché un peu sur le net, je n'ai rien de trouvé de concret.
    Quelqu'un pourrait-il éclairer ma lanterne, ou une solution, si cela existe ?


    En vous remerciant par avance de vos réponses

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Bon j'ai trouvé réponse à ma première question.

    En fait c'est bien l'événement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Textbox1_Change()
    RefreshQuery
    End Sub
    Qu'il faut utiliser.
    Sauf que dans ma requête, pour récupérer la valeur je mettais :

    Et ça me renvoyait NULL. Si je met

    Il me renvoie la valeur que je suis en train de taper

    Plus qu'à trouver réponse à ma 2e question

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 663
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,

    pour ce genre de situation, j'utilise l'event AfterUpdate(), le .value est toujours bon, et le .text n'est pas valide sinon

  4. #4
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Voici un extrait de code qui permet d'affecter une meme procédure à tout un ensemble de controles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        'Affectation de la même procédure à tous les objets du même nom sur l'évènement ON_CLICK
        For Each l_Control In Controls
            'Concerne les boutons de changement de Pages Horaires
            If Left(l_Control.Name, 3) = "btn" Then
                l_Control.OnClick = "=TaProcédure()"
            End If
        Next
    Pour me faciliter la vie, j'ai renommer tous les contrôles, devant recevoir la même procédure, avec le même préfixe. ici : btn
    Cet extrait est placé dans l'évènement Open du Formulaire bien sur

    Bonne continuation

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Merci Jeannot, j'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Open(Cancel As Integer)
    Dim l_control As Control
    For Each l_control In Controls
        If Left(l_control.Name, 3) = "txt" Then
            l_control.OnChange = "=RefreshQuery()"
        ElseIf Left(l_control.Name, 3) = "chk" Then
            l_control.OnClick = "=RefreshQuery()"
        ElseIf Left(l_control.Name, 3) = "cmb" Then
            l_control.AfterUpdate = "=RefreshQuery()"
        End If
    Next
    End Sub
    Et ça marche nickel

    Par contre, dans ma requête, j'utilise la propriété .text pour récupérer les valeurs au moment de la frappe (pour les textbox).
    J'avais rencontré un souci dans ma requête, car quand la textbox est vide, j'ai l'erreur 2185 (impossible de lire la propriété du controle).

    Le problème est que si j'utilise le .value, je ne récupère pas la valeur actuellement tapée : elle n'est récupérée qu'à partir du moment où je perd le focus sur la Textbox. Donc j'ai fait une gestion d'erreur sur l'erreur 2185, car la fonction "IsError" ne fonctionne pas sur cette erreur.

    merci ent out cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/01/2009, 13h29
  2. Appliquer PageSetup sur plusieurs feuilles en même temps
    Par sl.info dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/10/2007, 15h22
  3. Recherche sur plusieurs tables en même temps
    Par Zouzou1er dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/10/2007, 10h40
  4. Réponses: 3
    Dernier message: 17/07/2007, 10h44
  5. Réponses: 2
    Dernier message: 19/07/2006, 20h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo