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 11/01/2012, 09h42   #1
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Par défaut Filtrer formulaire avec case à cocher

Bonjour,

J'ai un formulaire dont un des champs "Status" peut contenir une des valeurs suivantes :

A
B
C

J'ai trois cases à cocher indépendantes par lesquelles j'aimerais filtrer les enregistrements de mon formulaire "frm_ openamounts" par rapport au champ "Status".

CocherA
CocherB
CocherC

Voici la source de mon formulaire :

Code :
1
2
SELECT tbl_openamounts.ID, tbl_openamounts.[Customer], tbl_openamounts.[Contract], tbl_openamounts.[Status]
FROM tbl_openamounts;
La valeur par défaut de ces caches à cocher est Vrai.

J'aimerais si je décoche par exemple la case à cocher "CocherA" que les enregistrements contenant A dans le champ "Status" n'apparaissent pas.
Idem si je décoche 2 ou les 3 cases à cocher.

Merci de m'aider svp.
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 09h58   #2
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Tu peux retrouver des situations similaires dans les tutos sur les recherches multicritères

Bonne continuation
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 10h02   #3
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Jeannot45 Voir le message


Tu peux retrouver des situations similaires dans les tutos sur les recherches multicritères

Bonne continuation
J'ai déjà été voir les tutos.
Je m'y suis d'ailleurs inspiré pour filter ce même formulaire par une zone de liste déroulante sur un autre champ.
Par contre, en ce qui concerne les cases à cocher je sèche vraiment.
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 12h35   #4
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonjour,

voici ce que je ferais : je créerai une procédure qui me crée automatiquement un filtre en fonction des valeurs de mes 3 cases à cocher. Puis j'activerai ce filtre à chaque fois qu'on clique sur mes cases à cocher.

Voici le code que j'utiliserai pour la procédure générant le filtre. Je ne l'ai pas testée mais ça devrait fonctionner.

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
 
Private Sub filtre_sur_Case_a_Cocher()
 
    Dim filtre As String
 
    filtre = ""
    If Me![CocherA] Then
        filtre = filtre & " OR ([Status] = 'A')"
    End If
    If Me![CocherB] Then
        filtre = filtre & " OR ([Status] = 'B')"
    End If
    If Me![CocherC] Then
        filtre = filtre & " OR ([Status] = 'C')"
    End If
    If Len(filtre) > 0 Then
        filtre = Mid$(filtre, 4, Len(filtre) - 3)
    Else
        filtre = "[Status] = 'Aucun des trois'"
    End If
    Me.Filter = filtre
    Me.FilterOn = True
 
End Sub
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 14h17   #5
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Aegnor Voir le message
Bonjour,

voici ce que je ferais : je créerai une procédure qui me crée automatiquement un filtre en fonction des valeurs de mes 3 cases à cocher. Puis j'activerai ce filtre à chaque fois qu'on clique sur mes cases à cocher.

Voici le code que j'utiliserai pour la procédure générant le filtre. Je ne l'ai pas testée mais ça devrait fonctionner.

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
 
Private Sub filtre_sur_Case_a_Cocher()
 
    Dim filtre As String
 
    filtre = ""
    If Me![CocherA] Then
        filtre = filtre & " OR ([Status] = 'A')"
    End If
    If Me![CocherB] Then
        filtre = filtre & " OR ([Status] = 'B')"
    End If
    If Me![CocherC] Then
        filtre = filtre & " OR ([Status] = 'C')"
    End If
    If Len(filtre) > 0 Then
        filtre = Mid$(filtre, 4, Len(filtre) - 3)
    Else
        filtre = "[Status] = 'Aucun des trois'"
    End If
    Me.Filter = filtre
    Me.FilterOn = True
 
End Sub

Bon cela ne marche pas, lorsque je click sur une des cases à cocher, il me met :

Erreur d'exécution '94':
Utilisation incorrecte de Null

Lorsque je click sur débogage, il me colore en jaune la ligne une des lignes If Me![...] Then

