Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

des erreurs à la création d'une requête en vba

7 réponses
Avatar
marc.dufresne
bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux message
d'erreur incompréhensible et mal expliqué entrave ma progression.
pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là comment
trans mettre mon paramètre, et pour finir je mettrais tout celà dans une
boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) =
""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui réponds à
mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je veux
voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée pour un
des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide

7 réponses

Avatar
Eric
Bonjour Marc

Il faut que tu charges les références DAO 3.x

Une requête Selection ne s'exécute pas mais s'ouvre seulement donc le
.Execute ne marchera pas.
Tu ne peux définir une requête temporaire (cest à dire sans nom) que pour
les requêtes Action car la méthode OpenQuery impose un nom de requête,
donc il faut supprimer la requête après son ouverture.

Pour obtenir ce que tu veux, regardes le code ci-dessous

Sub Test701()
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database
strSQL = "select * from tClient where Ville_Client=""Paris"";"
Set bd = CurrentDb
' Création de la requête
Set marequête = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub

Sub Test702()
' la même mais la ville est saisie via une InputBox
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database, reponse As String
reponse = InputBox("Quelle ville ?")
If Len(reponse) = 0 Then Exit Sub
strSQL = "select * from tClient where Ville_Client='" & reponse &
"';"
Set bd = CurrentDb
' Création de la requête
Set marequete = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub


A+
Eric

"marc.dufresne" écrivait
news:4079b8ac$0$15664$:

bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux
message d'erreur incompréhensible et mal expliqué entrave ma
progression. pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là
comment trans mettre mon paramètre, et pour finir je mettrais tout
celà dans une boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) > ""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui
réponds à mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je
veux voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée
pour un des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide






Avatar
Raymond [mvp]
Bonjour.

si on simplifie le problème, il existe 2 sortes de requêtes, les requêtes
action et les requêtes sélection. Les requêtes action, telles requête
modification, requête suppression etc.... ne sont pas affichées mais
exécutées.
L'exécution peut être lancée de plusieurs façons avec le même résultat:
CurrentDb.Execute "requête1" ' requête enregistrée
CurrentDb.Execute "UPDATE table1 SET table1.Madate = Date();"

les requêtes sélection, en général, sont des recordset qui permettent
d'exécuter des tâches en bouclant sur tout ou partie du recordset. Sur
chaque enregistrement un travail spécifique sera exécuté.
exemple:
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("requête1") 'requête enregistrée
If (Not Rs.BOF) And (Not Rs.EOF) Then
Do Until Rs.EOF
MsgBox Rs!Numéro
Rs.MoveNext
Loop
End If
Set Rs = Nothing
(cocher la librairie dao dans les références)
la ligne Set Rs = CurrentDb.OpenRecordset("requête1")
pourra être remplacée par la ligne:
Set Rs = CurrentDb.OpenRecordset("SELECT table1.* FROM table1")

je te conseille de voir l'aide en ligne sur les requêtes car les exemples
ci-dessus ne sont que deux petits exemples qui ne représentent que 0.000001%
des possibilités sur les requêtes. Je dirais que Access ne peut pas vivre
sans requêtes.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"marc.dufresne" a écrit dans le
message de news:4079b8ac$0$15664$
bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux
message

d'erreur incompréhensible et mal expliqué entrave ma progression.
pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là
comment

trans mettre mon paramètre, et pour finir je mettrais tout celà dans une
boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) > ""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui réponds à
mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je veux
voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée pour un
des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide






Avatar
marc.dufresne
merci pour tes réponses
mais les aides dans vba sont vraiement embigues deplus il n'y a pour ainsi
dire pas d'exemple surtout sur les query

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

si on simplifie le problème, il existe 2 sortes de requêtes, les requêtes
action et les requêtes sélection. Les requêtes action, telles requête
modification, requête suppression etc.... ne sont pas affichées mais
exécutées.
L'exécution peut être lancée de plusieurs façons avec le même résultat:
CurrentDb.Execute "requête1" ' requête enregistrée
CurrentDb.Execute "UPDATE table1 SET table1.Madate = Date();"

