Boucle en VBA access 2000

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

  • Votes
  • Date
  • Date décroissante
  1. 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
      1. 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 ?
        1. Modérateur
          Ta zone qui contient le numéro de commande...

          [numero...].value ?
      2. 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
        1. Modérateur
          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é...
      3. 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
        1. 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
          1. Modérateur
            Si j'ai bien compris, tu souhaites éditer une série de documents quand on appuie sur un bouton dans un formulaire...
            1. Modérateur
              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...