A voir également:
- [VBA] OpenForm avec filtre et GROU BY
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Filtre teams - Accueil - Visio
- To be filled by o.e.m - Forum Windows
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba range avec variable ✓ - Forum VB / VBA
3 réponses
Bonjour,
Je ne me souviens plus exactement comment je me suis débrouillée pour résoudre ce programme, mais voici mon code ci dessous.
Au final ma requête est la suivante:
stSQL = "SELECT * FROM Contactos WHERE " & StSimpleCriteria & " GROUP BY [ID] ORDER BY [ID]"
Dis moi si ça t'aide sinon envoi moi un mail, il est possible que ça soit dans les propriétés du formulaire de restitution (mon access est en espagnol alors je t'enverrais des copies d'écran pour ne pas faire d'erreur de traduction)
Dans mon formulaire de critères de recherche, il y a plusieurs champs et un bouton CHERCHER
Lorsque je clique sur ce bouton, voilà le code que j'ai mis en place
' Prise en compte dans le filtre, uniquement des champs simples non null
' Ajout de la commande AND lorsque le filtre contient déjà un critère
' Pas de commande AND lorsque le filtre ne contient pas d'autre critère
' Le diplome étant le premier critère qui est vérifié pas besoin d'appeler la fonction Verif_And (voir code de la fonction à la fin en PS
Option Compare Database
Public StDocName As String
Public StSimpleCriteria As String
Public StFiltre As String
Public stSQL As String
Public StVar As String
Public Var2 As Variant
StDocName = "Resultado de busquedad"
´Correspond au formulaire de restitution des résultats
StSimpleCriteria = " "
StVar = " "
If IsNull(Me![Diplomas]) = False Then StSimpleCriteria = "[Diplomas]=" & Me![Diplomas]
' Vérifie si le candidat a déjà été descartado ou non
If Me![Descartado] <> "Tous" Then
If Me![Descartado] = "Oui" Then StVar = "[Descartado]= True" Else: StVar = "[Descartado]= False"
Else: StVar = " "
End If
Verif_And
'Vérifie su le candidat a déjà de l'expérience dans un cabinet de conseil
If Me![¿En consultoría?] <> "Tous" Then
If Me![¿En consultoría?] = "Oui" Then StVar = "[¿En consultoría?]= True" Else: StVar = "[¿En consultoría?]= False"
End If
Verif_And
' La réinitialisation de StVar est nécessaire pour pouvoir effectuer le test Verif_And correctement
StVar = " "
If IsNull(Me![Idioma 2]) = False Then StVar = "([Idioma 1]=" & Me![Idioma 2] & " OR [Idioma 2]= " & Me![Idioma 2] & " OR [Idioma 3]= " & Me![Idioma 2] & ")"
Verif_And
StVar = " "
If IsNull(Me![Nivel de Experiencia]) = False Then StVar = "[Nivel de experiencia]= " & Me![Nivel de Experiencia]
Verif_And
stSQL = "SELECT * FROM Contactos WHERE " & StSimpleCriteria & " GROUP BY [ID] ORDER BY [ID]"
If StSimpleCriteria <> " " Then
StVar2 = DCount("ID", "Contactos", StSimpleCriteria)
If StVar2 > 0 Then
MsgBox (StVar2 & " candidats trouvés avec les critères sélectionnés")
DoCmd.OpenForm StDocName
DoCmd.ApplyFilter stSQL
Else:
MsgBox ("Aucun candidat ne correspond à vos critères, veuillez faire une autre recherche")
Comando50_Click
End If
Else: MsgBox ("Veuillez indiquer vos critères de recherche")
End If
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------
La fonction Verif_And est très importante pour construire ma requête:
Sub Verif_And()
' Cette fonction permet de vérifier et de rajouter la commande AND lorsque le filtre contient déjà un critère
' Elle sera appelée à chaque fois qu'il faut ajouter un critère dans filtre
If StSimpleCriteria <> " " Then
If StVar <> " " Then StSimpleCriteria = StSimpleCriteria & " AND " & StVar
Else: If StVar <> " " Then StSimpleCriteria = StVar
End If
End Sub
Je ne me souviens plus exactement comment je me suis débrouillée pour résoudre ce programme, mais voici mon code ci dessous.
Au final ma requête est la suivante:
stSQL = "SELECT * FROM Contactos WHERE " & StSimpleCriteria & " GROUP BY [ID] ORDER BY [ID]"
Dis moi si ça t'aide sinon envoi moi un mail, il est possible que ça soit dans les propriétés du formulaire de restitution (mon access est en espagnol alors je t'enverrais des copies d'écran pour ne pas faire d'erreur de traduction)
Dans mon formulaire de critères de recherche, il y a plusieurs champs et un bouton CHERCHER
Lorsque je clique sur ce bouton, voilà le code que j'ai mis en place
' Prise en compte dans le filtre, uniquement des champs simples non null
' Ajout de la commande AND lorsque le filtre contient déjà un critère
' Pas de commande AND lorsque le filtre ne contient pas d'autre critère
' Le diplome étant le premier critère qui est vérifié pas besoin d'appeler la fonction Verif_And (voir code de la fonction à la fin en PS
Option Compare Database
Public StDocName As String
Public StSimpleCriteria As String
Public StFiltre As String
Public stSQL As String
Public StVar As String
Public Var2 As Variant
StDocName = "Resultado de busquedad"
´Correspond au formulaire de restitution des résultats
StSimpleCriteria = " "
StVar = " "
If IsNull(Me![Diplomas]) = False Then StSimpleCriteria = "[Diplomas]=" & Me![Diplomas]
' Vérifie si le candidat a déjà été descartado ou non
If Me![Descartado] <> "Tous" Then
If Me![Descartado] = "Oui" Then StVar = "[Descartado]= True" Else: StVar = "[Descartado]= False"
Else: StVar = " "
End If
Verif_And
'Vérifie su le candidat a déjà de l'expérience dans un cabinet de conseil
If Me![¿En consultoría?] <> "Tous" Then
If Me![¿En consultoría?] = "Oui" Then StVar = "[¿En consultoría?]= True" Else: StVar = "[¿En consultoría?]= False"
End If
Verif_And
' La réinitialisation de StVar est nécessaire pour pouvoir effectuer le test Verif_And correctement
StVar = " "
If IsNull(Me![Idioma 2]) = False Then StVar = "([Idioma 1]=" & Me![Idioma 2] & " OR [Idioma 2]= " & Me![Idioma 2] & " OR [Idioma 3]= " & Me![Idioma 2] & ")"
Verif_And
StVar = " "
If IsNull(Me![Nivel de Experiencia]) = False Then StVar = "[Nivel de experiencia]= " & Me![Nivel de Experiencia]
Verif_And
stSQL = "SELECT * FROM Contactos WHERE " & StSimpleCriteria & " GROUP BY [ID] ORDER BY [ID]"
If StSimpleCriteria <> " " Then
StVar2 = DCount("ID", "Contactos", StSimpleCriteria)
If StVar2 > 0 Then
MsgBox (StVar2 & " candidats trouvés avec les critères sélectionnés")
DoCmd.OpenForm StDocName
DoCmd.ApplyFilter stSQL
Else:
MsgBox ("Aucun candidat ne correspond à vos critères, veuillez faire une autre recherche")
Comando50_Click
End If
Else: MsgBox ("Veuillez indiquer vos critères de recherche")
End If
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------
La fonction Verif_And est très importante pour construire ma requête:
Sub Verif_And()
' Cette fonction permet de vérifier et de rajouter la commande AND lorsque le filtre contient déjà un critère
' Elle sera appelée à chaque fois qu'il faut ajouter un critère dans filtre
If StSimpleCriteria <> " " Then
If StVar <> " " Then StSimpleCriteria = StSimpleCriteria & " AND " & StVar
Else: If StVar <> " " Then StSimpleCriteria = StVar
End If
End Sub
je vois ce que tu veux dire mais j'ai l'impression que ma situation est un peu plus complexe, je m'explique :
j'ai une table cahier et une table feuille
chaque cahier peut contenir plusieurs feuilles
chaque feuille peut être de n'importe quelle couleur
grace a des cases a cocher, je choisis la(les) couleur(s) des feuilles qui m'interesse(nt)
ce sont les cahiers qui contiennent ces feuilles qui doivent être affichés
si un cahier contient une feuille jaune et une feuille rouge, ce cahier sera affiché deux fois et ainsi de suite...
je pensais regrouper par id_cahier mais j'ai peur que ma recherche ne prenne plus en compte la totalité des feuilles
qu'en pensez-vous?
Private Sub FiltrageParCouleur()
Dim sClauseWhere As String
sClauseWhere = "(CouleurParam = 'bidon'" ' cas qui n'existe pas, c'est juste pour le OR d'après
If chkRouge Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Rouge'"
End If
If chkJaune Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Jaune'"
End If
If chkVert Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Vert'"
End If
If chkBlanc Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Blanc'"
End If
sClauseWhere = sClauseWhere + ")"
DoCmd.ApplyFilter , sClauseWhere
Me.Refresh
End Sub
j'ai une table cahier et une table feuille
chaque cahier peut contenir plusieurs feuilles
chaque feuille peut être de n'importe quelle couleur
grace a des cases a cocher, je choisis la(les) couleur(s) des feuilles qui m'interesse(nt)
ce sont les cahiers qui contiennent ces feuilles qui doivent être affichés
si un cahier contient une feuille jaune et une feuille rouge, ce cahier sera affiché deux fois et ainsi de suite...
je pensais regrouper par id_cahier mais j'ai peur que ma recherche ne prenne plus en compte la totalité des feuilles
qu'en pensez-vous?
Private Sub FiltrageParCouleur()
Dim sClauseWhere As String
sClauseWhere = "(CouleurParam = 'bidon'" ' cas qui n'existe pas, c'est juste pour le OR d'après
If chkRouge Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Rouge'"
End If
If chkJaune Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Jaune'"
End If
If chkVert Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Vert'"
End If
If chkBlanc Then
sClauseWhere = sClauseWhere + " OR CouleurParam = 'Blanc'"
End If
sClauseWhere = sClauseWhere + ")"
DoCmd.ApplyFilter , sClauseWhere
Me.Refresh
End Sub