Suite à ton code, j'ai procédé comme suit :

Dans mon formulaire, il y a 10 cases à cocher en fait.

J'ai inséré ce code dans mon formulaire :

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
Private Sub filtre_sur_Case_a_Cocher()
 
Dim filtre As String
 
    filtre = ""
    If Me![CocherA025] Then
        filtre = filtre & " OR ([Contract status code] = 'A025')"
    End If
 
    If Me![CocherA030] Then
        filtre = filtre & " OR ([Contract status code] = 'A030')"
    End If
 
    If Me![CocherA031] Then
        filtre = filtre & " OR ([Contract status code] = 'A031')"
    End If
 
    If Me![CocherA033] Then
        filtre = filtre & " OR ([Contract status code] = 'A033')"
    End If
 
    If Me![CocherA036] Then
        filtre = filtre & " OR ([Contract status code] = 'A036')"
    End If
 
    If Me![CocherA039] Then
        filtre = filtre & " OR ([Contract status code] = 'A039')"
    End If
 
    If Me![CocherA040] Then
        filtre = filtre & " OR ([Contract status code] = 'A040')"
    End If
 
    If Me![CocherA041] Then
        filtre = filtre & " OR ([Contract status code] = 'A041')"
    End If
 
    If Me![CocherA042] Then
        filtre = filtre & " OR ([Contract status code] = 'A042')"
    End If
 
    If Me![CocherA999] Then
        filtre = filtre & " OR ([Contract status code] = 'A999')"
    End If
 
    If Len(filtre) > 0 Then
        filtre = Mid$(filtre, 11, Len(filtre) - 10)
    Else
        filtre = "[Contract status code] = 'Aucun des dix'"
    End If
 
    Me.Filter = filtre
    Me.FilterOn = True
End Sub
Et sur le click de chaque cases à cocher, j'ai inséré le code suivant :

Code :
1
2
3
Private Sub CocherA025_Click()
filtre_sur_Case_a_Cocher
End Sub
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 08h19   #6
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Je te joins une petite base exemple qui utilise te montre comment j'ai implanté la gestion de tes cases à cocher.

Je passe par la modification du recordSource du formulaire.

Bonne continuation
Fichiers attachés
Type de fichier : rar Filtrer.rar (36,8 Ko, 11 affichages)
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h12   #7
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Jeannot45 Voir le message


Je te joins une petite base exemple qui utilise te montre comment j'ai implanté la gestion de tes cases à cocher.

Je passe par la modification du recordSource du formulaire.

Bonne continuation
Merci Jeannot45
mais pourrais-tu m'envoyer la base sous format .mdb
il m'est impossible de faire la conversion ici au boulot ou d'avoir access 2007
Bien à toi,
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 11h17   #8
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Citation:
Envoyé par lucas-18 Voir le message
Bon cela ne marche pas, lorsque je click sur une des cases à cocher, il me met :

Erreur d'exécution '94':
Utilisation incorrecte de Null

Lorsque je click sur débogage, il me colore en jaune la ligne une des lignes If Me![...] Then
Bonjour,

en fait, je suppose que votre case à cocher n'a pas de valeur initiale (elle est donc à null), ce qui déclenche en effet ce type d'erreur.
Pour résoudre ce problème, affectez une valeur par défaut (true ou false suivant vos besoins) aux cases à cocher.

Cordialement,
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 12h00   #9
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Aegnor Voir le message
Bonjour,

en fait, je suppose que votre case à cocher n'a pas de valeur initiale (elle est donc à null), ce qui déclenche en effet ce type d'erreur.
Pour résoudre ce problème, affectez une valeur par défaut (true ou false suivant vos besoins) aux cases à cocher.

Cordialement,
J'ai affecté une valeur par défaut et j'obtiens ce message (qui était aussi présent lorsqu'il n'y avait pas de valeur par défaut) :

Erreur d'exécution '3075':

Erreur de syntaxe (opérateur absent) dans l'expression 'ract status code] = 'A025') OR ([Contract stuatus code] = 'A030') etc ...


