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 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    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
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  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
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/01/2009, 12h29
  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, 14h22
  3. Recherche sur plusieurs tables en même temps
    Par Zouzou1er dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/10/2007, 09h40
  4. Réponses: 3
    Dernier message: 17/07/2007, 09h44
  5. Réponses: 2
    Dernier message: 19/07/2006, 19h45

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