MoveNext ne marche pas sur VBA access - Microsoft 365

Résolu
ggsemp Messages postés 17 Statut Membre -  
ggsemp Messages postés 17 Statut Membre -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
  2. ggsemp Messages postés 17 Statut Membre
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      et ainsi?
      Do Until rsChequierCmde.EOF
            lsFilter = rsChequierCmde.Fields("Nom_Client") ' "[Cheques_Imprimes.Ligne]=" & rsChequierCmde.Fields("Ligne")
            MsgBox lsFilter
           rsChequierCmde.MoveNext  
       Loop
      0
      1. ggsemp Messages postés 17 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ça marche.

        Merci infiniment.
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > ggsemp Messages postés 17 Statut Membre
         
        comme tu le vois, ton utilisation de
        with
        empêchait l'effet du
        movenext
        .
        peux-tu marquer la discussion comme résolue?
        0
      3. ggsemp Messages postés 17 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Thanks
        0