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

Access Discussion :

Saisie semi-automatique: Communication zone de texte, zone de liste et formulaire [AC-2013]


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 237
    Points : 92
    Points
    92
    Par défaut Saisie semi-automatique: Communication zone de texte, zone de liste et formulaire
    Bonsoir le forum!
    Pour modifier des données nous avons créé une zone de texte intitulée txtRecherche et une zone de liste liste_eleves placée sous la zone de texte.
    L'idée est d'amener la zone de liste à proposer à l'utilisateur une liste en fonction du texte saisi dans la zone de texte txtRecherche.
    La zone de liste cachée devient visible au clic dans la zone de texte. Ensuite au choix d'un élève les champs du formulaire se remplissent des données de cet élève.

    Nous en somme à la première étape: la communication entre la zone de texte et la zone de liste. Mais, ici, nous rencontrons une difficulté: Notre code ne réalise pas les actions attendues que nous avons décrites ci-dessus. La zone de liste se déploie mais n'affiche aucun résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Liste_eleves_Click()
    TxtRecherche.SetFocus
    If Liste_eleves.Visible = True Then Liste_eleves.Visible = False
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TxtRecherche_Click()
    If Liste_eleves.Visible = False Then Liste_eleves.Visible = True
    Liste_eleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'" 
    End Sub
    djibysadji

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    Essayez ceci:
    juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste_eleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'"
    Ajoutez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Liste_eleves..Requery

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 283
    Points : 19 480
    Points
    19 480
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Il me semble que ce que vous proposez :

    • une zone de texte pour la saisie
    • + une zone de liste pour afficher la liste


    correspond simplement à une zone de liste déroulante, ou combobox en anglais.

    Si vous souhaitez faire de l'auto-complétion, une alternative serait donc de créer une liste déroulante à la place, que vous nommez par exemple RechercherEleves.

    Vous mettez sa propriété Auto étendre à False, pour éviter qu'elle affiche le nom et prénom complet quand vous commencez la saisie.

    Puis, vous mettez ce code sur l'événement changement de cette liste déroulante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub RechercherEleves_Change()
        Me.RechercherEleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & RechercherEleves.Text & "*'"
        Me.RechercherEleves.Dropdown ' affiche la liste des noms/prénoms correspondant
    End Sub
    Ce code s'exécute à chaque fois que vous tapez un caractère dans la liste déroulante.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 283
    Points : 19 480
    Points
    19 480
    Billets dans le blog
    64
    Par défaut
    Salut Hyper ;-)

    Je lui ai déjà proposé quelque chose de comparable, mais il ne m'a pas répondu. Il ne souhaite peut-être pas tout changer, pourtant ce serait plus simple en effet..

    Citation Envoyé par User Voir le message
    Bonjour,

    Il me semble que ce que vous proposez :

    • une zone de texte pour la saisie
    • + une zone de liste pour afficher la liste


    correspond simplement à une zone de liste déroulante, ou combobox en anglais.

    Si vous souhaitez faire de l'auto-complétion, une alternative serait donc de créer une liste déroulante à la place, que vous nommez par exemple RechercherEleves.

    Vous mettez sa propriété Auto étendre à False, pour éviter qu'elle affiche le nom et prénom complet quand vous commencez la saisie.

    Puis, vous mettez ce code sur l'événement changement de cette liste déroulante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub RechercherEleves_Change()
        Me.RechercherEleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & RechercherEleves.Text & "*'"
        Me.RechercherEleves.Dropdown ' affiche la liste des noms/prénoms correspondant
    End Sub
    Ce code s'exécute à chaque fois que vous tapez un caractère dans la liste déroulante.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 237
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par User Voir le message
    Salut Hyper ;-)

    Je lui ai déjà proposé quelque chose de comparable, mais il ne m'a pas répondu. Il ne souhaite peut-être pas tout changer, pourtant ce serait plus simple en effet..
    Bonjour!

    Tout d'abord je présente mes excuses à Hyper pour n'avoir pas répondu à son premier message. J'ai finalement adopté la solution de l'auto-completion avec la liste déroulante que vous m'avez proposée tous les deux (Hyper et User). Pour le code lié au bouton de recherche cmdRecherche proposé par User je devais mettre (Me.RechercherEleves.Column(-1),0). En plus pour la liste déroulante j'ai même ajouté d'autres colonnes pour avoir plus d'informations sur l'élève à sélectionner: il arrive fréquemment que des élèves aient les mêmes prénom et Nom or le champ PrenomNom est une concaténation des deux.
    Merci encore une fois à tous les deux pour m'avoir ôté une épine du pied.

    Code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub cmdRecherche_Click()
     With Me.RecordsetClone
     
            .FindFirst "Eleve_id=" & Nz(Me.RechercherEleves.Column(-1), 0) ' effectue la recherche
     
            If Not (.NoMatch) Then ' si ça matche
                Me.Bookmark = .Bookmark ' on se positionne sur l'enregistrement trouvé
            Else
                MsgBox ("Pas de résultat !")
            End If
     
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub RechercherEleves_Change()
     Me.RechercherEleves.RowSource = "SELECT Eleve_id, PrenomNom, Datenaiss, Classe_libelle FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & RechercherEleves.Text & "*'"
        Me.RechercherEleves.Dropdown ' affiche la liste des noms/prénoms correspondant
    End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 237
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par Belga16 Voir le message
    Essayez ceci:
    juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste_eleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'"
    Ajoutez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Liste_eleves..Requery
    Bonjour!
    Nous avons essayé votre suggestion, mais ça ne fonctionne toujours pas.
    Merci.

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 237
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Bonjour!
    Nous avons essayé votre suggestion, mais ça ne fonctionne toujours pas.
    Merci.
    Salut
    Le problème avec votre code est qu'il ne gère pas les doublons. Il arrive très souvent que des élèves de différentes classes aient les mêmes Prénom et Nom.
    J'aimerais que la liste se déroule dès que je sais une lettre et réduise le champ de recherche au fur et à mesure que que tape des lettres.
    Merci

  8. #8
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    Pardon! c'est votre code ""SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'""
    Si vous voulez éviter les doublons, il fallait utiliser une requête de regroupement (GroupBy Query)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Liste_eleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES GROUP BY PrenomNom WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'"
    Me.Liste_eleves.Requery
    Vous devez également considérer les conseils de "User", sans oublier la requête de regroupement sur 'PrenomNom '

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 237
    Points : 92
    Points
    92
    Par défaut RE
    Citation Envoyé par Belga16 Voir le message
    Pardon! c'est votre code ""SELECT PrenomNom FROM R_RECHERCHER_ELEVES WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'""
    Si vous voulez éviter les doublons, il fallait utiliser une requête de regroupement (GroupBy Query)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Liste_eleves.RowSource = "SELECT PrenomNom FROM R_RECHERCHER_ELEVES GROUP BY PrenomNom WHERE PrenomNom LIKE '" & TxtRecherche.Text & "*'"
    Me.Liste_eleves.Requery
    Vous devez également considérer les conseils de "User", sans oublier la requête de regroupement sur 'PrenomNom '
    Salut!
    Nous avons réussi la première étape qui consistait à assurer le dialogue entre la zone de texte TxtRecherche et la zone de liste Listeleves(nous avons changé la dénomination). Nous obtenons ceci:
    1/ La zone de liste cachée à l'ouverture du formulaire, se déploie dés qu'on saisie du texte dans la zone de texte TxtRecherche et affiche une liste qui se rétrécie au fur et à mesure que nous progressons dans la saisie.
    2/ Nous parvenons, au clic, à entrer dans la zone de texte, l'élément choisi dans la zone de liste.

    La deuxième étape consiste à afficher dans les champs du formulaire SF_MODIFIER_ELEVES, les données de l'élève sélectionné. Pour cela nous avons créé un bouton qui, au click, affichera toutes les informations concernant l'élève. Je précise que SF_MODIFIER_ELEVES est un formulaire unique.
    Nous avons besoin d'un appui à ce niveau.
    Les données sur le formulaire joint sont bien évidemment fictives
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Listeleves_Click()
    TxtRecherche.Value = Listeleves.Value
    TxtRecherche.SetFocus
    If Listeleves.Visible = True Then Listeleves.Visible = False
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub txtRecherche_Change()
    If Listeleves.Visible = False Then Listeleves.Visible = True
    Listeleves.RowSource = "SELECT T_ELEVES.Eleve_id, T_ELEVES.PrenomNom FROM T_ELEVES WHERE PrenomNom LIKE '" & Me.TxtRecherche.Text & "*'"
    End Sub
    Images attachées Images attachées  

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

Discussions similaires

  1. Bloquer la saisie semi automatique du navigateur
    Par Oluha dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 01/02/2007, 22h53
  2. [HTML] Supprimer la saisie semi automatique dans les balises TEXT
    Par mego dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 25/07/2006, 16h30
  3. Saisie semi automatique
    Par Necron dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/02/2006, 09h05
  4. Saisie semi-automatique
    Par kurul1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/01/2006, 08h20
  5. Liste déroulante en saisie semi automatique
    Par pier07 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 29/07/2005, 17h02

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