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 Access concatener deux Query


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Par défaut VBA Access concatener deux Query
    Bonjour

    Mon objectif est double :
    - faire trois requêtes en vba
    - Concaténer deux requêtes en utilisant le résultat de la troisième

    exemple
    requête 1 : renvoie le nom de l'ingrédient qui doit être utilisé
    requête 2 : revoie le poids total de la recette
    requête 3 : revoie la quantité de l'ingrédient dans la recette


    Résultat voulu : NomIngrédient1 (Quantité en %), NomIngrédient2 (Quantité en %), ... en fonction du nombre d'ingrédient de la recette.

    J'ai réussi à faire la requête sur le nom de l'ingrédient
    J'ai réussi à faire la requête sur la quantité totale (même si elle n'est pas parfaite , elle renvoie la bonne valeur)
    Je n'ai pas réussi à faire la troisième requête.

    > comment diviser une valeur par un nombre obtenu dans une autre requête (requête 2) ?
    > comment concaténer les deux requêtes ?


    Ci dessous le code d'obtention de la somme des ingrédients; la valeur "SommeRecetteVersion" obtenue à la fin est Public
    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
    24
    25
    26
    27
     
    Public Sub ValeurSomme(ByVal RecetteVersion As Integer)
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim requete As DAO.QueryDef
    Dim sSQL As String
    Dim SomRecetteVersion
     
    Set db = CurrentDb
    Set requete = db.CreateQueryDef("", "SELECT ..................." _
    & " FROM ....................." _
    & " GROUP BY ..............................." _
    & " HAVING ...............................=" & RecetteVersion)
     
    Set rst = requete.OpenRecordset()
    rst.MoveFirst
     
    If Not rst.EOF Then
          rst.MoveFirst
          While Not rst.EOF
              SomRecetteVersion = SomRecetteVersion & rst.Fields(0).Value & " "
              rst.MoveNext
          Wend
    End If
    Set rst = Nothing
    SommeRecetteVersion = SomRecetteVersion
    End Sub


    Ci dessous le code pour concaténer les deux requêtes

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Public Function RequeteConcatenation()
     
    Dim db As DAO.Database
     
    Dim rst As DAO.Recordset
    Dim rst1 As DAO.Recordset
     
    Dim requete As DAO.QueryDef
    Dim requete1 As DAO.QueryDef
     
    Dim valeur as Integer
     
    Set db = CurrentDb
     
    Call ValeurSomme(RecetteVersion) ' ici  RecetteVersion sera donné par une txtbox du formulaire
     
     
    Set requete = db.CreateQueryDef("", "SELECT .......")
     
    Set requete1 = db.CreateQueryDef("", "SELECT .......")
     
    Set rst = requete.OpenRecordset()
    Set rst1 = requete1.OpenRecordset()
    rst.MoveFirst
     
    If Not rst.EOF Then
          rst.MoveFirst
          While Not rst.EOF
              valeur = valeur & rst.Fields(0).Value & " ( " & valeur & rst1.Fields(0).Value & " %)"
              rst.MoveNext
              rst1.MoveNext
          Wend
    End If
     
    Set rst = Nothing
    Set rst1 = Nothing
    msgbox valeur
    End Function
    Questions :
    comment concaténer les deux requêtes
    Comment diviser la quantité par le poids total et ainsi obtenir le % de l'ingrédient ?


    Merci de votre aide

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour et bonne année.

    La solution qui me paraît est de vraiment créer les requêtes puis les utiliser.

    Donc tu crées tes 2 requêtes source avec l'éditeur de requête et une fois au point tu crées la 3ième en faisant un jointure entre requête1 et requête2.

    Si tes champs ne changent pas tu peux utiliser requête3 directement.

    Sinon, tu fais afficher les SQL (l'icône d'affichage en haut à gauche) et tu t'en inspires pour définir ton code.

    Note que quand je fais des choses comme cela, je préfère que la requête existe déjà et de simplement modifier son SQL plutôt que de la recréer à chaque fois.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim db as dao.database: set db=currentdb
    dim q as dao.querydefs: set q=db.querydefs("maRequete")
    q.sql="Ici le nouveau SQL"
    set q=nothing
    db.close: set db=nothing
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Par défaut
    Bonsoir

    Excellent année.
    Merci pour la réponse.

    J ai trouvé une solution quasi identique à vous ce jour.
    Je me sert de la fonction DLookup qui est elle meme dans une boucle.
    Si vous souhaitez le code, merci de me le demander.

    Bonne fin de journée

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

Discussions similaires

  1. [AC-2003] Enregistrement des données d'un formulaire dans deux tables en VBA Access
    Par jarodCameleon dans le forum VBA Access
    Réponses: 10
    Dernier message: 23/06/2010, 23h01
  2. [AC-2002] Concatenation de fichiers XLS en VBA Access
    Par volganne dans le forum VBA Access
    Réponses: 9
    Dernier message: 22/03/2010, 09h52
  3. Ajout et suppression entre deux ListBox [VBA/ACCESS]
    Par Lalla lbatoul dans le forum IHM
    Réponses: 1
    Dernier message: 21/05/2009, 15h19
  4. Réponses: 4
    Dernier message: 14/12/2008, 03h38
  5. jointure de deux requetes update et select sous vba access
    Par nadia123456 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/09/2008, 08h15

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