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

Résolu
gwenthecelte -  
 gwenthecelte -
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. gwenthecelte
     
    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 ...
    ;-)
    0
  2. bnb
     
    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! ;-)
    0
  3. bnb
     
    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
    0
  4. gwenthecelte
     
    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.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gwenthecelte
     
    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
    0
  7. bnb
     
    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
    0
  8. gwenthecelte
     
    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 ;-)
    0