Boucle en VBA access 2000

Fermé
herve250wrf Messages postés 13 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 février 2011 - 13 oct. 2008 à 16:43
 herve250wrf - 14 oct. 2008 à 12:17
Bonjour,
j'ai un problème avec cette boucle qui ne fait pas défilé mes enregistrement
les enregistrements sont issu d'un formulaire
et je doit éditer les États pour toute les valeurs du formulaire
je doit régler le problème au plus vite merci de votre aide

Voici la boucle

Private Sub classeur_Click()
Dim stDocName As String
Dim Compteur As Integer
Dim i As Integer
Dim comp As Integer
Do While i Is Empty
i = [Numéro de commande]
MsgBox (i)
'Client simier
If [Numéro client] = 1070 Then
Else
'Bon de prépa1
stDocName = "Classeur Bon Prépa"
DoCmd.OpenReport stDocName, acNormal
'Bon de prépa2
stDocName = "Classeur Bon Prépa"
DoCmd.OpenReport stDocName, acNormal
'BL
If [facturation] = "EA" Then
stDocName = "Classeur BL EA"
DoCmd.OpenReport stDocName, acNormal
Else
stDocName = "Classeur BL PP"
DoCmd.OpenReport stDocName, acNormal
End If
'Etiquette palette1
stDocName = "Classeur etiquette Palette"
DoCmd.OpenReport stDocName, acNormal
'Etiquette palette2
stDocName = "Classeur etiquette Palette"
DoCmd.OpenReport stDocName, acNormal
'Etiquette caisse
stDocName = "Classeur Etiquette Caisse"
DoCmd.OpenReport stDocName, acNormal
End If
Loop
End Sub

10 réponses

herve250wrf
14 oct. 2008 à 09:43
ok j'ai refait la modif inverse mais comme je débute en vba je galaire un peut
j'ai basée mes les requette qui donne les etat sur la contion suivante "Formulaires![Classeur]![Numéro de commande]"
mon probléme et que la boucle ne tourne pas
je pense que soit la macro soit les requette ne sont pas basées sur la bonne source
meci de votre aide je suis dans la m.. ça doit tournée pour ce midi
voici la macro
Private Sub classeur_Click()
Dim stDocName As String
Dim Compteur As Integer
Dim i As Integer
Dim comp As Integer
Set rs = CurrentDb.OpenRecordset("Table edition pour classeur")
rs.MoveFirst
Do Until rs.EOF
i = [numero de commande]
MsgBox (i)
'Client simier
If [Numéro client] = 1070 Then
Else
'Bon de prépa1
stDocName = "Classeur Bon Prépa"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal
'BL
If [facturation] = "EA" Then
stDocName = "Classeur BL EA"
DoCmd.OpenReport stDocName, acNormal
Else
stDocName = "Classeur BL PP"
DoCmd.OpenReport stDocName, acNormal
End If
'Etiquette palette1
stDocName = "Classeur etiquette Palette"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal
'Etiquette caisse
stDocName = "Classeur Etiquette Caisse"
DoCmd.OpenReport stDocName, acNormal
End If
rs.MoveNext
Loop
On Error Resume Next
Set rs = Nothing
End Sub
1
Normal pour plusieurs raisons

La 1re "Do While i Is Empty " vu que I n'est pas empty ta boucle ne récupère que le 1er enregistrement!
2. Si les enregistrements de ton formulaire sont stockés dans une table, vaut mieux ouvrir un recordset de ta table et lire tous les enregistrement.

