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 :

Formulaire recherche multi-critères


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut Formulaire recherche multi-critères
    Bonjour,

    J'ai encore un problème (qui j'espere sera le dernier) avec mon formulaire, censé permettre de réalier des recherches multicritères...

    j'ai suivi le tutoriel de Caféine, mais lorsque j'arrive à la fin et que je test mon formulaire, je coche la case correspondant à un critère ce qui devrait la faire apparaître, mais plusieurs problèmes se posent:

    1. les listes déroulantes restent affichées même quand les cases appropriées ne sont pas cochées
    2. une txtbox s'ouvre, me demandant de rentrer (clef primaire de ma table)
    3. La zone de résultat n'affiche aucun résultat...

    Je pense avoir bien suivi le tuto, mais j'ai du mal l'adapter à mon cas personnel.

    Je ne vous demande donc pas de tout me refaire, mais simplement si vous aviez une idée lumineuse ça m'aiderait ! Je vais avoir du mal à etre plus explicite sur le forum, alors je joins mon document, le formulaire concerné s’appelle . Je sais que ça vous demande du temps, mais si vous pouviez simplement me dire où le code a une erreur, je pourrais déja avoir une piste de réflexion.

    J'ai essayer d'utiliser le debug, mais rien n'y fait :/

    Merci d'avance!

    Romain

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Conseil aux entreprises
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Conseil aux entreprises
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Bonjour rominou.

    Je ne sais pas si je fais bien car je suis débutant en Access, mais je me permets quand même de te donner mon avis sur ton projet.

    J'ai fais quelques esssais chez moi : j'ai mis en commentaires les refresh de tes listes sur l'événement click des cases à cocher, j'ai ajouté la source de la liste des noms et j'ai mis par défaut les propriétés visibles des champs liste et date sur non. Il faudrait je pense passer un événement sur le onload du formulaire pour que les cases soient toutes décochées, les champs étant non visibles par défaut.

    Le problème, c'est que je n'ai vu que des événements on click pour les cases, et pas de on checked, tu sais d'où ça vient ?

    Je ne pense pas que tu sois obligé de rafraichir tes listes à chaque click (ou check).

    Regarde un peu ce que je te propose et tiens moi au courant.

    Cordialement.

    PME Dag

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Tout d'abord, merci énormément, c'est tout simplement magique de voir les cases paraître et disparaître quand il faut !



    Citation Envoyé par PMEDiag Voir le message
    Il faudrait je pense passer un événement sur le onload du formulaire pour que les cases soient toutes décochées, les champs étant non visibles par défaut.

    Le problème, c'est que je n'ai vu que des événements on click pour les cases, et pas de on checked, tu sais d'où ça vient ?

    Je ne pense pas que tu sois obligé de rafraichir tes listes à chaque click (ou check).


    PME Dag
    Concernant l'evenement Onload, j'ai ajouter une execution de la refreshquerry à tout le formulaire avant Maj, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    Est ce bien de cela qu'il s'agit? (si je ne me trompe pas la refreshquerry réinitialise le formulaire)

    pour finir, si je ne rafraîchis pas mes listes à chaque clic, vont elles bien se rafraîchir quand je sélectionnerai une entrée dans la liste déroulante?


    Désoler pour toutes ces questions, mais je ne comprends pas tout de mon formulaire, étant donné que j'ai appliqué un tuto et que je n'y connais rien du tout en VBA/SQl ou presque :s !


    Par rapport aux on_click, c'est simplement car je ne vois pas d’évènement "on_check" que j'ai attribué des évènements à ceux ci.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Conseil aux entreprises
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Conseil aux entreprises
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Re.

    Refresh et requery sont des méthodes qui doivent être appliquées à des objets comme des champs ou des formulaires par exemple.

    Je pense que tu devrais essayer quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom_Du_Formulaire.Refresh
    Ou

    Si Me designe le formulaire en cours d'utilisation, ou bien encore

    Comme tu le ferait pour limiter l'affichage d'une liste de communes en fonction du choix d'un code postal ou d'un département.

    Au cas où, voici un lien vers un tutoriel sur les listes restreintes, très simple à comprendre et à appliquer :

    http://www.info-3000.com/access/list...inte/index.php

    Il ne s'agit bien sur que d'une solution, il en existe d'autres.

    Je suis un peu comme toi, je te donne des pistes que je pense être fructives, car je débute en Access comme je le disais dans mon premier poste. A nous deux, on devrait bien y arriver.

    Si je vois autre chose, je t'en informerai.

    Cordialement.

    PME Diag

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Encore merci, mais tu avais raison, les refresh n'ont pas l'air obligatoires . par contre j'ai un problème qui persiste, je n'arrive pas à ce que ma zone lstResult n'affiche que les champs filtrés par les listes déroulantes.

    je pense qu'il faut faire comme tu l'a dit, mettre .Requery . Pour le moment, j'ai inséré le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub liste_nom_AfterUpdate()
    lstResults.Requery
    End Sub
    Sur mise a jour de ma liste déroulante. Cela devrait normalement effectuer la requete filtre sur le sous formulaire non?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Conseil aux entreprises
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Conseil aux entreprises
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Je pense que cela devrait fonctionner. Je n'ai pas le temps de tester tout de suite, je regarderai cela ce soir.

    Tiens moi au courant si tu trouve avant moi.

    Cordialement.

    PME Diag

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Merci

    Je n'ai toujours pas trouvé, je ne vois pas ce qui cloche, maintenant ça m'affiche une fenetre qui me demande de rentrer l'ID stage quand je selectionne un liste déroulante... Par contre si je met OK sur ces deux fenêtre, ma zone de résultat affiche correctement ce que j'attends !
    ==> Plus d'info: lorsque je remplace la derniere ligne du code de la RefreshQuery par Me.Requery (en gros quand j'enleve le ".lstResults"), ça ne m'affiche qu'une fenetre "ID_stage"... bizarre bizarre ...

    Je te joins la liste, c'est le seul truc qui persiste à bloquer, sinon tout le reste marche! ça ouvre même un formulaire de modification sur double clic :p

    Merci beaucoup pour ton aide ! !

    Edit: autre problème, mon code filtre bien les champs en fonction des Noms et prenoms, mais pas du tout en fonction des dates :/
    Fichiers attachés Fichiers attachés

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Mon precedent message n'étant pas tres clair, je vais expliquer précisément ce qui ne va pas à l'heure actuelle.

    1. Lorsque je sélectionne un champs dans une des listes déroulantes de tri (Nom et Prenom), et même lorsque je coche la case faisant apparaître cette liste déroulante, une boite de dialogue s'affiche, me demandant de rentrer l'ID_Stage concerné (clef primaire). Par contre , si je ne rentre rien et que je met ok, une seconde boite s'ouvre.Si je met encore OK, ma zone de résultat affiche correctement les entrées filtrées.

    2. Mes zones de filtre de recherche au format date ne marchent pas du tout, alors que je pense avoir écrit le bon code (pour prendre en comptes toutes les entrées inférieures ou supérieur à une date).

    Voici mon code, je ne vois vraiment pas ce qui peut gêner ! (le code qui est censé avoir le rôle de renvoyer les résultat filtré est en rouge)

    Plus d'info sur mes noms de champs:
    • Zone de résultats de la recherche: lstResults
    • Case à cocher pour faire apparaitre la liste déroulante: Cocher9
    • Liste déroulante des noms : liste_nom
    • Zone de critere de recherche de type date: Txt_debut / Txt_fin


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Option Compare Database
    
    Private Sub Cocher11_Click()
    Me.Txt_fin.Visible = Not Me.Txt_fin.Visible
    RefreshQuery
    End Sub
    
    Private Sub Cocher13_Click()
    Me.txt_debut.Visible = Not Me.txt_debut.Visible
    RefreshQuery
    End Sub
    
    Private Sub Cocher15_Click()
    Me.Liste_prenom.Visible = Not Me.Liste_prenom.Visible
    RefreshQuery
    End Sub
    
    Private Sub Cocher9_Click()
       Me.liste_nom.Visible = Not Me.liste_nom.Visible
    RefreshQuery
    End Sub
    
    Private Sub liste_nom_BeforeUpdate(Cancel As Integer)
    
    RefreshQuery
    
    End Sub
    Private Sub Liste_prenom_BeforeUpdate(Cancel As Integer)
    
    RefreshQuery
    
    End Sub
    
    
    Private Sub RefreshQuery()
     Dim SQL As String
     Dim SQLWhere As String
    
     SQL = "SELECT ID_stages, Nom, Prenom, Date_debut, Date_fin FROM Stages Where Stages!ID_Stage > 0 "
     If Nz(Me.Cocher9, False) Then
        SQL = SQL & "And Stages!Nom = '" & Me.liste_nom & "' "
     End If
     If Nz(Me.Cocher15, False) Then
        SQL = SQL & "And Stages!Prenom = '" & Me.Liste_prenom & "' "
     End If
     If Nz(Me.Cocher13, False) Then
        SQL = SQL & "And Stages!Date_debut => '" & Me.txt_debut & "' "
     End If
     If Nz(Me.Cocher11, False) Then
        SQL = SQL & "And Stages!Date_fin =< '" & Me.Txt_fin & "' "
     End If
     
    
     SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     SQL = SQL & ";"
     Debug.Print SQL
     Me.lstResults.RowSource = SQL
     Me.lstResults.Requery
    
    End Sub
    
    Private Sub Form_Load()
    Dim ctl As Control
    
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
           
            Case "Lis"
                ctl.Value = -1
            Case "Coc"
                ctl.Value = -1
            Case "lbl"
                ctl.Caption = "- * - * -"
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
            Case "cmb"
                ctl.Visible = False
        End Select
    Next ctl
    
    Me.lstResults.RowSource = "SELECT ID_stages, Nom, Prenom, Date_debut, Date_fin FROM Stages;"
    Me.lstResults.Requery
    
    End Sub
    
    
    Private Sub lstResults_DblClick(Cancel As Integer)
       DoCmd.OpenForm "frm_Autostages", acNormal, , "[ID_stage] = " & Me.lstResults
    End Sub
    
    Private Sub Txt_debut_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    
    Private Sub Txt_fin_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    Merci d'avance pour votre regard expert :p

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Conseil aux entreprises
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Conseil aux entreprises
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Bonjour Rominou.

    Je suis désolé mais, là, je suis dépassé. Je ne maîtrise pas assez bien le code VBA pour te venir en aide. Je suis dérouté par la structure de ta BDD, il n'y a pas beaucoup de requêtes et énormément de formulaires, je ne suis pas habitué à cela.

    J'espère que quelqu'un de plus avancé que moi en connaissances Access pourra te venir en aide et t'aiguiller vers la solution à ton problème.

    Encore navré de ne pouvoir t'aider.

    Bon courage.

    Cordialement.

    PME Diag

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Pas de problème, tu m'as déjà beaucoup avancé, mais c'est possible que ma bdd ne soit pas bien construite, il faudrait peut être que je passe plus par des requêtes.

    Merci beaucoup du temps que tu m'as consacré en tout cas !


    Un dernier message pour confirmer aux personnes qui passent sur ce post que mon problème est toujours au même point(voir trois messages plus haut). (mon dernier message pouvait faire penser que c'était résolu).
    Je mettrai à jour avec la solution si je trouve, s'il manque des precisions, je peux les apporter !

    Edit: mon premier problème est réglé", mais le filtre par dates ne marche toujours pas...

    Merci d'avance!

Discussions similaires

  1. [Toutes versions] probleme formulaire recherche multi critère
    Par azur123 dans le forum IHM
    Réponses: 2
    Dernier message: 30/08/2012, 16h43
  2. Problème de formulaire recherche multi-critères
    Par CTRUX dans le forum VBA Access
    Réponses: 8
    Dernier message: 03/09/2008, 17h32
  3. Réponses: 3
    Dernier message: 15/01/2008, 14h59
  4. Réponses: 6
    Dernier message: 18/03/2007, 16h22
  5. Réponses: 6
    Dernier message: 28/06/2006, 15h01

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