Code VBA qui fonctionne bien pour un UPDATE mais pasplusieur

Fermé
Kyndred Messages postés 16 Date d'inscription mardi 3 mai 2022 Statut Membre Dernière intervention 30 janvier 2023 - 9 nov. 2022 à 15:27
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 9 nov. 2022 à 23:01

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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
9 nov. 2022 à 17:38

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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
9 nov. 2022 à 18:16

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

0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
9 nov. 2022 à 23:01

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