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 15/01/2012, 23h42   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 210
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : novembre 2007
Messages : 210
Points : 61
Points : 61
Envoyer un message via MSN à sebinator
Par défaut filtre sur sous formulaire comment faire ?

Bonjour

J'ai un formulaire qui contient un sous formulaire basé sur une requête.

j'ai une liste modifiable indépendante qui contient une liste de valeurs :

bleu, jaune, vert, rouge

sur cette liste modifiable, j'ai un évenement apres mise jour qui me lance la fonction de filtrage

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
Private Sub FiltrerEnrg()
Dim strFiltre As String 'déclare la variable
 
 
If (Not IsNull(LM_couleurs)) Then 'si la valeur de LM_couleurs n'est pas nulle
  strFiltre = "[Couleur]='" & LM_couleurs& "' and " 'alors la variable strFiltre prend la valeur sélectionnée et la concatène avec le mot clé AND par ex: 'Jaune' And
End If
 
If (strFiltre = "") Then  'si la variable strfiltre est vide
   Me.Req_sous_F_principal_sous_formulaire.Form.Filter = "" 'alors le contenu du filtre du sous formulaire est vidé
   Me.Req_sous_F_principal_sous_formulaire.Form.FilterOn = False 'le mode filtrage sur le sous formulaire est désactivé
 
Else 'sinon
   strFiltre = "(" & Left$(strFiltre, Len(strFiltre) - 5) & ")" 'Le contenu de la variable est mis en forme pour filtrer le sous formulaire
 
   Me.Req_sous_F_principal_sous_formulaire.Form.Filter = strFiltre ' passe la valeur au filtre du sous formulaire
 
Me.Req_sous_F_principal_sous_formulaire.Form.FilterOn = True 'active le filtrage
End If
End Sub
Mon problème est le suivant :

Je sais filtrer sur une couleur il n'y a pas de soucis par contre j'aimerai pouvoir filtrer les enregistrements avec deux couleurs, jaune et bleu par ex.

Je seche la dessus, toutes mes tentatives sont des echecs..

Je suis preneur de vos conseils et idées..

Merci d'avance

Seb
sebinator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 10h08   #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


Je te joins une petite base exemple qui peut être une piste de réflexion.