les requêtes sélection, en général, sont des recordset qui permettent
d'exécuter des tâches en bouclant sur tout ou partie du recordset. Sur
chaque enregistrement un travail spécifique sera exécuté.
exemple:
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("requête1") 'requête enregistrée
If (Not Rs.BOF) And (Not Rs.EOF) Then
Do Until Rs.EOF
MsgBox Rs!Numéro
Rs.MoveNext
Loop
End If
Set Rs = Nothing
(cocher la librairie dao dans les références)
la ligne Set Rs = CurrentDb.OpenRecordset("requête1")
pourra être remplacée par la ligne:
Set Rs = CurrentDb.OpenRecordset("SELECT table1.* FROM table1")

je te conseille de voir l'aide en ligne sur les requêtes car les exemples
ci-dessus ne sont que deux petits exemples qui ne représentent que
0.000001%

des possibilités sur les requêtes. Je dirais que Access ne peut pas vivre
sans requêtes.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"marc.dufresne" a écrit dans le
message de news:4079b8ac$0$15664$
bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux
message

d'erreur incompréhensible et mal expliqué entrave ma progression.
pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là
comment

trans mettre mon paramètre, et pour finir je mettrais tout celà dans une
boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) > > ""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui réponds
à


mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je
veux


voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée pour
un


des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide










Avatar
marc.dufresne
merci pour tes réponses
tu me débloque bien dans mon apprentissage
je viens seulement de voir l' apostrophe et le guillemet et non pas 2
guillemets qui se suivent dans la ligne suivante après le strSQL = "select * from tClient where Ville_Client='" & reponse & "';"
merci encore

"Eric" a écrit dans le message de news:

Bonjour Marc

Il faut que tu charges les références DAO 3.x

Une requête Selection ne s'exécute pas mais s'ouvre seulement donc le
.Execute ne marchera pas.
Tu ne peux définir une requête temporaire (cest à dire sans nom) que pour
les requêtes Action car la méthode OpenQuery impose un nom de requête,
donc il faut supprimer la requête après son ouverture.

Pour obtenir ce que tu veux, regardes le code ci-dessous

Sub Test701()
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database
strSQL = "select * from tClient where Ville_Client=""Paris"";"
Set bd = CurrentDb
' Création de la requête
Set marequête = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub

Sub Test702()
' la même mais la ville est saisie via une InputBox
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database, reponse As String
reponse = InputBox("Quelle ville ?")
If Len(reponse) = 0 Then Exit Sub
strSQL = "select * from tClient where Ville_Client='" & reponse &
"';"
Set bd = CurrentDb
' Création de la requête
Set marequete = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub


A+
Eric

"marc.dufresne" écrivait
news:4079b8ac$0$15664$:

bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux
message d'erreur incompréhensible et mal expliqué entrave ma
progression. pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là
comment trans mettre mon paramètre, et pour finir je mettrais tout
celà dans une boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) > > ""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui
réponds à mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je
veux voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée
pour un des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide









Avatar
marc.dufresne
rebonsoir
encore une petite question sur la requête suivante
var=DUFRESNE
MonSql = "SELECT * FROM personnels WHERE (personnels.NOM) = '" & var & "';"
là cela fonctionne mais je n'arrive pas à rechercher que sur une partie du
nom en incluant l'étoile *
merci

"Eric" a écrit dans le message de news:

Bonjour Marc

Il faut que tu charges les références DAO 3.x

Une requête Selection ne s'exécute pas mais s'ouvre seulement donc le
.Execute ne marchera pas.
Tu ne peux définir une requête temporaire (cest à dire sans nom) que pour
les requêtes Action car la méthode OpenQuery impose un nom de requête,
donc il faut supprimer la requête après son ouverture.

