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

Résolu/Fermé
gwenthecelte - 17 oct. 2008 à 10:29
 gwenthecelte - 17 oct. 2008 à 13:23
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.

7 réponses

gwenthecelte
17 oct. 2008 à 11:33
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
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
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
gwenthecelte
17 oct. 2008 à 12:55
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gwenthecelte
17 oct. 2008 à 13:05
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
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
gwenthecelte
17 oct. 2008 à 13:23
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