Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2012, 12h06   #1
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 38
Points : 4
Points : 4
Par défaut Boucle dans enregistrement et requete update

Bonjour,

Voilà j'ai un souci et je ne sais pas comment le résoudre.
J'ai une table commande où je saisi les commandes. Une commande peut avoir plusieurs article donc chaque article prend une ligne et le numero de commande est reporter.

Je souhaiterai faire une boucle pour parcourir mes commandes par leur numero et verifié que j'ai les stocks necessaire.Si tous les articles sont disponible, je passe son statut a preparation et je deduis les stock.
Ensuite je passe à la commande suivante et verifie si j'ai tous ou non étant donné que j'ai diminué les stock auparavant.

Je ne sais pas du tout comment faire ce que je veux, c'est la boucle qui me pose problème.
Car pour l'instant, je fais ce que je veux mais sans la boucle donc toute les quantités sont deduite d'un coup et les marchandises ne sont pas forcement dispo pour les 2 commandes et il me met que c'est ok car il verifie independament des autres commandes.

Je ne sais pas si je me suis fais comprendre.

Voici pour l'instant ce que je fais :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
'définir disponibilité article
DoCmd.RunSQL "UPDATE Commande INNER JOIN stock ON Commande.Réference=stock.Reference SET commande.disponibilite_article = 'Disponible' WHERE ((commande.Quantité < stock.[Qte en stock]) and (commande.stock_maj is null));"
DoCmd.RunSQL "UPDATE Commande INNER JOIN stock ON Commande.Réference=stock.Reference SET commande.disponibilite_article = 'Non Disponible' WHERE ((commande.Quantité > stock.[Qte en stock]) and (commande.stock_maj is null));"
DoCmd.RunSQL "UPDATE Commande INNER JOIN stock ON Commande.Réference=stock.Reference SET commande.Commentaire='Stock insuffisant' WHERE commande.disponibilite_article = 'Non Disponible';"
 
'Commande preparable ou non
DoCmd.RunSQL " update commande set statut = 'A preparer' where commande.stock_maj is null);"
DoCmd.RunSQL "update commande set statut= 'Non preparable' where Reference_cmd in (Select reference_cmd from commande where disponibilite_article='Non disponible')  ;"
 
 
'mise à jour stock
 DoCmd.RunSQL "UPDATE stock INNER JOIN Commande ON stock.Reference=Commande.Réference SET stock.[Qte en stock] = ([Qte en stock]-(Quantité)) WHERE ((Commande.Réference=stock.reference)and (stock_maj is null)and (statut = 'A preparer') ;"
 DoCmd.RunSQL "update commande set stock_maj='ok' where stock_maj is null and statut = 'A preparer' ;"
Bubulle232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 12h13   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

Citation:
Envoyé par Bubulle232 Voir le message
J'ai une table commande où je saisi les commandes. Une commande peut avoir plusieurs article donc chaque article prend une ligne et le numero de commande est reporter.
A mon avis, c'est une erreur de conception. Tu devrais avoir une table "COMMANDES" et une table "DETAIL_COMMANDES".
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 12h17   #3
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 38
Points : 4
Points : 4
merci de votre réponse.

Mais même si je fais comme vous dites, j'aurai le même souci avec la table detail commande
Bubulle232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 14h07   #4
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 38
Points : 4
Points : 4
Bon j'ai coupé ma table commande en deux:

Commande (Reference_cmd,Nom,adresse,cp,ville,statut,date)
Commande_detail (Reference_produit,designation,quantité,disponibilité_article,#Reference_cmd)

Maintenant je voudrais que l'on m'aide si possible pour faire ma boucle .

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
'stock_maj permet de connaitre les commandes qui n'ont pas encore été traité
DoCmd.RunSQL "update commande set statut= 'Non preparable' where stock_maj is null"
 
'Ici je modifie le statut en A preparer si les articles sont dispo
***  Je voudrai donc faire ma boucle ici
 
DoCmd.RunSQL " update commande set statut = 'A preparer' where Reference_cmd in( select reference_cmd from commande_detail where disponibilite_article = 'Disponible' )"
 
 
'Je deduis des stocks :
DoCmd.RunSQL "UPDATE stock INNER JOIN Commande_detail ON stock.Reference=Commande_detail.Réference SET stock.[Qte en stock] = ([Qte en stock]-(Quantité)) WHERE ((Commande_detail.Réference=stock.reference)and (stock_maj is null)and (statut = 'A preparer') ;"
 
'Là je passe le stock_maj en ok car la commande a été traité 
 DoCmd.RunSQL "update commande set stock_maj='ok' where stock_maj is null and statut = 'A preparer' ;"
 
 
*****Je souhaite fermer ma boucle ici comme sa je recommence avec une deuxième commande les vérifications et mes stocks ont été mis à jour
Pouvez vous m'aider pour ma boucle ?

Merci d'avance
Bubulle232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 14h53   #5
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Re,

Perso, j'utiliserai un recordset.

Pour shématiser :

Code :
1
2
3
4
5
6
7
8
9
 
soit rsAtraiter (Recordset des commandes à traiter)
 
do while not rsAtraiter.eof
   Mise à jour du statut de la commande
   Mise à jour du stock
   Mise à jour de la commande => stock_maj='ok'
   rsAtraiter.MoveNext
loop
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 13h13   #6
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 38
Points : 4
Points : 4
Merci pour votre aide.

J'ai l'erreur suivante :

Erreur d'execution '91':
Variable objet ou variable de bloc with non definie

Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
 
Dim rsAtraiter As DAO.Recordset
 
Do While Not rsAtraiter.EOF
  ' Mise à jour du statut de la commande
   'Mise à jour du stock
 
 
'Commande preparable ou non
DoCmd.RunSQL " update commande set statut = 'A preparer' where commande_detail.stock_maj is null);"
DoCmd.RunSQL " update commande inner join commande_detail on commande.reference_cmd = commande_detail.reference_cmd set commande.statut = 'A preparer' where commande_detail.disponibilite_article = 'Disponible' and commande_detail.Reference_detail"
 
'definir si c'est ok
DoCmd.RunSQL " update commande set statut = 'A preparer' where Reference_cmd in( select reference_cmd from commande_detail where disponibilite_article = 'Disponible' )"
 
 'mise à jour stock
 DoCmd.RunSQL "UPDATE stock INNER JOIN Commande ON stock.Reference=Commande.Réference SET stock.[Qte en stock] = ([Qte en stock]-(Quantité)) WHERE ((Commande.Réference=stock.reference)and (stock_maj is null)and (statut = 'A preparer') ;"
 DoCmd.RunSQL "update commande set stock_maj='ok' where stock_maj is null and statut = 'A preparer' ;"
 DoCmd.SetWarnings True
 
 
 
  ' Mise à jour de la commande => stock_maj='ok'
 
   rsAtraiter.MoveNext
Loop
Pouvez vous m'éclairer ? Merci
Bubulle232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 14h36   #7
Membre confirmé
 
Avatar de spaiku
 
Chef de projet MOA
Inscription : septembre 2007
Messages : 191
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2007
Messages : 191
Points : 250
Points : 250
Il semble que vous ayez besoin formation sur les objet database et recordset. Je vous suggère de lire ce cours, en tout cas les parties 3.3.1 et 5.1 à 5.4

Vous gagnerez vraisemblablement beaucoup de temps dans vos développements futurs avec ces connaissances. Les membres du forum vous éclaireront volontiers si vous rencontrez des difficultés de compréhension.
spaiku est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h53.


 
 
 
 
Partenaires

Hébergement Web