Problème boucle VBA (access) sur ".movenext&q

Résolu
Bonjour a tous,

décidément deux postes en deux jours, faudrait pas que cela devienne une habitude. ;-)

j'ai un bout de code de rien du tout qui parcour un recorset de mon formulaire; jusque la ca va : Mon recordset contient bien les valeurs contenu dans mon formulaire.

Cependant,la boucle qui permet de traité les infos, ne passe jamais a la ligne suivante. Je crois que d'autres personnes ont eu le problème mais je n'ai pas trouvé de poste "Resolu".

Voici a quoi il ressemble :

Dim rstSubFormInvoice As DAO.Recordset
Set rstSubFormInvoice = Form_SubFormInvoices.RecordsetClone

With rstSubFormInvoice
   Do while rstSubFormInvoice.EOF
     If Form_SubFormInvoices.Txt_Ammount.Text <> "" Then
        W_AmountInvoiceSite = Form_SubFormInvoices.Txt_Ammount
        
    Else
        W_AmountInvoiceSite = "123" 
     End If
     
     rstSubFormInvoice.MoveNext
   Loop
End With


Si vous pouviez m'aidé merci de vous attardé quelques instants.
Merci d'avance pour les réponses proposées.
Configuration: Windows Vista
Firefox 3.0.3

7 réponses

  1. pardon pour la faute de frappe, c'est ".movenext', mais s'il y a d'autre syntahxe je suis preneur.
    Merci encore pour vos futures réponses, je l'espère/

    allé courage les gars ...
    ;-)
    1. Essaie plutôt cela et compare avec ton code:
      Dim rstSubFormInvoice As DAO.Recordset
      Set rstSubFormInvoice = Form_SubFormInvoices.RecordsetClone

      With rstSubFormInvoice
      .movefirst
      Do Until .EOF
      If Form_SubFormInvoices.Txt_Ammount.Text <> "" Then
      W_AmountInvoiceSite = Form_SubFormInvoices.Txt_Ammount

      Else
      W_AmountInvoiceSite = "123"
      End If

      .MoveNext
      Loop
      End With

      Beaucoup plus propre et lisible comme code! ;-)
      1. Dim rstSubFormInvoice As DAO.Recordset
        Set rstSubFormInvoice = Form_SubFormInvoices.RecordsetClone

        With rstSubFormInvoice
        .movefirst
        Do UNTIL .EOF
        If Form_SubFormInvoices.Txt_Ammount.Text <> "" Then
        W_AmountInvoiceSite = Form_SubFormInvoices.Txt_Ammount

        Else
        W_AmountInvoiceSite = "123"
        End If

        .MoveNext
        Loop
        End With
        1. merci, le code fonctionne, mais j'ai le meme problème :
          ma variable recoit toujours la valeur du premier champ et ne passe jamais aux suivants.

          il boucle autant de fois qu'il y a d'enregistrement, mais ne me donne que la premiere valeur du champ "txt_ammount"

          merci quand meme, si tu as une autre idée. je suis preneur.
          1. je pensais pouvoir faire une boucle FOR sur mon recortset avec un indice (I), et l'incrémenter de 1 a chaque fois que passe dans la boucle, man je ne connais pas la syntaxe pour spécifier au recorset que je veux la valeur du champ (I).
            genre :

            recordeset.fields("champ"(I)).text

            je sais pas si tu vois ce que je veux dire...

            merci
            1. Change peut-être ton if
              Au lieu de faire référence à un controle de ton formulaire, récupère l'enregistrement de ton recordset

              If not (.Txt_Ammount = vbnullstring) Then
              W_AmountInvoiceSite = .Txt_Ammount
              Else
              W_AmountInvoiceSite = "123"
              End If

              Remplace le txt_ammount par le nom du champs de ton recordset

              Le UNTIL c'est pour parcourir le recordset JUSQU'A EndOfFile
              Le WHILE que tu avais mis c'est pour parcourir le recordset TANT QUE EOF
              Puisque cette condition n'est pas remplie il ne bouclait pas, si tu veux garder le while alors "While Not .EOF"

              Le With permet d'associer plusieurs méthodes et/ou propriétés à un même objet, puisque tu fais référence à l'abjet dans le with, tu ne dois plus répéter l'objet avant sa propriété ou sa méthode:
              MAUVAIS:With rstSubFormInvoice
              Do while rstSubFormInvoice.EOF
              BON:With rstSubFormInvoice
              Do until .EOF
              1. oui exactement, je viens de trouvé!!! merci

                cette syntaxe fonctionne :

                With rstSubFormInvoice
                .movefirst
                Do UNTIL .EOF
                If rstSubFormInvoice.fields(2) <> "" Then
                W_AmountInvoiceSite = rstSubFormInvoice.fields(2)

                Else
                W_AmountInvoiceSite = "123"
                End If

                .MoveNext
                Loop
                End With

                merci beaucoup tu m'as mis sur la piste

                a une prochaine et bonne continuation ;-)