IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

VBA Boucle do while


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut VBA Boucle do while
    Bonjour à tous,
    Svp, j’ai besoin d’aide en vba (je suis novice).
    Mon problème est que ma boucle ne fait pas tous les enregistrements, je dois modifier chaque ligne saisie du sous formulaire dans ma table produits, le pb c’est qu’il modifie d’une ligne : formulaire :commande2 ; sous formulaire : DetCdeSForm ; voilà ma le code que j’ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Compare Database
    Dim rs As DAO.Recordset
    Dim n As Integer
    Private Sub Commande21_Click()
     
    With Forms("commandes2").Controls("DetCdeSform").Form.RecordsetClone
      .MoveLast
      Debug.Print .RecordCount
      n = .RecordCount
     
    End With
        Set rs = CurrentDb.OpenRecordset("Produits", dbOpenDynaset)
        Do While i < n
     
        rs.FindFirst "[Réf Produit] = " & Me!DetCdeSform![Réf Produit].Value
        rs.Edit
        rs("stock") = rs("stock") - Me!DetCdeSform!Quantité.Value
          rs.Update
           i = i + 1
     
     Loop
     
    End Sub
    Merci bcp

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Par défaut
    Bonjour à toi,
    Un peu de recherches sur le forum et dans les tutoriels et tu trouveras ta réponse
    Forum : J'ai posté ça ce matin

    Tutoriel : Définition et manipulation de données avec DAO

    Tu n'as pas besoin d'un .moveLast pour récupérer le .RecordCount de ton recordset. Un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Do While Not rs.EOF
            rs.Edit
            rs(0) = uneValeur
            rs(1) = uneAutreValeur
            rs.Update
            rs.MoveNext
        Loop
    fait l'affaire

    Tu as oublié le .moveNext donc tu ne passes pas sur l'enregistrement suivant de ton recordset. Un peu de lecture ne te feras pas de mal

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut
    bonjour Paidge.
    Merci pour ta éponse et ton conseil, j'ai lu les deux liens et voilà ce que j'ai pu faire (sans oublier que je suis un débutant):
    le problème que j'ai maintenant c'est qu'il ne modifie que le premier enregistrement, le reste rien. merci d'avance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim rs As DAO.Recordset
    Dim fld As DAO.Field
    Dim strsql As String
    Dim n As Integer
     
    Private Sub Commande21_Click()
     
    strsql = "select [stock]" & " from produits" & " where [réf produit]=" & Me!DetCdeSform![réf produit].Value & Quantité & ""
    Set rs = CurrentDb.OpenRecordset(strsql)
     
    Do While Not rs.EOF
    For Each fld In rs.Fields
      rs.Edit
      rs("stock") = rs("stock") - Me!DetCdeSform!Quantité.Value
      rs.Update
     Next fld
     rs.MoveNext
    Loop
     
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi & Quantité dans ta requête SQL

    Pourquoi parcourir tous les champs For Each fld In rs.Fields
    alors que tu ne modifies que le champ Stock ?

    réf produit c'est un numérique ?

    Dans ta table produit, celui-ci n'apparait qu'une seule fois ? S'il apparait plusieurs fois, je pense que tu as un petit soucis de conception.

    Philippe

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut
    Bonjour Philippe,
    Merci bcp pour ton aide et le temps que tu m’accordes.
    Ci-joint une doc avec image écran, Tables: Produits, détail produit; formulaire :commande2 (inclus le sous fomulaire DetCdeSform).

    - Pourquoi & Quantité dans ta requête SQL: c'était sur le début pour garder la bonne Réf Produit.
    - Pourquoi parcourir tous les champs For Each fld In rs.Fields
    alors que tu ne modifies que le champ Stock ? heu oui c'est vraie.

    En fin c'est une base de donnée qui me sert à gérer les stocks, le formulaire me créer un BL et quand je clique sur le bouton il devrait mettre à jour mon stock.
    je bloc, je n'arrive pas à m'avancer.

    Voilà je pense que j'ai détaillé un peu ma base. Merci encore
    Fichiers attachés Fichiers attachés
    • Type de fichier : doc BD.doc (417,0 Ko, 180 affichages)

Discussions similaires

  1. Programmation VBA (boucle do while loop)
    Par Dbratt dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 13/08/2014, 23h41
  2. [XL-2010] VBA boucle DO WHILE ou DO UNTIL
    Par Nadine Soulage dans le forum Excel
    Réponses: 11
    Dernier message: 11/07/2014, 21h37
  3. Réponses: 2
    Dernier message: 06/02/2007, 15h05
  4. [VBA] Boucle do while
    Par Pitou5464 dans le forum Access
    Réponses: 8
    Dernier message: 23/08/2006, 10h17
  5. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo