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 :

Liste déroulante modifiable, recherche une partie d'un mot [AC-2010]


Sujet :

IHM

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 0
    Points
    0
    Par défaut Liste déroulante modifiable, recherche une partie d'un mot
    bonjour,
    Dans un formulaire j'ai une liste déroulante modifiable basée sur un requête.
    dans les propriétés le contenu est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [ARTICLES].[Libellé]
    , [ARTICLES].[fournisseur ] 
    FROM [ARTICLES];
    dans évènement sur touche appuyée:
    Me.ARTICLES.Dropdown

    Cela permet d'ouvrir la fenêtre dés que l'on appuie sur une touche.

    Je voudrais que la liste dans la fenêtre qui s'ouvre affiche tous les articles contenant les caractères que l'on frappe, pas seulement ceux qui comment par eux:

    exemple: quand on entre 'LA' je voudrais que la liste affiche la liste de tous les Articles qui comment 'LA' (c'est le cas ) mais aussi ceux qui contiennent 'LA' comme voiLA ou gaLAté, etc

    Merci de votre aide car je n'ai pas trouvé cette question dans les différentes discutions même s'il y a des sujets qui s'en rapprochent je n'ai pas trouvé la solution.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ce n'est pas le comportement classique d'une liste modifiable qui positionne la sélection en fonction des premiers caractères saisis. Je pense que c'est impossible et que vous allez devoir reproduire une zone de liste modifiable avec une zone de texte et une zone de liste.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Tofalu Voir le message
    Ce n'est pas le comportement classique d'une liste modifiable qui positionne la sélection en fonction des premiers caractères saisis. Je pense que c'est impossible et que vous allez devoir reproduire une zone de liste modifiable avec une zone de texte et une zone de liste.
    Je ne suis pas assez expérimenté pour bien comprendre la solution que vous me suggérer. pouvez vous m'en dire plus.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,


    Pour autant que j’aie compris le sens de la demande, e2r34 voudrait que le contenu de ta zone de liste soit limité aux items qui contiennent la chaîne de caractères déjà encodée (ou tous les items si le champ est vide).
    Il faut donc exprimer cela dans la requête qui sert de contenu à la zone de liste :




    Pour pouvoir encoder une chaîne quelconque, caractère par caractère, il ne faut pas limiter à liste et éviter l’autocomplétion :



    Et enfin, associer ce code à l’événement Sur changement de la zone de liste, pour qu’elle s’adapte au fur et à mesure de l’encodage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub LaZoneDeListe_Change()
      Me.Refresh 'pour rafraîchir le contenu
      Me.LaZoneDeListe.Requery 'pour actualiser la liste
      Me.LaZoneDeListe.SelStart = Nz(Len(Me.LaZoneDeListe), 0) 'pour
                                      ' positionner le curseur
                                      ' pour le caractère suivant éventuel
      Me.ActiveControl.Dropdown 'pour déployer la liste
    End Sub

    La db exemple est ici.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Un autre exemple, basé une table tab_Communes qui regroupe toutes les communes de France.

    Le champ qui nous intéresse ici est LIBGEO qui correspond au nom de la commune.

    La requête rqtFiltreZoneListe suivante permet de filtrer les données en affichant d'abord celles qui commencent comme la saisie, puis ensuite, celles qui contiennent la saisie :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PARAMETERS pNom Text ( 255 );
    SELECT LIBGEO
    FROM Tab_Communes
    WHERE LIBGEO LIKE "*" & pNom & "*"
    ORDER BY LIBGEO LIKE pNom & "*", LIBGEO;

    Ce qui retourne par exemple pour "ly" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    LIBGEO
    Lyas
    Lyaud
    Lye
    Ly-Fontaine
    Lynde
    Lyoffans
    Lyon
    Lyons-la-Forêt
    Lys
    Lys
    Lys-lez-Lannoy
    Lys-Saint-Georges
    Abilly
    Adilly
    Le formulaire contient une zone de liste nommé cmbCommunes dont la propriété Auto-Etendre est à Non.

    Le code est simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub cmbCommune_Change()
    Dim oDb As DAO.Database
    Dim oQdf As DAO.QueryDef
    Set oDb = CurrentDb
    Set oQdf = oDb.QueryDefs("rqtFiltreZoneListe")
     
    With oQdf
        .Parameters("pNom") = cmbCommune.Text
        Set cmbCommune.Recordset = .OpenRecordset
        .Close
    End With
     
    Set oQdf = Nothing
    Set oDb = Nothing
     
     
    End Sub
    Ce qui donne



    Attention, dans la proposition précédente, l'appel de Me.Refresh provoque l'enregistrement des modifications apportées par l'utilisateur. Et cela sous entend que le contenu saisi temporairement dans la zone de liste au cours de la frappe va être enregistré dans la table, avec toutes les conséquences que cela engendre en terme d'intégrité référentielle et de cohérence par exemple.
    Images attachées Images attachées  

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Merci, ta solution est meilleure.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Christophe,

    C'est une solution intéressante. Chapeau !!!
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Merci pour vos réponses. Vous êtes des bons.
    Je vais essayer aujourd'hui et je vous tiens informés.

    David

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 0
    Points
    0
    Par défaut résolu
    bravo ça fonctionne (la seconde solution)
    encore merci

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Liste
    C'est Génial juste dommage que quand je veux utiliser la Barre d'espace cela ne fonction pas y a t-il un moyen d'y remédier?

    Merci d'avance.






    Citation Envoyé par ClaudeLELOUP Voir le message
    Bonjour,


    Pour autant que j’aie compris le sens de la demande, e2r34 voudrait que le contenu de ta zone de liste soit limité aux items qui contiennent la chaîne de caractères déjà encodée (ou tous les items si le champ est vide).
    Il faut donc exprimer cela dans la requête qui sert de contenu à la zone de liste :




    Pour pouvoir encoder une chaîne quelconque, caractère par caractère, il ne faut pas limiter à liste et éviter l’autocomplétion :



    Et enfin, associer ce code à l’événement Sur changement de la zone de liste, pour qu’elle s’adapte au fur et à mesure de l’encodage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub LaZoneDeListe_Change()
      Me.Refresh 'pour rafraîchir le contenu
      Me.LaZoneDeListe.Requery 'pour actualiser la liste
      Me.LaZoneDeListe.SelStart = Nz(Len(Me.LaZoneDeListe), 0) 'pour
                                      ' positionner le curseur
                                      ' pour le caractère suivant éventuel
      Me.ActiveControl.Dropdown 'pour déployer la liste
    End Sub

    La db exemple est ici.

  11. #11
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Normal !
    Si le caractère (espace, alphanum) que vous saisissez n'existe pas dans la suite de la chaine de caractères, la sélection s'efface !
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  12. #12
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour hyperion13,

    Je constate que lorsque l'utilisateur saisit un espace, le Refresh n'en tient pas compte

    => il faudrait donc adapter l'événement si le KEYAscii est =32.

    Je cherche...
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  13. #13
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour djyo007,

    Vois si cette modif résout le problème.

    Dans le formulaire, j’ai ajouté un contrôle non visible « TexteSaisi ».
    La propriété « Contenu » de la zone de liste est :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [VINS].[DENOMINATION] FROM VINS WHERE ((([VINS].[DENOMINATION]) Like "*" & Formulaires!LeFomulaire!TexteSaisi & "*")) ORDER BY [VINS].[DENOMINATION];
    Et le code associé au formulaire :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Compare Database
    Option Explicit
     
    Private Sub LaZoneDeListe_KeyDown(KeyCode As Integer, Shift As Integer)
      If KeyCode = vbKeyDelete Then
          Me.TexteSaisi = ""
          Me.LaZoneDeListe = ""
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
      End If
    End Sub
     
    Private Sub LaZoneDeListe_KeyPress(KeyAscii As Integer)
      If KeyAscii <> 8 And KeyAscii <> 27 Then  'c.-à-d. Suppression arrière ou escape
          Me.TexteSaisi = Me.LaZoneDeListe.Text & Chr(KeyAscii)
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
          Me.LaZoneDeListe.Dropdown 'pour déployer la liste
        Else
          Me.TexteSaisi = ""
          Me.LaZoneDeListe = ""
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
      End If
    End Sub
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Super merci beaucoup je teste

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Super merci ClaudeLELOUP ça fonctionne à merveille.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Envoie Mail
    Bonjour ClaudeLELOUP, j'ai une petite question qui n'a rien avoir avec se tuto mais j'aimerais avoir un bouton qui envoi un état en mail mais sans utiliser une boite mail. Est-ce Possible?

    Merci d'avance
    Djyo007

    Citation Envoyé par ClaudeLELOUP Voir le message
    Bonjour djyo007,

    Vois si cette modif résout le problème.

    Dans le formulaire, j’ai ajouté un contrôle non visible « TexteSaisi ».
    La propriété « Contenu » de la zone de liste est :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [VINS].[DENOMINATION] FROM VINS WHERE ((([VINS].[DENOMINATION]) Like "*" & Formulaires!LeFomulaire!TexteSaisi & "*")) ORDER BY [VINS].[DENOMINATION];
    Et le code associé au formulaire :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Compare Database
    Option Explicit
     
    Private Sub LaZoneDeListe_KeyDown(KeyCode As Integer, Shift As Integer)
      If KeyCode = vbKeyDelete Then
          Me.TexteSaisi = ""
          Me.LaZoneDeListe = ""
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
      End If
    End Sub
     
    Private Sub LaZoneDeListe_KeyPress(KeyAscii As Integer)
      If KeyAscii <> 8 And KeyAscii <> 27 Then  'c.-à-d. Suppression arrière ou escape
          Me.TexteSaisi = Me.LaZoneDeListe.Text & Chr(KeyAscii)
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
          Me.LaZoneDeListe.Dropdown 'pour déployer la liste
        Else
          Me.TexteSaisi = ""
          Me.LaZoneDeListe = ""
          Me.LaZoneDeListe.RowSource = Me.LaZoneDeListe.RowSource 'pour actualiser les choix
      End If
    End Sub

  17. #17
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Bonsoir à tous,
    Je suis tombé sur ce post et ce code qui m'intéresse,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub cmbCommune_Change()
    Dim oDb As DAO.Database
    Dim oQdf As DAO.QueryDef
    Set oDb = CurrentDb
    Set oQdf = oDb.QueryDefs("rqtFiltreZoneListe")
     
    With oQdf
        .Parameters("pNom") = cmbCommune.Text
        Set cmbCommune.Recordset = .OpenRecordset
        .Close
    End With
     
    Set oQdf = Nothing
    Set oDb = Nothing
     
     
    End Sub
    j'ai adapté le code à mon besoin, mais lorsque je saisie une lettre dans ma liste déroulante, j'ai un message d'erreur :
    Erreur d'exécution '3061' :
    Trop peu de paramètres. 2 attendus
    Et c'est sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set cmbCommune.Recordset = .OpenRecordset
    Que ça plante.
    Une idée ?
    Merci


    Modif message minuit.....


    Après différents test, ma zone de liste a 3 colonnes : colonne 1 Id_designation, colonne 2 designation en clair, colonne 3 Id_type, colonne 3 qui est paramétrée par une liste précédente.
    C'est pour cela qu'il manquait un paramètre puisque je n'en avait défini qu'un. Comment faire pour garder mon premier paramétrage sur le tri en récupérant la valeur de ma première liste....?
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/05/2015, 13h40
  2. [AC-2010] Créer une liste déroulante modifiable
    Par eriknroll dans le forum IHM
    Réponses: 9
    Dernier message: 09/10/2013, 14h32
  3. Réponses: 20
    Dernier message: 02/05/2010, 16h56
  4. Réponses: 2
    Dernier message: 25/11/2005, 12h09
  5. Liste déroulante pointant sur une page
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/03/2005, 09h26

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