VBA porbleme de requetes
Fermé
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
-
22 mai 2007 à 09:12
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 - 22 mai 2007 à 14:22
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 - 22 mai 2007 à 14:22
A voir également:
- VBA porbleme de requetes
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
9 réponses
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 09:29
22 mai 2007 à 09:29
Salut,
Il me semble que l'on ne peut pas mettre de " dans une chaine de caractères en vba. Donc essaye de les remplacer par des ' ou de mettre des ' devant chaque ".
Je pense que cela devrait marcher.
Il me semble que l'on ne peut pas mettre de " dans une chaine de caractères en vba. Donc essaye de les remplacer par des ' ou de mettre des ' devant chaque ".
Je pense que cela devrait marcher.
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 09:52
22 mai 2007 à 09:52
ca marche merci mais il me met une erreur
Une action exécuter SQL nécessite un argumentconsistant en une instruction SQL
j'ai fais un msgbox pour vérifier ma ligne est bien dedans
Une action exécuter SQL nécessite un argumentconsistant en une instruction SQL
j'ai fais un msgbox pour vérifier ma ligne est bien dedans
EBasta
Messages postés
37
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007
31
22 mai 2007 à 09:53
22 mai 2007 à 09:53
Bonjour,
Il existe 2 soucis dans ton programme :
1- un souci de SQL à travers VBA.
2- exécuter une requête SELECT en VBA sans connexion à la base de données.
1- En VBA, les guillemets " correspondent uniquement à des chaînes de caractères. Il ne faut donc pas de " directement dans le SQL intégré dans le VBA mais une apostrophe '.
La commande SQL sous VBA devient donc :
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
Comme le WHERE ne contient que des AND, les parenthèses peuvent être supprimées.
2- Le RunQSL pour un SELECT peut poser des problèmes car il faut se connecter à la base et définir la requête qui s'y attache. Ce n'est pas forcément simple. Le code VBA de base devient alors :
Sub Exemple()
Dim dbCourante As DAO.Database
Dim rstRequete As DAO.Recordset
Dim strOPPO as String
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête définie par SQL
Set rstRequete = dbCourante.OpenRecordset(SQL)
'Récupérer la valeur OPPO pour l'enregistrement de la requête pour la placer dans une variable (pour un usage futur)
strOPPO = rstRequete!OPPO
'Se déconnecter de la requête et de la base
Set rstRequete = Nothing
Set dbCourante = Nothing
End Sub
Maintenant, il faut modifier le code pour tenir compte de ta demande et de l'intéret du SELECT dans ton projet. Si la requête SQL retourne plusieurs enregistrements, il faut une boucle...
J'espère avoir bien répondu.
Il existe 2 soucis dans ton programme :
1- un souci de SQL à travers VBA.
2- exécuter une requête SELECT en VBA sans connexion à la base de données.
1- En VBA, les guillemets " correspondent uniquement à des chaînes de caractères. Il ne faut donc pas de " directement dans le SQL intégré dans le VBA mais une apostrophe '.
La commande SQL sous VBA devient donc :
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
Comme le WHERE ne contient que des AND, les parenthèses peuvent être supprimées.
2- Le RunQSL pour un SELECT peut poser des problèmes car il faut se connecter à la base et définir la requête qui s'y attache. Ce n'est pas forcément simple. Le code VBA de base devient alors :
Sub Exemple()
Dim dbCourante As DAO.Database
Dim rstRequete As DAO.Recordset
Dim strOPPO as String
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête définie par SQL
Set rstRequete = dbCourante.OpenRecordset(SQL)
'Récupérer la valeur OPPO pour l'enregistrement de la requête pour la placer dans une variable (pour un usage futur)
strOPPO = rstRequete!OPPO
'Se déconnecter de la requête et de la base
Set rstRequete = Nothing
Set dbCourante = Nothing
End Sub
Maintenant, il faut modifier le code pour tenir compte de ta demande et de l'intéret du SELECT dans ton projet. Si la requête SQL retourne plusieurs enregistrements, il faut une boucle...
J'espère avoir bien répondu.
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 10:41
22 mai 2007 à 10:41
Merci beaucoup pour ton code ca m'avance énormément
En plus tu as bien expliqué a quoi correspond chaque module ce qui me permet de comprendre.
en fait mon select va servi a etre ajouté avec une requete ajout dont la commande est
La place de ReqSelect ca serait strOPPO ???
En plus tu as bien expliqué a quoi correspond chaque module ce qui me permet de comprendre.
en fait mon select va servi a etre ajouté avec une requete ajout dont la commande est
Dim Var as String Var = "ReqSelect" Sql="INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT " & Var & ".année, " & Var & ".OPPO, "& Var & ".MPE," & Var & "..MPF," & Var & "..MRE," & Var & "..MRF," & Var & "..M__ FROM" & Var & ";" DoCmd SQL
La place de ReqSelect ca serait strOPPO ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 10:45
22 mai 2007 à 10:45
a etre ajouté a une requete ajout pardon
EBasta
Messages postés
37
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007
31
22 mai 2007 à 11:18
22 mai 2007 à 11:18
Il n'y a pas d'intérêt de dissocier la requête SELECT du INSERT. Les 2 requêtes peuvent être fusionnées. Sinon, dans ta commande, il y a des erreurs parmi les guillemets et des points...
Si je ne me trompe pas, le programme devrait être de la forme :
Sub Exemple()
Dim dbCourante As DAO.Database
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = " INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT '2005_T3', getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__ FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête
dbCourante.Execute (SQL)
Set dbCourante = Nothing
End Sub
Si je ne me trompe pas, le programme devrait être de la forme :
Sub Exemple()
Dim dbCourante As DAO.Database
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = " INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT '2005_T3', getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__ FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête
dbCourante.Execute (SQL)
Set dbCourante = Nothing
End Sub
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 11:27
22 mai 2007 à 11:27
je savais pas qu'on pouvait fusionner les deux j'aurais au moins appris quelque chose. sinon il met une erreur trop peu de paramètre 9attendu lorsque j'execute
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 13:35
22 mai 2007 à 13:35
si quelqu'un peut m'aider j'arrive pas a trouver la syntaxe
Merci d'avance
Merci d'avance
darkspoilt
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
1
22 mai 2007 à 14:22
22 mai 2007 à 14:22
Je fait ma premiere requête pour ajouter une colonne année que je rempli a trvers le code d'ou la raison de mon premier Select c'est pour filtrer etajouter une colonne a ma premiere table
le code sql de Access généré donne ceci
le code sql de Access généré donne ceci
PFPF2005_T3 est une table présente dans Access ma premiere idée est de faire nom de la requete Req2005_T3 SELECT PJPF2005_T3.OPPO, PJPF2005_T3.MPE, PJPF2005_T3.MPF, PJPF2005_T3.MRE, PJPF2005_T3.MRF, PJPF2005_T3.M__, "2005_T3" AS année FROM PJPF2005_T3 WHERE (((PJPF2005_T3.CBQD)="total") AND ((PJPF2005_T3.MOIS)="total") AND ((PJPF2005_T3.CMOP)="total")); et ensuite INSERT INTO Test ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT Req2005_T3.année, Req2005_T3.OPPO, Req2005_T3.MPE, Req2005_T3.MPF, Req2005_T3.MRE, Req2005_T3.MRF, Req2005_T3.M__ FROM Req2005_T3; total étant une valeur Req2005_T3 une requete selection