Mise à jour d'une ligne précise avec un UPDATE sous VBA

Résolu
b3rz3k Messages postés 8 Date d'inscription jeudi 10 février 2011 Statut Membre Dernière intervention 18 mai 2011 - 16 mai 2011 à 13:32
b3rz3k Messages postés 8 Date d'inscription jeudi 10 février 2011 Statut Membre Dernière intervention 18 mai 2011 - 17 mai 2011 à 16:02
Bonjour,
J'ai un petit problème au niveau de la syntaxe d'un UPDATE,
Je vous explique l'organisation de la table qui pose problème.
J'importe depuis Excel un fichier de travail dans différentes colonnes.
Ce fichier est en gros une gestion d'ecarts de stock, et me donne pour telle date ( année,mois, semaine,) la liste des écarts.

Ces écarts ont des Etats ( PROCESSED (traité) ou OPEN).

Un écart encore en "OPEN" peut resurgir la semaine qui suit ou plus tard et s'il est traité, lors de son introductiondans la table , il ne faut pas oublier de mettre en PROCESSED les autres ecarts qui lui sont identiques.

C'est sur cette étape que je bloque... j'ai fais une macro qui verifie pour un PART ( un produit on va dire) ceux qui lui sont identiques, et s'ils sont identiques, regarder leur Etat, et faire les changements necessaire s'ils sont différents.

Voici le code :
Set db = CurrentDb()

Set LECTURE_CLEF_STOCK = db.OpenRecordset("T_STOCK_ECART")
Set LECTURE_CLEF_STOCK2 = db.OpenRecordset("T_STOCK_ECART")

NB = 0
LIGNE = 0
LIGNE2 = 0
LECTURE_CLEF_STOCK.MoveFirst

While Not LECTURE_CLEF_STOCK.EOF
 LECTURE_CLEF_STOCK2.MoveFirst
 LIGNE = LIGNE + 1
 
    While Not LECTURE_CLEF_STOCK2.EOF
    LIGNE2 = LIGNE2 + 1
        VARIABLE_CLEF = LECTURE_CLEF_STOCK.Fields(1)
        VARIABLE_CLEF2 = LECTURE_CLEF_STOCK2.Fields(1)
        VARIABLE_STATE = LECTURE_CLEF_STOCK.Fields(18)
        VARIABLE_STATE2 = LECTURE_CLEF_STOCK2.Fields(18)
        
                    If VARIABLE_CLEF VARIABLE_CLEF2 And VARIABLE_STATE "OPEN" And VARIABLE_STATE2 = "PROCESSED" And LIGNE <> LIGNE2 Then
                         VARIABLE_STATE = VARIABLE_STATE2
                         DoCmd.RunSQL ("UPDATE T_STOCK_ECART Set STATE_STOCK.Name & VARIABLE_STATE & ")                      NB NB + 1
                    End If
    


            LECTURE_CLEF_STOCK2.MoveNext
    Wend
    

    LECTURE_CLEF_STOCK.MoveNext
Wend


c'est la ligne où il y a le UPDATE qui me paraît douteuse.. car à aucun moment je lui précise une ligne pour la mise à jour et je ne sais pas comment faire.
En executant mon programme, il me demande une valeur de mise à jour et ne tien pas en compte ma variable VARIABLE_STATE qui vaut OPEN ou PROCESSED

Merci de votre aide ;)

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2011 à 20:49
Ah bah non, même pas.
Tu as tous tes enregistrements dans tes RecordSets.
Il te suffit de modifier le contenu puis de faire un Update sur le RecordSet, pas au travers d'une requète.
Il te reste à désigner lequel des deux tu veux mettre à jour, mais il ne faudra le faire que sur un seul puisqu'ils pointent tous les deux sur la même table.
(tes noms d'objets et de variables sont pas terribles)
LECTURE_CLEF_STOCK.Fields(18)
ou mieux et plus compréhensible
LECTURE_CLEF_STOCK![STATE_STOCK] = VARIABLE_STATE
LECTURE_CLEF_STOCK.Update
mais ce serait plutôt le RecordSet 2 qu'il faudrait toucher, mais je comprends pas trop ce que tu fais, alors je te laisse raisonner.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2011 à 14:41
Salut

Tu es sous Access ?

Ta ligne est bizarre :
Pourquoi ce NB = NB + 1 juste après le DoCmd ?
Il doit y avoir une erreur de compilation, non ?

Quant à la requète d'update, il faut que tu sortes de la chaine pour y insérer ta variable
DoCmd.RunSQL ("UPDATE T_STOCK_ECART " & _
              "   Set STATE_STOCK.Name = " & VARIABLE_STATE)
NB : Si ce champ est de type texte, il faut encadrer la valeur par des apostrophes '

De plus, je pense qu'elle est incomplète.
Un Update dans lequel on ne précise pas de Where risque fort de mettre à jour tous les champs de ta table. Il faut lui dire quel enregistrement mettre à jour.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
b3rz3k Messages postés 8 Date d'inscription jeudi 10 février 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 15:00
Salut, merci pour ta réponse,

Le NB = NB + 1 me sert juste d'indicateur, j'ai un msgbox après pour me dire combien de fois il est rentré dans le IF.c'est juste que quand j'ai copié mon code il est passé sur la même ligne que ma requête...


Sinon voilà, je crois que tu m'a bien eclairé, je vais faire un Where ( ??? = LIGNE2)
en faite ce qu'il me manque c'est la commande qui remplace les ??? est qui me permet de savoir à quel ligne se trouve mon


("UPDATE T_STOCK_ECART " & _
              "   Set STATE_STOCK.Name " & VARIABLE_STATE Where(LECTURE_CLEF_STOCK2.current LIGNE2))

je vais donc tester tout ceci ;) mais si tu connais la commande pour ce
LECTURE_CLEF_STOCK2.current je veux bien :)
0
b3rz3k Messages postés 8 Date d'inscription jeudi 10 février 2011 Statut Membre Dernière intervention 18 mai 2011
17 mai 2011 à 16:02
Merci, j'ai réussi à me dépatouiller ;)
0
Rejoignez-nous