Boucler une requete sql sous vba [Résolu]

Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
-
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 :)
Afficher la suite 

Votre réponse

9 réponses

Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
364
0
Merci
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.
Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
0
Merci
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 ?
Commenter la réponse de Themummy
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
364
0
Merci
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..
Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
0
Merci
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.
Commenter la réponse de Themummy
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
364
0
Merci
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 ).
Commenter la réponse de jordane45
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
364
0
Merci

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


Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
0
Merci
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
Commenter la réponse de Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
0
Merci
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
Commenter la réponse de Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
0
Merci
Enfin, sa a marcher parfaitement Gros Merci a toi jordane !
Merci beaucoup
jordane45
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
364 -
Pense à mettre le sujet en résolu.
:-)
Themummy
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Dernière intervention
8 novembre 2013
-
Et oui c'est résolu grâce a jordane :D
Commenter la réponse de Themummy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.