yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007
-
5 juin 2007 à 14:13
yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007
-
8 juin 2007 à 12:01
Salut,
Voila je suis débutant en VB et SQL oui je cumule
Voila ma question
Sous Access j'ai 4 requettes
requettes 1= creation liste 1
requettes 2= creation liste 2
requettes 3= mixe les informations recupéré de la liste 1 et liste 2
requette 4 = fait une maj des libellés pour qu'il est tous la meme strucutres
actuellement j'execute ses 4 requettes les une apres les autres en double cliquant simplement dessus
Mon but est de crée un petit module qui m'exécuterais ses 4 requetes les unes a la suite des autres
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 6 juin 2007 à 08:04
OK, désolé de pas t'avoir prévenu que j'etais parti LOL.
Donc pour parametre tes requetes fais ca :
Option Compare Database
Public Sub Requete()
Dim Valeur1 As String
Valeur1 = "critere"
Dim Valeur2 As String
Valeur2 = "periode"
Dim rqt As AccessObject
For Each rqt In CurrentData.AllQueries
if rqt.name = Nom_requete3 or then
valeur1 = inputbox "Veuillez entre le critere de la requete" & rqt.name
SQL = "SELECT ACFIC0101_ACPROMPF.NOPRPR, [Fichiers articles].DESIG, ACFIC0101_ACPROMPF.PSP7PR, [Poids mesures].Champ2 AS [Lib poids], Int(100*[PSP7PR]/[POCTU])/100 AS PK, Int(ACFIC0101_ACPROMPF!PSP7PR) AS euros, Right(Str(100*ACFIC0101_ACPROMPF!PSP7PR),2) AS centimes, "& Valeur1 &
" AS Periode, ACFIC0101_ACPROMPF.CDPLPR INTO [table des stops]
FROM (ACFIC0101_ACPROMPF LEFT JOIN [Fichiers articles] ON ACFIC0101_ACPROMPF.CDPLPR = [Fichiers articles].PLIG) LEFT JOIN [Poids mesures] ON [Fichiers articles].PKGL = [Poids mesures].Champ1
WHERE (((ACFIC0101_ACPROMPF.NOPRPR)=3259 Or (ACFIC0101_ACPROMPF.NOPRPR)=3260));"
DoCmd.RunSQL SQL
elseif rqt.name = Nom_requete4 or then
valeur2 = inputbox "Veuillez entre le critere de la requete" & rqt.name
'La tu fais pareil que la requete3 mais pour l'autre champ et valeur 2
else
DoCmd.OpenQuery rqt.Name 'requete différente des requetes 3 et 4
end if
Next
End Sub
Tu comprends le principe, c'est une simple concatenation de chaine avec une valeur.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 5 juin 2007 à 14:22
Salut,
tu es en VBA Access ?
Si oui, tu peux recopier les requetes et les executer :
SQL = "Requete_SQL _creation liste 1"
DoCmd.RunSQL SQL
SQL = "Requete_SQL _creation liste 2"
DoCmd.RunSQL SQL
Je parle bien de la requete elle meme (Select .... ou UPDATE ......)
Si tu veux les executer directement grace à leur nom, je vais voir a moins que quelqu'un sache.
Par principe, tu dois pourvoir faire des choses grace à la collection des requetes de ta base de données.
yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007 5 juin 2007 à 14:28
J'ai commencé mon module comme suit:
Public Sub Requete_SQL()
Dim valeur As String
Dim SQL As String
SQL = SELECT
C9_ARTFAC.IFLS , C9_ARTFAC.Group, C9_ARTFAC.MAINT, C9_ARTFAC.DATMAJ, C9_ARTFAC.TVA, C9_ARTFAC.CATAL, INTO [Fichiers articles] FROM C9_ARTFAC
je pense que mon gros PB c'est que apres le SQL = " SELECT je fait un copier coller (parceque ci-dessus je ne met meme pas les 1/4 de se qu'il ya a mettre ) et la au lieu de mettre apres "SELECT... bah ca me renvoye a la ligne j'ai essayer en tapant tou a la main mains ou bout d'un moment ca me fait pareil et ca me met en faite
SQL = " SELECT"
C9_ARTFAC.............
yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007 5 juin 2007 à 15:05
Alors attend donc au lieu de taper:
Public Sub Requete_SQL()
Dim valeur As String
SQL = "SELECT C9_ARTFAC.IFLS , C9_ARTFAC.Group, C9_ARTFAC.MAINT,
C9_ARTFAC.DATMAJ, C9_ARTFAC.TVA, C9_ARTFAC.CATAL, INTO [Fichiers
articles] FROM C9_ARTFA
DoCmd.RunSQL SQL
end sub
je tape :
Public Sub Requete_SQL()
Dim valeur As String
SQL = "docmd.openQuery [nomRequête]"
ou je tape juste
Public Sub Requete_SQL()
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 5 juin 2007 à 15:27
LOL, en effet je coyais avoir été clair mais pas assez en fait, il ne s'agit pas d'une requete mais bien de ce que tu cherches
tapes directment ca dans le code VBA :
docmd.openQuery [nomRequête]
remplace nomRequêtepar le nom de ta requete (creation liste 1 je crois).
La précédente solution consistait a executer une requete en tant que requete SQL et pas une requete Access. Bref essaies et admires (enfin je crois LOL).
Attention, si je me souviens bien tu pourrais avoir un message d'avertissement. Si tu veux l'eviter, va voir les options de Access.
yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007 5 juin 2007 à 15:59
j'avais pas vue ton message précédant
j'ai testé :
Option Compare Database
Public Sub Requete()
Dim rqt As AccessObject
For Each rqt In CurrentData.AllQueries
DoCmd.OpenQuery rqt.Name
Next
End Sub
et ca fonctionne Youhou!
Bon avec ça mon pb c'est que (bon je l'avais pas précisé c'est vrai),
mais c'est que la requete 1 et 2 nécessite une simple éxécution donc jusque la pas de PB avec ce que tu ma données mon soucis
c'est sur la requette 3 avant de l'éxécuté il faut que je modifie le "critéres" du Champ1 "noprpr"
et meme chose pour la requette 4
qui elle nécessite la modifie (avant éxécution aussi)
du champ Periode: "du 13 au 24 juin 20"
bon je peut faire c'est modifie a la main avant de lancer le module
mais c'est vrai que ca serait mieux si le module me demandait avant éxécution de la requette 3 "veuillez inséré le critére" et avant la requette 4 "veuillez inséré la periode"
Je sais j'en demande beaucoup mais bon but c'est qu'un user landa
puisse l'utilisé et lui il est pas sancé savoir modifier a la main c'est valeur ou critére
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 5 juin 2007 à 16:13
A c'est toi, mais je t'avais donné un code pour cela?
valeur = Inputbox "Veuillez inséré le critére"
AAAHHHHHH. Je viens de comprendre ton pb. Bah oui, tu veux modifier la requete. Je sais pas si c'est possible donc reprends ma première méthode et utilise le inputbox pour la modifier.
yakusa82
Messages postés21Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention 8 juin 2007 5 juin 2007 à 16:24
LOL hé oui c'est moi
voila ma requette 3 ou je doit modifier le critere et le champ preiode
SELECT ACFIC0101_ACPROMPF.NOPRPR, [Fichiers articles].DESIG, ACFIC0101_ACPROMPF.PSP7PR, [Poids mesures].Champ2 AS [Lib poids], Int(100*[PSP7PR]/[POCTU])/100 AS PK, Int(ACFIC0101_ACPROMPF!PSP7PR) AS euros, Right(Str(100*ACFIC0101_ACPROMPF!PSP7PR),2) AS centimes, "du 13 au 24 juin 2007" AS Periode, ACFIC0101_ACPROMPF.CDPLPR INTO [table des stops]
FROM (ACFIC0101_ACPROMPF LEFT JOIN [Fichiers articles] ON ACFIC0101_ACPROMPF.CDPLPR = [Fichiers articles].PLIG) LEFT JOIN [Poids mesures] ON [Fichiers articles].PKGL = [Poids mesures].Champ1
WHERE (((ACFIC0101_ACPROMPF.NOPRPR)=3259 Or (ACFIC0101_ACPROMPF.NOPRPR)=3260));
voila je tes mis en bleu les valeurs qui sont a changer avant l'exécution de la requette