Boucle en VBA access 2000

herve250wrf Messages postés 15 Statut Membre -  
 herve250wrf -
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
Configuration: Windows XP
Firefox 2.0.0.16

10 réponses

  1. herve250wrf
     
    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
  2. bnb
     
    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
  3. herve250wrf
     
    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
    1. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Ta zone qui contient le numéro de commande...

      [numero...].value ?
      0
  4. herve250wrf
     
    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
    1. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. herve250wrf
     
    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
  7. herve250wrf
     
    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
  8. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    tu as une erreur ?
    -1
  9. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Si j'ai bien compris, tu souhaites éditer une série de documents quand on appuie sur un bouton dans un formulaire...
    -1
  10. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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