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 :

Boucle pour parcourir les enregistrements d'une requête dynamique [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Mai 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut Boucle pour parcourir les enregistrements d'une requête dynamique
    Bonjour chère membre. Je sollicite votre aide en VBA ACCESS

    En effet j’ai un formulaire de recherche basé sur une requête dynamique.

    Le formulaire propose une liste déroulante qui comprend le nom des clients.
    Lorsqu’on choisit le nom du client le formulaire se rafraîchit et affiche uniquement les info de ce client.

    Mon but est par la suite (Après l’évènement mise a jour de cette liste déroulante) parcourir le champ numero_commande et les stocker dans une variable. J’ai pensé a utiliser une boucle mais il me stocke que le premier numero_commande, or moi je souhaiterais parcourir tous les numero_commande qui s’afficheront.

    Je joins ma base pour de plus ample info, elle au format ACCESS 2000. Le formulaire en question est fHistoriqueCommande

    test.rar

    Donc je resume : Comment parcourir les enregistrements d’un formulaire a l’aide d’une boucle et les stocker dans une variable pour une utilisation ultérieure ?

    Merci d'avance pour votre aide
    Cordialement,

    "C'est une requête SQL qui entre dans un bar, et le serveur répond : « Il n'y a plus de tables ! ».
    Refusée au bar, la requête SQL veut aller en boîte et le videur lui dit : « Non, dehors ! C'est select ici. »

    "

    Sankara Adama
    A+

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Stocker les résultats d'une requête dans une variable ne me parait pas la meilleur chose à faire.

    Ceci dit pour répondre à ta question, tu peux utiliser un objet de type Collection.

    Ici un exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function LireListeCommande(prmForm as form) as collection
       dim result as new Collection
       dim r as dao.recordset: set r=prmForm.recordsetclone 'Accède à une copie des données
     
       '=== Parcoure les enregistrements du formulaire
       do while not r.eof
          call result.add(r![numero_commande])
          r.movenext
       loop
       '--- Parcoure les enregistrements du formulaire
     
       set r=nothing
       set LireListeCommande=result:set result=nothing
    end function
    Pour l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim listeCommande as collection
    set listeCommande=LireListeCommande(me) 'Lit les commandes du formulaire où s'éxécute ce code.
    dim numCommande as variant: for each numCommande in listeCommande
       debug.print numCommande
    next numCommande
    set listeCommande=nothing
    La collection accepte n'importe quel type donc tu pourrais passer quelque chose de plus complexe qu'un simple numéro de commande.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Mai 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonjour Marot content de vous revoir😁, sa faisait un moment👋

    Citation Envoyé par marot_r Voir le message

    Stocker les résultats d'une requête dans une variable ne me parait pas la meilleur chose à faire.
    Je me suis mal exprimé on dirait....
    Mon but est de récupérer ces numéro de commande et pouvoir ensuite effectuer des actions spécifiques. Il s'agit d'additionner la quantité d'un même articles présent dans ces numéro de commandes
    Ex: si le numéro commande 2 à pour détail commande 4 citron, 3 ananas et le numéro de commande 5 à pour détail commande 2 citron, 4 ananas. Je souhaiterais avoir dans le même formulaire le résultat suivant
    citron 6
    ananas 7

    Si je pouvais récupérer ces numéro de commande qui s'affiche dans le formulaire grâce à une boucle alors j'executerais une requête sélection qui selectionnerais le détail de la commande et m'additionnerais la quantité en fonction du produit


    J'ai placer le code de la fonction LireListeCommande juste après l'option explicit puis sur
    l'événement after-update de ma liste déroulante FiltreNomClient qui me liste le nom des clients j'ai placé le reste du code c'est à dire
    dim listeCollection as Collection
    Set listeCommande = LireListeCommande(me)
    .........


    Mais après mise à jour de cette liste déroulante un message d'erreur se déclenche
    Aucun enregistrement en cour

    C'est sûrement moi qui ne c'est pas ou place votre code.

    Si vous ne comprenez pas toujours ce que je veux obtenir comme résultat alors dite le moi, je ferais des captures d'ecran de ce je je veux
    Cordialement,

    "C'est une requête SQL qui entre dans un bar, et le serveur répond : « Il n'y a plus de tables ! ».
    Refusée au bar, la requête SQL veut aller en boîte et le videur lui dit : « Non, dehors ! C'est select ici. »

    "

    Sankara Adama
    A+

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    OK, compris.

    Remplace donc ton code par une requête de regroupement et un sous-formulaire.
    Access va faire tout le boulot pour toi.

    1. Pour faire une requête de regroupement faire une requête de sélection (une requête "ordinaire") avec les champs qui t'intéresse (ici la commande et le code produit 2 fois).
    2. Verifie que ta requête donne bien ce que tu attends.
    3. Reviens en mode création et appuis sur l'icône Total (celle avec le sigma majuscule qui ressemble à un 3 à l'envers).
    4. Access affiche une ligne "Regoupement".
    5. Pour la commande tu choisis "Refroupement"
    6. Pour le 1er code produit tu choisis "Refroupement".
    7. Pour le 2nd code produit tu choisis "Compter" (ou quelque chose comme cela).
    8. Vérifie que ta requête donne bien ce que tu attends, c-à-d : la commande, le code produit et le nombre de produits de ce type dans la commande.
    9. Pour éviter d'avoir un champ nommé du genre "Nombre de CodeProduit", tu peux utiliser un alias en mettant devant le 2nd codeProduit quelque chose comme NbProduit:.


    Pour l'erreur, est-ce qu'il y a bien des enregistrements dans le formulaire ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre actif

    Homme Profil pro
    Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Inscrit en
    Mai 2014
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Elève au Lycée ayant pour ambition Ingenieur Informaticien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 285
    Points : 268
    Points
    268
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Ok superbe c'est exactement ce que je voulais.
    Merci infiniment d'être toujours la, Marot
    Cordialement,

    "C'est une requête SQL qui entre dans un bar, et le serveur répond : « Il n'y a plus de tables ! ».
    Refusée au bar, la requête SQL veut aller en boîte et le videur lui dit : « Non, dehors ! C'est select ici. »

    "

    Sankara Adama
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2014, 12h02
  2. Réponses: 7
    Dernier message: 16/04/2013, 20h57
  3. Réponses: 2
    Dernier message: 04/06/2009, 15h49
  4. Réponses: 8
    Dernier message: 21/09/2007, 15h51
  5. Réponses: 3
    Dernier message: 04/05/2006, 14h00

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