Code VBA qui fonctionne bien pour un UPDATE mais pasplusieur

Kyndred Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour,

Je viens vers vous car je n'arrive pas a résoudre mon problème, enfaite pour faire simple j'ai un formulaire ou je coche les commandes que je souhaite exporter vers un autre formulaire mais avant de les exporter une requête UPDATE a lieu sur ces enregistrements précédemment coché afin d'aller chercher la valeur du champ Laquage, Ref et NumFiliere par rapport à la référence....

Le code fonctionne lorsque je coche un enregistrement et que j'exporte mais ce code ne fonctionne plus quand je coche plusieurs enregistrement car le champ Laq,Ref et NumFiliere sont tous identique car j'ai l'impression que la requête fait le même UPDATE sur tous les enregistrements coché alors que les valeurs sont à chaque fois différente.

Private Sub Exporter_Click()

Dim base As Database
Dim SQL As String
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSql As String
Dim Valeur As String
Dim test
Dim extraitD As Variant

Dim extraitG As Variant





Set base = Application.CurrentDb

                   
                   
             LongueurCh = Right([NumArticle], 4)

             
                 Set dbs = CurrentDb
 
                strSql = "SELECT * FROM Commande " _
                & " WHERE Selection = True "
 
                Set rst = dbs.OpenRecordset(strSql, dbOpenDynaset)
 
                extraitD = Right(rst.Fields("NumArticle"), 6)
                extraitG = Left(rst.Fields("NumArticle"), InStr(rst.Fields("NumArticle"), extraitD) - 1)
                 
                

                RefLaq = Left([extraitD], 2)
                'MsgBox (Laquage)
                
                               
                
                
                                    
             CurrentDb.Execute "UPDATE Commande " & _
                               "SET Commande.Laquage = '" & RefLaq & "'  Where Selection=True ;"
                               
                
             test = DLookup("[PoidsTH]", "base", "[Référence] = '" & extraitG & "' ")
 
             CurrentDb.Execute "UPDATE Commande " & _
                               "SET Commande.PoidsTH = '" & test & "' Where Selection=True ;"
           ' MsgBox (test)
            
                
              

             CurrentDb.Execute "UPDATE Commande " & _
                               "SET Commande.Ref =  '" & extraitG & "'  Where Selection=True ;"
             
             
             
             CurrentDb.Execute "UPDATE Commande " & _
                               "SET Commande.Longueur = " & LongueurCh & " Where Selection=True ;"
                               
                               
            Filière = DLookup("[Filiere]", "Feuil2", "[Référence] = '" & extraitG & "' ")
            
            CurrentDb.Execute "UPDATE Commande " & _
                              "SET Commande.NumFiliere= '" & Filière & "' Where Selection=True ;"
                              
                               
           

    
           '  CurrentDb.Execute SQL
            

            
DoCmd.RunSQL " INSERT INTO EnAttPlanification(NumOrigine,Numero,NumArticle,CodeVariante,DateCommande,DateLivDemander,QteManquante,QteRestante,QtePretDepart,PoidsManquant,Observations,NomDestinataire,NumDestination,Qte,Longueur,Ref,PoidsTH,Laquage,NumFiliere) " & _
             "SELECT   Commande.NumOrigine, Commande.Numero, Commande.NumArticle, Commande.CodeVariante, Commande.DateCommande, Commande.DateLivDemander, Commande.QteManquante, Commande.QteRestante, Commande.QtePretDepart, Commande.PoidsManquant, Commande.Observations, Commande.NomDestinataire, Commande.NumDestination, Commande.Qte, Commande.Longueur, Commande.Ref, Commande.PoidsTH, Commande.Laquage, Commande.NumFiliere  " & _
              "FROM Commande " & _
              "WHERE Selection=-1;"

DoCmd.RunSQL " DELETE FROM Commande " & _
             " WHERE Selection=-1;"
             

             

base.Close

Me.Requery
Me.Refresh



End Sub

Comme vous pouvez le voir sur la capture les enregistrements ont tous la même valeur alors que ce n'est pas censé être le cas. 

J'espère que je me suis bien exprimer, merci par avance.
Windows / Chrome 107.0.0.0

A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

peux-tu choisir le langage, "basic", quand tu partages du VBA?

Dans le code, tu fais en effet une requête UPDATE qui affecte tous les enregistrements.

La première chose à modifier dans ton code, c'est de faire une boucle afin de parcourir tous les enregistrements de ton recordset, et les traiter un par un. 

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

La seconde chose à modifier, ce sera d'utiliser .edit et .update, au lieu de tous ces CurrentDb.Execute.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Plus ou moins ceci:

Set rst = dbs.OpenRecordset(strSql, dbOpenDynaset)
do while not rst.EOF 
                rst.edit
                extraitD = Right(rst.Fields("NumArticle"), 6)
                extraitG = Left(rst.Fields("NumArticle"), InStr(rst.Fields("NumArticle"), extraitD) - 1)
               RefLaq = Left([extraitD], 2)
                rst!Laquage =  RefLaq 
             test = DLookup("[PoidsTH]", "base", "[Référence] = '" & extraitG & "' ")
             rst!PoidsTH =  test 
             rst!Ref =  extraitG   
             rst!Longueur = LongueurCh 
            Filière = DLookup("[Filiere]", "Feuil2", "[Référence] = '" & extraitG & "' ")
            rst!NumFiliere=  Filière 
            rst.update
            rst.movenext
loop
                              
0