Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 23h01   #1
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 12h19   #2
Candidat au titre de Membre du Club
 
Homme Aurélien Simon
Conseil aux entreprises
Inscription : juin 2011
Messages : 40
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Simon
Localisation : France, Cher (Centre)

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

Informations forums :
Inscription : juin 2011
Messages : 40
Points : 13
Points : 13
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
PMEDiag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h10   #3
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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 :
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.
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h36   #4
Candidat au titre de Membre du Club
 
Homme Aurélien Simon
Conseil aux entreprises
Inscription : juin 2011
Messages : 40
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Simon
Localisation : France, Cher (Centre)

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

Informations forums :
Inscription : juin 2011
Messages : 40
Points : 13
Points : 13
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 :
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
PMEDiag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h10   #5
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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 :
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?
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h49   #6
Candidat au titre de Membre du Club
 
Homme Aurélien Simon
Conseil aux entreprises
Inscription : juin 2011
Messages : 40
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Simon
Localisation : France, Cher (Centre)

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

Informations forums :
Inscription : juin 2011
Messages : 40
Points : 13
Points : 13
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
PMEDiag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h50   #7
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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
Type de fichier : zip C2Sproposition.zip (107,6 Ko, 11 affichages)
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h55   #8
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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 :
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
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 12h25   #9
Candidat au titre de Membre du Club
 
Homme Aurélien Simon
Conseil aux entreprises
Inscription : juin 2011
Messages : 40
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Simon
Localisation : France, Cher (Centre)

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

Informations forums :
Inscription : juin 2011
Messages : 40
Points : 13
Points : 13
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
PMEDiag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 13h22   #10
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 32
Points : 18
Points : 18
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!
Rominou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h43.


 
 
 
 
Partenaires

Hébergement Web