requete multictritère en VBA : Elément non trouvé dans cette collection. (3265)
2 réponses
Eric Brue
Bonjour
Lorsque je fournis mes paramètres en VBA pour une chaine de requetes
multicritères, le code plante lorsque il atteint le 2ème paramètre d'un même
champ de la même requête (OR).
ça affiche: "Elément non trouvé dans cette collection.".
Si quelqu'un a une solution... merci d'avance
Eric
Pour les courageux:
*******une des requêtes en SQL*****
SELECT Patients.[N° patient], MotsClésPatient.[Mot clé]
FROM Patients LEFT JOIN MotsClésPatient ON Patients.[N° patient] =
MotsClésPatient.[N° Patient]
WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR ((([MCS1]) Is Null)) OR
(((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot
clé])="MCS3"));
*******Le code VBA qui lui fournit les paramètres et qui plante************
Sub AjouterSelections()
'Procédure utilisée dans le formulaire "RequêtePatients" et
"RequêteAdresses"
'Procédure qui permet d'attribuer la valeur True à tous les champs
"Selection" de la table "Contacts" dont
'l'enregistrement a été trié par l'enchaînement des requêtes de recherche
multicritères
'l'enchaînement des requêtes (basées sur la même table et contenant des
regroupements) fait que la
'requête finale ("PatientsRequête8") n'est pas modifiable (lecture seule)
donc inutilisable comme source d'un formulaire dont
'les données doivent être modifiables.
' POUR CONTOURNER CE PROBLEME :
'On ouvre un recordset (rs) basé sur la requête "PatientsRequête8" (aprés
avoir fourni les paramètres)
'On fait défiler les enregistrement du recordset ds une boucle
'à chaque enregistrement, on met à jour la table Patients (champ [selection]
= -1 pour le patient = rs![N° Patient]
'On ouvrira le formulaire avec la table comme source et le filtre "Selection
= True"
'tous les champs "selection" de la table seront mis à false sur fermeture du
formulaire ou nouvelle recherche
Dim formRecherche As Form, formAdresse As Form
Dim db As DAO.Database
Dim rs As Recordset 'Recordset basé sur la requête en lecture seule
Dim qdf As QueryDef 'La Requête
Set formRecherche = Forms![RequêtePatients]
Set db = CurrentDb()
Set qdf = db.QueryDefs("PatientsRequête8")
qdf("MCS1") = formRecherche!MCS1
'ça plante là à MCS2 et idem pour toutes les requêtes de ce type
qdf("MCS2") = formRecherche!
qdf("MCS3") = formRecherche!MCS3
qdf("Nbre") = formRecherche!Nbre
qdf("Nsans") = formRecherche!Nsans
qdf("DateDebut") = formRecherche!DateDebut
qdf("DateFin") = formRecherche!DateFin
qdf("Chirurgiens") = formRecherche!Chirurgiens
qdf("CritèreInterventions") = formRecherche!CritèreInterventions
qdf("Hopitaux") = formRecherche!Hopitaux
qdf("Correspondants") = formRecherche!Correspondants
Set rs = qdf.OpenRecordset()
Do While Not rs.EOF
CurrentDb.Execute ("update Patients set Selection=-1 where [N°
patient] = " & rs![N° patient])
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
qdf.Close
Set qdf = Nothing
db.Close
Set db = Nothing
Set formRecherche = Nothing
Set formAdresse = Nothing
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Charles ERNST
MCS1 est un cahmp de votre table ? Vous êtes sûr que ce ne doit pas être : WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot clé]) Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
"Eric Brue" a écrit dans le message de news: O6r1XLe%
Bonjour
Lorsque je fournis mes paramètres en VBA pour une chaine de requetes multicritères, le code plante lorsque il atteint le 2ème paramètre d'un même champ de la même requête (OR). ça affiche: "Elément non trouvé dans cette collection.". Si quelqu'un a une solution... merci d'avance Eric
Pour les courageux: *******une des requêtes en SQL***** SELECT Patients.[N° patient], MotsClésPatient.[Mot clé] FROM Patients LEFT JOIN MotsClésPatient ON Patients.[N° patient] > MotsClésPatient.[N° Patient] WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR ((([MCS1]) Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
*******Le code VBA qui lui fournit les paramètres et qui plante************
Sub AjouterSelections()
'Procédure utilisée dans le formulaire "RequêtePatients" et "RequêteAdresses" 'Procédure qui permet d'attribuer la valeur True à tous les champs "Selection" de la table "Contacts" dont 'l'enregistrement a été trié par l'enchaînement des requêtes de recherche multicritères
'l'enchaînement des requêtes (basées sur la même table et contenant des regroupements) fait que la 'requête finale ("PatientsRequête8") n'est pas modifiable (lecture seule) donc inutilisable comme source d'un formulaire dont 'les données doivent être modifiables. ' POUR CONTOURNER CE PROBLEME : 'On ouvre un recordset (rs) basé sur la requête "PatientsRequête8" (aprés avoir fourni les paramètres) 'On fait défiler les enregistrement du recordset ds une boucle 'à chaque enregistrement, on met à jour la table Patients (champ [selection] = -1 pour le patient = rs![N° Patient] 'On ouvrira le formulaire avec la table comme source et le filtre "Selection = True" 'tous les champs "selection" de la table seront mis à false sur fermeture du formulaire ou nouvelle recherche
Dim formRecherche As Form, formAdresse As Form Dim db As DAO.Database Dim rs As Recordset 'Recordset basé sur la requête en lecture seule Dim qdf As QueryDef 'La Requête
Set formRecherche = Forms![RequêtePatients] Set db = CurrentDb() Set qdf = db.QueryDefs("PatientsRequête8")
qdf("MCS1") = formRecherche!MCS1 'ça plante là à MCS2 et idem pour toutes les requêtes de ce type qdf("MCS2") = formRecherche! qdf("MCS3") = formRecherche!MCS3 qdf("Nbre") = formRecherche!Nbre qdf("Nsans") = formRecherche!Nsans qdf("DateDebut") = formRecherche!DateDebut qdf("DateFin") = formRecherche!DateFin qdf("Chirurgiens") = formRecherche!Chirurgiens qdf("CritèreInterventions") = formRecherche!CritèreInterventions qdf("Hopitaux") = formRecherche!Hopitaux qdf("Correspondants") = formRecherche!Correspondants
Set rs = qdf.OpenRecordset() Do While Not rs.EOF CurrentDb.Execute ("update Patients set Selection=-1 where [N° patient] = " & rs![N° patient]) rs.MoveNext Loop
rs.Close Set rs = Nothing qdf.Close Set qdf = Nothing db.Close Set db = Nothing Set formRecherche = Nothing Set formAdresse = Nothing
End Sub
MCS1 est un cahmp de votre table ?
Vous êtes sûr que ce ne doit pas être :
WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot clé])
Is Null)) OR
(((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot
clé])="MCS3"));
"Eric Brue" <eric.brue@alussinan.org> a écrit dans le message de news:
O6r1XLe%23FHA.4004@TK2MSFTNGP14.phx.gbl...
Bonjour
Lorsque je fournis mes paramètres en VBA pour une chaine de requetes
multicritères, le code plante lorsque il atteint le 2ème paramètre d'un
même
champ de la même requête (OR).
ça affiche: "Elément non trouvé dans cette collection.".
Si quelqu'un a une solution... merci d'avance
Eric
Pour les courageux:
*******une des requêtes en SQL*****
SELECT Patients.[N° patient], MotsClésPatient.[Mot clé]
FROM Patients LEFT JOIN MotsClésPatient ON Patients.[N° patient] > MotsClésPatient.[N° Patient]
WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR ((([MCS1]) Is Null)) OR
(((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot
clé])="MCS3"));
*******Le code VBA qui lui fournit les paramètres et qui
plante************
Sub AjouterSelections()
'Procédure utilisée dans le formulaire "RequêtePatients" et
"RequêteAdresses"
'Procédure qui permet d'attribuer la valeur True à tous les champs
"Selection" de la table "Contacts" dont
'l'enregistrement a été trié par l'enchaînement des requêtes de recherche
multicritères
'l'enchaînement des requêtes (basées sur la même table et contenant des
regroupements) fait que la
'requête finale ("PatientsRequête8") n'est pas modifiable (lecture seule)
donc inutilisable comme source d'un formulaire dont
'les données doivent être modifiables.
' POUR CONTOURNER CE PROBLEME :
'On ouvre un recordset (rs) basé sur la requête "PatientsRequête8" (aprés
avoir fourni les paramètres)
'On fait défiler les enregistrement du recordset ds une boucle
'à chaque enregistrement, on met à jour la table Patients (champ
[selection]
= -1 pour le patient = rs![N° Patient]
'On ouvrira le formulaire avec la table comme source et le filtre
"Selection
= True"
'tous les champs "selection" de la table seront mis à false sur fermeture
du
formulaire ou nouvelle recherche
Dim formRecherche As Form, formAdresse As Form
Dim db As DAO.Database
Dim rs As Recordset 'Recordset basé sur la requête en lecture seule
Dim qdf As QueryDef 'La Requête
Set formRecherche = Forms![RequêtePatients]
Set db = CurrentDb()
Set qdf = db.QueryDefs("PatientsRequête8")
qdf("MCS1") = formRecherche!MCS1
'ça plante là à MCS2 et idem pour toutes les requêtes de ce type
qdf("MCS2") = formRecherche!
qdf("MCS3") = formRecherche!MCS3
qdf("Nbre") = formRecherche!Nbre
qdf("Nsans") = formRecherche!Nsans
qdf("DateDebut") = formRecherche!DateDebut
qdf("DateFin") = formRecherche!DateFin
qdf("Chirurgiens") = formRecherche!Chirurgiens
qdf("CritèreInterventions") = formRecherche!CritèreInterventions
qdf("Hopitaux") = formRecherche!Hopitaux
qdf("Correspondants") = formRecherche!Correspondants
Set rs = qdf.OpenRecordset()
Do While Not rs.EOF
CurrentDb.Execute ("update Patients set Selection=-1 where [N°
patient] = " & rs![N° patient])
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
qdf.Close
Set qdf = Nothing
db.Close
Set db = Nothing
Set formRecherche = Nothing
Set formAdresse = Nothing
MCS1 est un cahmp de votre table ? Vous êtes sûr que ce ne doit pas être : WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot clé]) Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
"Eric Brue" a écrit dans le message de news: O6r1XLe%
Bonjour
Lorsque je fournis mes paramètres en VBA pour une chaine de requetes multicritères, le code plante lorsque il atteint le 2ème paramètre d'un même champ de la même requête (OR). ça affiche: "Elément non trouvé dans cette collection.". Si quelqu'un a une solution... merci d'avance Eric
Pour les courageux: *******une des requêtes en SQL***** SELECT Patients.[N° patient], MotsClésPatient.[Mot clé] FROM Patients LEFT JOIN MotsClésPatient ON Patients.[N° patient] > MotsClésPatient.[N° Patient] WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR ((([MCS1]) Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
*******Le code VBA qui lui fournit les paramètres et qui plante************
Sub AjouterSelections()
'Procédure utilisée dans le formulaire "RequêtePatients" et "RequêteAdresses" 'Procédure qui permet d'attribuer la valeur True à tous les champs "Selection" de la table "Contacts" dont 'l'enregistrement a été trié par l'enchaînement des requêtes de recherche multicritères
'l'enchaînement des requêtes (basées sur la même table et contenant des regroupements) fait que la 'requête finale ("PatientsRequête8") n'est pas modifiable (lecture seule) donc inutilisable comme source d'un formulaire dont 'les données doivent être modifiables. ' POUR CONTOURNER CE PROBLEME : 'On ouvre un recordset (rs) basé sur la requête "PatientsRequête8" (aprés avoir fourni les paramètres) 'On fait défiler les enregistrement du recordset ds une boucle 'à chaque enregistrement, on met à jour la table Patients (champ [selection] = -1 pour le patient = rs![N° Patient] 'On ouvrira le formulaire avec la table comme source et le filtre "Selection = True" 'tous les champs "selection" de la table seront mis à false sur fermeture du formulaire ou nouvelle recherche
Dim formRecherche As Form, formAdresse As Form Dim db As DAO.Database Dim rs As Recordset 'Recordset basé sur la requête en lecture seule Dim qdf As QueryDef 'La Requête
Set formRecherche = Forms![RequêtePatients] Set db = CurrentDb() Set qdf = db.QueryDefs("PatientsRequête8")
qdf("MCS1") = formRecherche!MCS1 'ça plante là à MCS2 et idem pour toutes les requêtes de ce type qdf("MCS2") = formRecherche! qdf("MCS3") = formRecherche!MCS3 qdf("Nbre") = formRecherche!Nbre qdf("Nsans") = formRecherche!Nsans qdf("DateDebut") = formRecherche!DateDebut qdf("DateFin") = formRecherche!DateFin qdf("Chirurgiens") = formRecherche!Chirurgiens qdf("CritèreInterventions") = formRecherche!CritèreInterventions qdf("Hopitaux") = formRecherche!Hopitaux qdf("Correspondants") = formRecherche!Correspondants
Set rs = qdf.OpenRecordset() Do While Not rs.EOF CurrentDb.Execute ("update Patients set Selection=-1 where [N° patient] = " & rs![N° patient]) rs.MoveNext Loop
rs.Close Set rs = Nothing qdf.Close Set qdf = Nothing db.Close Set db = Nothing Set formRecherche = Nothing Set formAdresse = Nothing
End Sub
Eric Brue
MCS1 est un cahmp de votre table ? Vous êtes sûr que ce ne doit pas être : WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot clé])
Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
Non, le problème n'est pas dans l'expression de la requête (je n'ai fait que
copier le code SQL de la requête affiché en mode SQL.
MCS1 ...etc sont des critères. Auparavant pour tester la requête les critères étaient forms!recherchePatient!MCS1 Maintenat j'ai mis MCS1 pour simplifier le code VBA. La requête fonctionne bien. Mon pb c'est d'exprimer les critères en VBA avant d'ouvrir la requête finale issue d'une suite de requetes diverses. Mon code vba fonctionne sauf pour les critères de ce type (plusieurs critères les uns sous les autres dans une même requête). Merci si vous avez une idée... Eric
MCS1 est un cahmp de votre table ?
Vous êtes sûr que ce ne doit pas être :
WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot
clé])
Is Null)) OR
(((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot
clé])="MCS3"));
Non, le problème n'est pas dans l'expression de la requête (je n'ai fait que
copier le code SQL de la requête affiché en mode SQL.
MCS1 ...etc sont des critères. Auparavant pour tester la requête les
critères étaient forms!recherchePatient!MCS1 Maintenat j'ai mis MCS1 pour
simplifier le code VBA.
La requête fonctionne bien. Mon pb c'est d'exprimer les critères en VBA
avant d'ouvrir la requête finale issue d'une suite de requetes diverses. Mon
code vba fonctionne sauf pour les critères de ce type (plusieurs critères
les uns sous les autres dans une même requête).
Merci si vous avez une idée...
Eric
MCS1 est un cahmp de votre table ? Vous êtes sûr que ce ne doit pas être : WHERE (((MotsClésPatient.[Mot clé])="MCS1")) OR (MotsClésPatient.[Mot clé])
Is Null)) OR (((MotsClésPatient.[Mot clé])="MCS2")) OR (((MotsClésPatient.[Mot clé])="MCS3"));
Non, le problème n'est pas dans l'expression de la requête (je n'ai fait que
copier le code SQL de la requête affiché en mode SQL.
MCS1 ...etc sont des critères. Auparavant pour tester la requête les critères étaient forms!recherchePatient!MCS1 Maintenat j'ai mis MCS1 pour simplifier le code VBA. La requête fonctionne bien. Mon pb c'est d'exprimer les critères en VBA avant d'ouvrir la requête finale issue d'une suite de requetes diverses. Mon code vba fonctionne sauf pour les critères de ce type (plusieurs critères les uns sous les autres dans une même requête). Merci si vous avez une idée... Eric