Boucler une requete sql sous vba

Résolu
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013
- Modifié par Themummy le 8/11/2013 à 12:41
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013
- 8 nov. 2013 à 17:01
Bonjour,
je veut tout simplement ne pas répéter ce bloc de code:


ObjMyRecordSet.Close
strSQL31 = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '01/10/2012') And (Date_MVT < '02/10/2012') And NUM_MAGASIN = 1)"
ObjMyRecordSet.Open strSQL31
ActiveSheet.Range("C33").CopyFromRecordset (ObjMyRecordSet)



Les variables qui changent est:
- strSQL (de 1 a 31)
-'01/10/2012' (incrémenter le jour de 1 a 31)
-'02/10/2012' (incrémenter le jour de 2 a 31)
-ActiveSheet.Range("C33") 'incrémenter les cellules pour affecter les resultats

j'ai essayer avec ce code mais sa marche pas du tout je suis perdu^^


For i = 1 To 20
For j = 1 To 20
For k = 2 To 21
For l = 1 To 22
ObjMyRecordSet.Close
strSQLi = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '" & j & "/10/2013') And (Date_MVT < '" & k & "/10/2013') And NUM_MAGASIN = 15)"
Set ObjMyRecordSet.ActiveConnection = objmyconn
ObjMyRecordSet.Open strSQLi
ActiveSheet.Range("H" & l).CopyFromRecordset (ObjMyRecordSet)
Next l
Next k
Next j
Next i



Merci de vos efforts :)

9 réponses

jordane45
Messages postés
35769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
Modifié par jordane45 le 8/11/2013 à 13:18
Bonjour,
Sans regarder trop en détail.. je peux déjà te dire qu'il y a un souci au niveau des dates en utilisant ton code tel quel...

Teste ça :
for i = 1 to 31
Madate = i & "/10/2013"
debug.print Madate
next


Tu constateras que toutes les dates inférieur au 10 du mois ne seront que sur un chiffre : 1/10/2013 2/10/2013 ..etc... (il manque le 0 du premier caractère...)

Au pire, tu peux tester si < 10..et dans ce cas, ajouter un 0
for i = 1 to 31
if i<10 then
jour = "0"&i
else
jour = i
end if
Madate = jour & "/10/2013"
debug.print Madate
next


Edit : correction prinG en prinT.
0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

8 nov. 2013 à 13:10
Merci bien de votre réponse jordane, mais le syntaxe jour & "/10/2013" est incorrect. Message d'erreur: Fin d'instruction.
et pour mon cas je pense pas que le 0 est obligatoire dans la requête, j'ai tester la requête seul sans le 0 est sa marche.

pour mon cas je doit mettre les variables comme suite:
resultat = InputBox("Entrez la date", "Saisir Date")
strSQL = "select sum(MONTANT_TTC) from STK_VENTE_DIRECTE where DATE_MVT = '" & resultat & "'"
.

NB: pour debug.pring Madate je pense tu vouler dite Print non ?
0
jordane45
Messages postés
35769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
8 nov. 2013 à 13:17
le syntaxe jour & "/10/2013" est incorrect.
Ah ? Je viens de tester... et ça fonctionne (dans mon exemple.. pas dans ton code !)

Et oui.. prinT et non pring.. désolé.. faute de frappe.. ^^

j'ai tester la requête seul sans le 0 est sa marche.
Ok. tant mieux alors... reste à trouver ce qui ne fonctionne pas dans le code alors..
j'ai essayer avec ce code mais sa marche pas du tout je suis perdu^^
Dans le code que vous nous montrez.. vous ne nous dites pas ce qui ne fonctionne pas..
0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

Modifié par Themummy le 8/11/2013 à 15:41
sa affiche le même résultat dans les cellules de H1 a H22 puis sa change les résultats jusqu'à ce que excel plante en gros comme sa:

cellule H1:50000
cellule H2:50000
cellule H3:50000
.
.
.
puis
cellule H1:60000
cellule H2:60000
cellule H3:60000
.
.
.
j'espère que j'ai été clair sur ce message


je pense que l'erreur viens de strSQLi je doit concaténer les deux variables, une variable string et une variable Int.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45
Messages postés
35769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
8 nov. 2013 à 16:03
Normal que ça affiche 22 fois le même résultat... c'est votre boucle L qui fait ça ......

jusqu'à ce que excel plante
Humm..; là je pense que c'est par ce que vous avez atteint le nombre max de lignes..


Enfin, en tout cas, le souci n'est pas lié à votre requête, mais plutôt au traitement que vous en faites après ( Les boucles ).
0
jordane45
Messages postés
35769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
8 nov. 2013 à 16:15

Sub toto()

NbJourMois = 31
j_Deb = 1
j_Fin = 2

For j = 1 To NbJourMois
ObjMyRecordSet.Close
' Requête :
strSQLi = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '" & j_Deb & "/10/2013') And (Date_MVT < '" & j_Fin & "/10/2013') And NUM_MAGASIN = 15)"
Set ObjMyRecordSet.ActiveConnection = objmyconn
ObjMyRecordSet.Open strSQLi
' copie de la valeur
ActiveSheet.Range("H" & j).CopyFromRecordset (ObjMyRecordSet)
' On passe aux jours suivants
j_Deb = j_Deb + 1
j_Fin = j_Fin + 1
Next

End Sub


0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

Modifié par Themummy le 8/11/2013 à 16:28
oui je suis d'accord ma boucle affiche 22 fois mais je doit pas avoir le même résultat.

voila comment j'ai procédé avant:

1er requête

strSQL1 = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '01/10/2012') And (Date_MVT < '02/10/2012') And NUM_MAGASIN = 1)"
Set ObjMyRecordSet.ActiveConnection = objmyconn
ObjMyRecordSet.Open strSQL1
/*je colle le resultat de la requete dans la cellule H3*/
ActiveSheet.Range("H3").CopyFromRecordset (ObjMyRecordSet)

/*je doit fermer l'objet recordset qui contiens la 1er requête pour ouvrir la 2eme après*/
ObjMyRecordSet.Close


2eme requête

strSQL2 = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '02/10/2012') And (Date_MVT < '03/10/2012') And NUM_MAGASIN = 1)"
Set ObjMyRecordSet.ActiveConnection = objmyconn
ObjMyRecordSet.Open strSQL2
ActiveSheet.Range("H4").CopyFromRecordset (ObjMyRecordSet)
ObjMyRecordSet.Close


3eme requête

strSQL3 = "select SUM(MONTANT_ttc) from STK_VENTE_Directe where ((Date_MVT > '03/10/2012') And (Date_MVT < '04/10/2012') And NUM_MAGASIN = 1)"
Set ObjMyRecordSet.ActiveConnection = objmyconn
ObjMyRecordSet.Open strSQL3
ActiveSheet.Range("H5").CopyFromRecordset (ObjMyRecordSet)
ObjMyRecordSet.Close
0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

8 nov. 2013 à 16:35
de premier test sa a l'aire fonctionnel je regle just quelques erreurs de recordset.close parce que je doit pas le fermer au debut aprés je te tien au courant
0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

Modifié par Themummy le 8/11/2013 à 16:44
Enfin, sa a marcher parfaitement Gros Merci a toi jordane !
Merci beaucoup
0
jordane45
Messages postés
35769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
8 nov. 2013 à 16:54
Pense à mettre le sujet en résolu.
:-)
0
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 novembre 2013

8 nov. 2013 à 17:01
Et oui c'est résolu grâce a jordane :D
0