MoveNext ne marche pas sur VBA access - Microsoft 365

Résolu
Bonjour,

Je tourne sur le bout de code ci-dessous depuis plusieurs heures sans comprendre pourquoi la Méthode MoveNext ne parche pas. Je reste sur le meme enregistrement alors qu'il y a plusieurs données dans la table. Je précise que cette table est liée:

Dim dbs As dao.Database
Dim rsChequierCmde As dao.Recordset
Dim lsSQL As String

On Error GoTo GestError
Set dbs = CurrentDb
lsSQL = "SELECT * Client ;"
Set rsChequierCmde = dbs.OpenRecordset(lsSQL)

rsChequierCmde.MoveFirst

With rsChequierCmde
Do Until .EOF
lsFilter = rsChequierCmde.Fields("Nom_Client")
rsChequierCmde.MoveNext
Loop

End With

2 réponses

  1. Contributeur Ambassadeur
    bonjour,

    que veux-tu dire par "Je reste sur le meme enregistrement"?

    merci d'utiliser les balises de code quand tu partages du code, comme expliqué ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    et, pour du VBA, précise "basic"

    je vois deux erreurs dans ton code:
    1) tu peux faire
    lsSQL = "Client"

    2) où se trouve
    GestError
    ?

    par ailleurs, supprime la ligne
    on error
    , cela ne peut que te cacher des erreurs.

    je me demande pourquoi tu fais une boucle, alors que tu n'utilises que le dernier enregistrement.
    1
    1. Je voudrais faire une boucle sur tous les enregistrements (du 1er au dernier) capturés pas une requette.
      Dans ma requette j’utilise les 4 tables liées suivantes issues de 4 bases de données:
      1. Cheques_Imprimes
      2. Client
      3. Agence
      4. Banque
      Mon problème est qu’à l’exécusion de .MoveNext je reste sur le même enregistrement.

      CODE COMPLET :

      Public Sub ImpressionCommandeCheque(ByVal BarreNonBarre As Integer, ByVal ChequeChequierOuCmde As Integer, ByVal LaPLanche As Integer, LeCodeBanque As String, ByVal LeCodeCmde As String, ByVal lsREfChequeChequier As String)
      Dim dbs As dao.Database
      Dim rsChequierCmde As dao.Recordset
      Dim lsSQL As String
      Dim lsFilter As String
      
      On Error GoTo GestError
      
      Set dbs = CurrentDb
      
      ''*********************************************************************************************************
      '' Criteres de sélection des enrégistrements de la COMMANDE à imprimer
      ''*********************************************************************************************************
       lsSQL = "SELECT Cheques_Imprimes.Type_Chequier, Cheques_Imprimes.BonLivraison, Cheques_Imprimes.Feuillet, Cheques_Imprimes.Ligne, Cheques_Imprimes.RIB_Complet, Client.Nom_Client, Client.Adresse, Cheques_Imprimes.Numero_Cheque, Cheques_Imprimes.ChequeOUlettre, Cheques_Imprimes.LigneCMC7, Cheques_Imprimes.Code_Banque, Agence.Code_Agence, Client.Numero_Cpte, Client.CleRIB, Agence.Nom_Agence, Agence.Adresse AS Adresse_Agence " _
                          & "FROM Banque INNER JOIN (Agence INNER JOIN (Client INNER JOIN Cheques_Imprimes ON Client.RIB_Complet = Cheques_Imprimes.RIB_Complet) ON Agence.Code_Agence = Client.Code_Agence) ON (Client.Code_Banque = Banque.Code_Banque) AND (Banque.Code_Banque = Cheques_Imprimes.Code_Banque) AND (Banque.Code_Banque = Agence.Code_Banque) " _
                         & "WHERE (Cheques_Imprimes.[ChequeOUlettre] ='1') And (Cheques_Imprimes.[Nr_Commande]='" + LeCodeCmde + "')AND(Cheques_Imprimes.[Code_Banque] ='" + LeCodeBanque + "')And (Client.[RIB_Complet] = Cheques_Imprimes.[RIB_Complet])" _
                         & "ORDER BY Cheques_Imprimes.Ligne, Cheques_Imprimes.Feuillet, Cheques_Imprimes.Numero_Cheque, Cheques_Imprimes.RIB_Complet ASC ;"
      
      Set rsChequierCmde = dbs.OpenRecordset(lsSQL)
      rsChequierCmde.MoveFirst
      
      
      With rsChequierCmde
        Do Until .EOF
        
            lsFilter = .Fields("Nom_Client") ' "[Cheques_Imprimes.Ligne]=" & rsChequierCmde.Fields("Ligne")
            MsgBox lsFilter
           .MoveNext  
       Loop
      
      End With
      
      Set dbs = Nothing 'FERMETURE DE LA BASE  DE SONNEES
      Exit Sub
      
      GestError:
        MsgBox Err.Number & " : " & Err.Description
        Resume Next
      
      End Sub
      
      0
      1. Contributeur Ambassadeur
        et ainsi?
        Do Until rsChequierCmde.EOF
              lsFilter = rsChequierCmde.Fields("Nom_Client") ' "[Cheques_Imprimes.Ligne]=" & rsChequierCmde.Fields("Ligne")
              MsgBox lsFilter
             rsChequierCmde.MoveNext  
         Loop
        0
      2. @yg_beÇa marche.

        Merci infiniment.
        0
      3. Contributeur Ambassadeur
        @ggsempcomme tu le vois, ton utilisation de
        with
        empêchait l'effet du
        movenext
        .
        peux-tu marquer la discussion comme résolue?
        0
      4. @yg_beThanks
        0