Cela me surligne en jaune : Me.Filter = filtre
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h12   #10
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Je te joins la base convertie en mdb. Erreur de ma part.
Tu trouveras dans cette base deux formulaires :
1 qui est basé sur un groupe d'options ce qui fait que tu ne peux choisir qu'une seule valeur.
le second utilisant des cases à cocher indépendantes. ce qui te permet de sélectionner une ou plusieurs valeurs.
Etudie le code et revient si tu as des questions.

Bonne continuation
Fichiers attachés
Type de fichier : rar Filtres.rar (35,3 Ko, 13 affichages)
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 16h32   #11
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Citation:
Envoyé par lucas-18 Voir le message
J'ai affecté une valeur par défaut et j'obtiens ce message (qui était aussi présent lorsqu'il n'y avait pas de valeur par défaut) :

Erreur d'exécution '3075':

Erreur de syntaxe (opérateur absent) dans l'expression 'ract status code] = 'A025') OR ([Contract stuatus code] = 'A030') etc ...


Cela me surligne en jaune : Me.Filter = filtre
Ca y est j'ai compris. Le problème vient de la ligne 47 :
Code :
filtre = Mid$(filtre, 11, Len(filtre) - 10)
Il fallait laisser ma ligne d'origine :
Code :
1
2
 
filtre = Mid$(filtre, 4, Len(filtre) - 3)
En effet les chiffres 4 et 3 n'ont rien à voir avec le nombre de cases à cocher dans votre formulaire.
L'instruction Mid permet d'extraire une chaine de caractères à l'intérieur d'une autre chaine. Ici, en l'occurrence, je souhaitais enlever le début de la chaine pour le filtre (ie, supprimer " OR").
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 10h53   #12
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Aegnor Voir le message
Ca y est j'ai compris. Le problème vient de la ligne 47 :
Code :
filtre = Mid$(filtre, 11, Len(filtre) - 10)
Il fallait laisser ma ligne d'origine :
Code :
1
2
 
filtre = Mid$(filtre, 4, Len(filtre) - 3)
En effet les chiffres 4 et 3 n'ont rien à voir avec le nombre de cases à cocher dans votre formulaire.
L'instruction Mid permet d'extraire une chaine de caractères à l'intérieur d'une autre chaine. Ici, en l'occurrence, je souhaitais enlever le début de la chaine pour le filtre (ie, supprimer " OR").
Super !!! merci de ton aide Aegnor.
Mais j'ai encore un souci ...
J'ai une autre méthode de filtre avec une zone de liste déroulante qui me permet de filtrer un champ nommé "Invoice addressee name".

Contenu de cette zone de liste déroulante :
Code :
1
2
3
4
SELECT tbl_openamounts.[Invoice addressee name], tbl_openamounts.[Invoice addressee ID], tbl_openamounts.[Customer ID]
FROM tbl_openamounts
GROUP BY tbl_openamounts.[Invoice addressee name], tbl_openamounts.[Invoice addressee ID], tbl_openamounts.[Customer ID]
HAVING (((tbl_openamounts.[Customer ID])=[Forms].[frm_openamounts]![Customer ID]));
Evènement :
Code :
1
2
3
4
Private Sub Modifiable2_AfterUpdate()
Me.Filter = "[Invoice addressee name]='" & Modifiable2 & "'"
Me.FilterOn = True
End Sub
Les 2 méthodes de filtre par zone de liste déroulante et par cases à cocher fonctionnenent parfaitement indépendemment l'une de l'autre mais j'aimerais en fait que lorsque je choissise une des valeurs du champ "Invoice addressee name" et que lorsque je click sur une des cases à cocher, il me garde les enregistrements que j'ai eu après avoir fait ma selection dans ma zone de liste déroulante.
Parce que là en clickant sur ma case à cocher, il me remet tous les enregistrements hormis ceux en relation avec ma case à cocher.
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 15h37   #13
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Dois-je pour garder le résultat du filtre précédent, le mémoriser dans une autre table ?
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h38   #14
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
J'ai mis ma base en copie. Si qqun pourrait m'aider à solutionner les problèmes suivants, ca serait gentil pcq ca fait des jours que je suis penché sur ce formulaire sans trouver de solution :

