MoveNext ne marche pas sur VBA access - Microsoft 365

Résolu/Fermé
ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021 - 13 avril 2021 à 18:41
ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021 - 14 avril 2021 à 12:24
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
A voir également:

2 réponses

yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270
13 avril 2021 à 19:49
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
ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021
14 avril 2021 à 08:40
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
yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270
14 avril 2021 à 10:48
et ainsi?
Do Until rsChequierCmde.EOF
      lsFilter = rsChequierCmde.Fields("Nom_Client") ' "[Cheques_Imprimes.Ligne]=" & rsChequierCmde.Fields("Ligne")
      MsgBox lsFilter
     rsChequierCmde.MoveNext  
 Loop
0
ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021 > yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022
14 avril 2021 à 11:23
Ça marche.

Merci infiniment.
0
yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270 > ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021
14 avril 2021 à 11:34
comme tu le vois, ton utilisation de
with
empêchait l'effet du
movenext
.
peux-tu marquer la discussion comme résolue?
0
ggsemp Messages postés 15 Date d'inscription jeudi 11 octobre 2018 Statut Membre Dernière intervention 30 avril 2021 > yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022
14 avril 2021 à 12:24
Thanks
0