[VBA] OpenForm avec filtre et GROU BY

Fermé
mpom - 23 mai 2008 à 12:22
 manon - 28 juil. 2008 à 16:01
Bonjour,

Je travaille sur Access 2007 et je souhaite ouvrir un formulaire en appliquant un filtre et en regroupant mes entrées par ID

J'ai crée un premier formulaire qui me permet de sélectionner mes critères et un deuxième formulaire qui me permet de restituer mes résultats.

Grâce à une commande sur un bouton, je parviens à appliquer le filtre à mon formulaire de restitution mais mes résultats sont démultipliés à cause de l'utilisation des nouveaux champs de recherche Access 2007.

De façon simplifié, voici mon code

StDocName = "Contactos Consulta"
StSimpleCriteria = " "

If IsNull(Me![Diplomas]) = False Then StSimpleCriteria = "[Diplomas]=" & Me![Diplomas]
DoCmd.OpenForm StDocName, , , StSimpleCriteria

Si je choisis de modifier StSimpleCriteria en ajoutant à la fin GROUP BY [ID], Access me génère une erreur de compilation

J'ai aussi essayé de résoudre mon problème en créant toute une requête SQL

StFIltre = "SELECT [Diplomas], [ID] FROM [Contactos] WHERE " & StSimpleCriteria & " GROUP BY [ID]"
DoCmd.OpenForm StDocName
DoCmd.RunSQL (StFiltre)

Mais ça marche pas non plus

Est-ce que quelqu'un a une idée?

Merci de votre aide
A voir également:

3 réponses

salut!
j'ai le même problème que toi, as-tu trouvé une réponse?
0
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
0
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
0