Set rs= currentdb.openrecordset"Ma Table")
rs.movefirst
do until rs.eof (au lieu de ton do while I Is Empty)
...
rs.movenext
loop
on error resume next
set rs = nothing
end sub
0
herve250wrf
13 oct. 2008 à 18:17
merci pour vos reponse,
pour le première question de blux (si j'ai une erreur) c'est non tout roule bien
pour la solution de bnb elle ne résout pas mon probléme
mes etat sont liè au numéro de commande du formulaire je pense que c'est çà mon probléme
sur quel valeur je doit faire pointer mon etat ?
0
blux Messages postés 26122 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 juin 2024 3 293
13 oct. 2008 à 21:39
Ta zone qui contient le numéro de commande...

[numero...].value ?
0
herve250wrf
14 oct. 2008 à 08:55
Merci pour cette réponse blux mes rien ne change si je rentre [numero de commande] dans les requettes la macros me fait une edition de toute les commandes et non pas que de la selection
0
blux Messages postés 26122 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 juin 2024 3 293
14 oct. 2008 à 09:37
ben là, c'est normal, tu ouvres tes états sans restriction sur un critère (wherecondition), donc il édite tous les enregistrements de la requête/table sur laquelle il est basé...
-1

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

Posez votre question
herve250wrf
14 oct. 2008 à 10:31
Oui c'est bien ça
0
herve250wrf
14 oct. 2008 à 11:22
Blux,
Voici le tout
le formulaire est baseés sur une table crée par une requette
le formulaire affiche une serie d'enregistrement en locurance la liste des expedition de la semaine
pour les etat il sont bien bases sur la meme table.
j'ai réussit à faire passer à l'enregistrement suivant maismaintenet je ne trouve pas la boucle qui tourne bien tout du moin sans message d'erreur
Voici ma modification en gras
Private Sub Classeur_Click()
Dim stDocName As String
Dim i As Integer
i = [numero de commande]
MsgBox (i)
'Client simier
If [Numéro client] = 1070 Then
Else
'Bon de prépa1
stDocName = "Classeur Bon Prépa"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal
'BL
If [facturation] = "EA" Then
stDocName = "Classeur BL EA"
DoCmd.OpenReport stDocName, acNormal
Else
stDocName = "Classeur BL PP"
DoCmd.OpenReport stDocName, acNormal
End If
'Etiquette palette1
stDocName = "Classeur etiquette Palette"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal
'Etiquette caisse
stDocName = "Classeur Etiquette Caisse"
DoCmd.OpenReport stDocName, acNormal
End If
DoCmd.GoToRecord , , acNext

End Sub
0
herve250wrf
14 oct. 2008 à 12:17
J'ai trouvez une solution provisoir
si vous avez une idée je suis preneur
merci
Voici ma solution

Private Sub Classeur_Click()
Dim stDocName As String
Dim Compteur As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 3000
j = [numero de commande]
MsgBox (j)
'Client simier
If [Numéro client] = 1070 Then
Else
'Bon de prépa
stDocName = "Classeur Bon Prépa"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal

'BL
If [fact] = "EA" Then
stDocName = "Classeur BL EA"
DoCmd.OpenReport stDocName, acNormal
Else
stDocName = "Classeur BL PP"
DoCmd.OpenReport stDocName, acNormal
End If
'Etiquette palette
stDocName = "Classeur etiquette Palette"
DoCmd.OpenReport stDocName, acNormal
DoCmd.OpenReport stDocName, acNormal
'Etiquette caisse
stDocName = "Classeur Etiquette Caisse"
DoCmd.OpenReport stDocName, acNormal
End If
DoCmd.GoToRecord , , acNext
Next
End Sub
0
blux Messages postés 26122 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 juin 2024 3 293
13 oct. 2008 à 16:47
Salut,

tu as une erreur ?
-1
blux Messages postés 26122 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 juin 2024 3 293
14 oct. 2008 à 10:29
Si j'ai bien compris, tu souhaites éditer une série de documents quand on appuie sur un bouton dans un formulaire...
-1
blux Messages postés 26122 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 juin 2024 3 293
14 oct. 2008 à 11:03
Donc la premiere chose est de savoir ce qui est affiché dans ton formulaire : un seul enregistrement ou une série d'enregistrements.

Ensuite, il faut savoir sur quoi est basé cet affichage (one-shot ou requête), pour en déduire l'action a effectuer pour le balayage des données.

Puis, en dernier lieu, ouvrir les états (basés sur les mêmes données que le formulaire) avec une restriction sur l'enregistrement en cours...
-1