Bonne continuation
Fichiers attachés
Type de fichier : rar FiltrerSurChoixMultiples.rar (31,2 Ko, 9 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 16/01/2012, 23h23   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 210
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : novembre 2007
Messages : 210
Points : 61
Points : 61
Envoyer un message via MSN à sebinator
Merci,

Il y a de l'idée

Je vais étudier cela

seb
sebinator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 23h26   #4
Membre du Club
 
Inscription : novembre 2007
Messages : 210
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : novembre 2007
Messages : 210
Points : 61
Points : 61
Envoyer un message via MSN à sebinator
Effectivement la solution de passer la requete sql à la source du sous formulaire semble etre la solution.. surtout que ma requête fonctionne avec toute mes conditions.

sur l'evenement apres mise a jour de chacune de mes listes j'ai mis le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Private Sub LM_Nom_AfterUpdate()
Dim reqstr As String
reqstr = "SELECT Tb_contacts.CompanyName, Tb_contacts.LastName, Tb_contacts.FirstName, Tb_contacts.BusinessAddressCountry, Tb_contacts.BusinessTelephoneNumber, Tb_contacts.MobileTelephoneNumber, Tb_contacts.Email1Address, Tb_contacts.Type, Tb_contacts.VIPStatus, Tb_contacts.OWF, Tb_contacts.N°_contact, Tb_contacts.Zone_pays" _
& "FROM Tb_contacts" _
& "WHERE (((Tb_contacts.LastName) Like (IIf(IsNull([Formulaires]![F_principal]![LM_Nom])," * ",[Formulaires]![F_principal]![LM_Nom])))" _
& "AND ((Tb_contacts.BusinessAddressCountry) Like (IIf(IsNull([Formulaires]![F_principal]![LM_Pays])," * ",[Formulaires]![F_principal]![LM_Pays])))" _
& "AND ((Tb_contacts.Type) Like (IIf(IsNull([Formulaires]![F_principal]![LM_Type])," * ",[Formulaires]![F_principal]![LM_Type])))" _
& "AND ((Tb_contacts.VIPStatus) Like (IIf(IsNull([Formulaires]![F_principal]![LM_Status])," * ",[Formulaires]![F_principal]![LM_Status]))" _
& "Or (Tb_contacts.VIPStatus) Like (IIf(IsNull([Formulaires]![F_principal]![LM_status2])," * ",[formulaires]![F_principal]![LM_status2])))" _
& "AND ((Tb_contacts.OWF) Like (IIf(IsNull([Formulaires]![F_principal]![LM_OWF])," * ",[Formulaires]![F_principal]![LM_OWF])))" _
& "AND ((Tb_contacts.Zone_pays) Like (IIf(IsNull([Formulaires]![F_principal]![LM_Zone])," * ",[Formulaires]![F_principal]![LM_Zone]))));"
 
Me.Req_sous_F_principal_sous_formulaire.Form.RecordSource = reqstr
Me.Req_sous_F_principal_sous_formulaire.Requery
End Sub
Le probleme c'est que j'obtiens une erreur d'execution 13 : incompatibilité de type.. pourtant tout est du texte

je me suis planté où ?
sebinator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 09h09   #5
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


Regarde du coté de ces deux tutos. On y parle de sous-formulaire lié à des listes déroulantes :

Recherches multicritères

Les listes multifonctions

Bonne lecture
__________________
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, 11h07   #6
Membre du Club
 
Inscription : novembre 2007
Messages : 210
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : novembre 2007
Messages : 210
Points : 61
Points : 61
Envoyer un message via MSN à sebinator
Merci, je vais regarder ca

Mais pourquoi j'obtiens une erreur d'execution 13 - incompatibilité de type ?

Sur le fond cela devrait fonctionner...

seb
sebinator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 07h37   #7
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 crois qu'il y a un petit problème de quotes dans ta syntaxe.
Je te joins une petite base qui utilise le même type de syntaxe :

Code VBA :
l_strSql = "SELECT T_Employes.CodeEmploye, T_Employes.NomEmploye FROM T_Employes WHERE NomEmploye Like '" & m_strChaine & "*'"

La liste des noms se met à jour au fur et à mesure de la saisie de l'élément recherché.

Bonne continuation
Fichiers attachés
Type de fichier : rar SelectionListe.rar (24,3 Ko, 8 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 22/01/2012, 11h48   #8
Membre du Club
 
Inscription : novembre 2007
Messages : 210
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : novembre 2007
Messages : 210
Points : 61
Points : 61
Envoyer un message via MSN à sebinator
merci cela m'aide bien.. le code commence à fonctionner


Par contre j'ai de grosses lacunes en sql et je n'arrive pas à passer une condition dans ma clause where...

j'ai besoin que si l'une des listes modifiables est vide, l'argument * soit pris en compte pour que cela prenne en compte tous les enregistrements.

j'ai trouvé cette syntaxe "(iif(isnull(...." qui fonctionne quand je la passe comme critère dans une requête mais pas quand la place derriere la clause where :

Code :
1
2
3
 
 
... WHERE Tb_contacts.[LastName] like (IIf(IsNull([Formulaires]![F_principal]![LM_Nom])," * ",[Formulaires]![F_principal]![LM_Nom]))" _
C'est quoi qui coince ?
sebinator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 07h39   #9
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 pourrais trouver un exemple à peu près similaire dans le tuto sur le formulaire de recherche multicritères dans le tableau situé juste au dessus du paragraphe III-A-2-b.

Sinon, en corrigeant ta syntaxe comme ci-dessous, cela devrait passer :

Code SQL :
... WHERE IIf(IsNull([Formulaires]![F_principal]![LM_Nom]),[Tb_contacts].[LastName],[Formulaires]![F_principal]![LM_Nom])

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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h02.


 
 
 
 
Partenaires

Hébergement Web