Pour obtenir ce que tu veux, regardes le code ci-dessous

Sub Test701()
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database
strSQL = "select * from tClient where Ville_Client=""Paris"";"
Set bd = CurrentDb
' Création de la requête
Set marequête = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub

Sub Test702()
' la même mais la ville est saisie via une InputBox
Dim strSQL As String, marequete As DAO.QueryDef
Dim bd As DAO.Database, reponse As String
reponse = InputBox("Quelle ville ?")
If Len(reponse) = 0 Then Exit Sub
strSQL = "select * from tClient where Ville_Client='" & reponse &
"';"
Set bd = CurrentDb
' Création de la requête
Set marequete = bd.CreateQueryDef("Temp", strSQL)
'Ouverture de la requêe et affichage à l'écran
DoCmd.OpenQuery "Temp"
' Suppresion de la requête
bd.QueryDefs.Delete "Temp"
Set marequete = Nothing
Set bd = Nothing
End Sub


A+
Eric

"marc.dufresne" écrivait
news:4079b8ac$0$15664$:

bonjour à toutes et tous
voilà j'ai essayé d'écrire quelques lignes de code, mais de nombreux
message d'erreur incompréhensible et mal expliqué entrave ma
progression. pourriez vous m'expliquer mmes erreurs .
je désire, dans un premier temps, obtenir dans une table type excel le
résultat d'une requête. ensuite créer une rquête paramétrée, donc là
comment trans mettre mon paramètre, et pour finir je mettrais tout
celà dans une boucle pour changer de paramètre
voici mes lignes de code
Sub Extraction2()
Dim MaBd As Database
Dim Marequete As QueryDef
Dim MonSql As String
Dim record As Recordset
Set MaBd = CurrentDb
MonSql = "SELECT * FROM personnels WHERE (((personnels.NOM) > > ""DUFRESNE""));"
Set Marequete = MaBd.CreateQueryDef("", MonSql)
Set record = Marequete.OpenRecordset
End Sub
j'obtiens le message d'erreur "Incompatibilité de type"
pour la ligne Set record=Marequete.OpenRecordset

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("test", MonSql)
Set record = test.OpenRecordset
là le message d'erreur" objet requis"
pour la ligne Set record =test.OpenRecordset
alors que la requete "test" a bien été créée!

j'ai essayé aussi
Set record="test".OpenRecordset
mais il est impossible de compiler le programe

j'ai donc essayé
DoCmd.OpenQuery "test", acViewNormal, acReadOnly
là ça fonctionne bien je peux voir la requete s'afficher et qui
réponds à mon paramètre
mais si je ne veux pas que cette requête "test" soit enregistrée, je
veux voir que le résultat

j'ai donc essayé ceci
Set Marequete = MaBd.CreateQueryDef("", MonSql)
DoCmd.OpenQuery Marequete
j'obtiens comme messsage d'erreur "le type d'une expression entrée
pour un des arguments est incorrect"
et avec
DoCmd.OpenQuery "Marequete"
le message d'erreur "impossible de trouver l'objet Marequete"

je vous remercie d'avance pour votre aide









Avatar
3stone
Salut,

"marc.dufresne"
MonSql = "SELECT * FROM personnels WHERE (personnels.NOM) = '" & var & "';"
là cela fonctionne mais je n'arrive pas à rechercher que sur une partie du
nom en incluant l'étoile *



"Select * From personnels Where [Nom] Like '" & var & "*';"



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
marc.dufresne
bonsoir
merci pour ton aide


"3stone" a écrit dans le message de news:

Salut,

"marc.dufresne"
MonSql = "SELECT * FROM personnels WHERE (personnels.NOM) = '" & var &
"';"


là cela fonctionne mais je n'arrive pas à rechercher que sur une partie
du


nom en incluant l'étoile *



"Select * From personnels Where [Nom] Like '" & var & "*';"



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------