- ajouter TOUS à ma zone de liste déroulante Modifiable2
- conservation des résultats de filtre avant d'effectuer un autre filtre pcq là à chaque fois que j'effectue un autre filtre, le résultat de ma requête liée au sous formulaire apparait.

Merci d'avance,
Fichiers attachés
Type de fichier : zip bd1.zip (165,5 Ko, 4 affichages)
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 09h01   #15
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Pour ajouter la mention "TOUS" dans une liste, il te suffit de consulter la
Ajouter TOUS dans une liste déroulante

Quant au deuxième problème, je ne comprends pas
Veux-tu parler du dysfonctionnement du filtre quand tu "joues" avec les cases à cocher ?
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 10h06   #16
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Jeannot45 Voir le message


Pour ajouter la mention "TOUS" dans une liste, il te suffit de consulter la
Ajouter TOUS dans une liste déroulante

Quant au deuxième problème, je ne comprends pas
Veux-tu parler du dysfonctionnement du filtre quand tu "joues" avec les cases à cocher ?
J'ai déjà consulté le FAQ et plusieurs posts mais je ne suis pas arriver à construire ma requête. Je vais encore tenter ...

Pour le 2ème problème, les cases à cocher fonctionnent (CocherA025, COcherA030, ...) mais lorsque je click sur une valeur de ma liste déroulante je voudrais garder le résultat de cette requête lorsque je click sur une des cases à cocher (CocherA025, COcherA030, ...). Parce que là, si je choisis une valeur de ma liste déroulante et que je click sur une case à cocher il me remet tous les enregistrements.
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 16h29   #17
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
J'ai réussi à ajouter Tous à ma liste déroulante mais il subsiste un problème.

Code :
1
2
3
4
5
SELECT DISTINCT  tbl_openamounts.[Invoice addressee name], tbl_openamounts.[Invoice addressee ID] AS [Invoice addressee ID], 0 AS Position
FROM  tbl_openamounts 
UNION SELECT DISTINCT "-Tous-" AS Tous, "" AS Position, "" AS OrdreTi
FROM  tbl_openamounts
ORDER BY Position;
Je dois pointer sur le champ "Customer ID" du formulaire pour que ma liste déroulante n'affiche que les enregistrements en question. Parce que là, elle m'affiche tous les enregistrements.

Ma requête initiale le faisait bien avec la partie du code :

Code :
HAVING (((tbl_openamounts.[Customer ID])=[Forms].[frm_openamounts]![Customer ID]));
Merci de m'aider svp
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 08h22   #18
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Je pense que pour "cumuler" plusieurs filtres il te faut utiliser une zone de liste avec sélection multiple et non une liste déroulante.
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 09h27   #19
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Je te joins une base qui te répond je crois à ton souci.
Tu retrouveras dans celle-ci le principe de filtrage que je t'avais exposé dans l'exemple que j'avais mis en pièce jointe un peu plus haut.

J'ai documenté le code.

Bonne continuation
Fichiers attachés
Type de fichier : rar bdNew.rar (30,9 Ko, 16 affichages)
__________________
Jeannot

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

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 09h48   #20
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Citation:
Envoyé par Jeannot45 Voir le message


Je te joins une base qui te répond je crois à ton souci.
Tu retrouveras dans celle-ci le principe de filtrage que je t'avais exposé dans l'exemple que j'avais mis en pièce jointe un peu plus haut.

J'ai documenté le code.

Bonne continuation
Ca répond totalement à mon souci tu veux dire !!!
Un tout grand merci pour le temps que tu as consacré
Je vais analyser çà pour comprendre
lucas-18 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 22h46.


 
 
 
 
Partenaires

Hébergement Web