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 + requête + concaténé


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Par défaut boucle + requête + concaténé
    Bonjour à tous,

    Je sollicite votre aide svp.

    J'ai deux tables qui se compense ainsi :

    BORDEREAU : NumeroBordereau, NumeroConstructeur, Indice, Concatener

    TMP3 : NumeroBordereau, NumeroConstructeur, Indice, FE

    Je souhaite balayer la table TMP3 et récupérer tous les FE pour la même clé NumeroBordereau, NumeroConstructeur, Indice de la table BORDEREAU et les concatener dans le champ BORDEREAU.Concatener.

    un exemple pour illustré cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dans la table BORDEREAU : 
     
    NumeroBordereau    | NumeroConstructeur     | Indice  | Concatener
    ------------------------------------------------------------------
    BORD001            |  CONS001               |    B    | 
    ------------------------------------------------------------------
    BORD002            |  CONS002               |    1    |                  
    ------------------------------------------------------------------
    BORD008            |  CONS112               |    F    |                   
    ------------------------------------------------------------------
    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
    Dans la table TMP3 : 
     
    NumeroBordereau    | NumeroConstructeur     | Indice  | FE
    ------------------------------------------------------------------
    BORD001            |  CONS001               |    B    | LET145
    ------------------------------------------------------------------
    BORD001            |  CONS001               |    B    | EBOM9                 
    ------------------------------------------------------------------
    BORD002            |  CONS002               |    1    | EBOM12                  
    ------------------------------------------------------------------
    BORD002            |  CONS002               |    1    | LET114                  
    ------------------------------------------------------------------
    BORD008            |  CONS112               |    F    |                   
    ------------------------------------------------------------------
    BORD008            |  CONS112               |    F    | LET108                  
    ------------------------------------------------------------------
    BORD008            |  CONS004               |    F    | EBOM009                  
    ------------------------------------------------------------------
    Toutes les clés NumeroBordereau, NumeroConstructeur, Indice de la table BORDEREAU se retrouvent dans la table TMP3 et je dois récupérer pour chaque clé le concaténer de toutes les FE de la table TMP3 et l'insérer dans le champ "Concatener" de la table BORDEREAU

    Donc le résultat serai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NumeroBordereau    | NumeroConstructeur     | Indice  | Concatener
    ------------------------------------------------------------------
    BORD001            |  CONS001               |    B    | LET145#EBOM9
    ------------------------------------------------------------------
    BORD002            |  CONS002               |    1   | EBOM12#LET114               
    ------------------------------------------------------------------
    BORD008            |  CONS112               |    F   |LET108#EBOM009               
    ------------------------------------------------------------------
    Voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub Commande0_Click()
     
    Dim db As DAO.Database, rst As DAO.Recordset, Concatener As String, result As String
    Dim sSQL As String
    Dim TMP3 As string 'résultat requête qui récupère tous les enregistrements de la table TMP3 avec jointure de la table BORDEREAU
     
    Set db = CurrentDb
     
    TMP3 = "SELECT TMP3.Bordereau, TMP3.Numero_Constructeur, TMP3.Indice_Constructeur, TMP3.Fiche_Evolution FROM TMP3, BORDEREAU WHERE TMP3.Indice_Constructeur = BORDEREAU.Indice_Constructeur AND TMP3.Numero_Constructeur = BORDEREAU.Numero_Constructeur AND TMP3.Bordereau = BORDEREAU.Bordereau AND TMP3.Fiche_Evolution <> """""
     
    ' Ouverture du recordset
        Set rst = db.OpenRecordset(TMP3, dbOpenForwardOnly, dbReadOnly)
     
    ' on parcourt la table
        Do Until rst.EOF
                result = rst!Fiche_Evolution    'Champ Fiche_Evolution correspond au champ FE de la table TMP3
                tmp = tmp2 & "#" & result & "" ' je place le champ FE dans la variable tmp
                MsgBox tmp 'j'affiche tmp pour info
                tmp2 = tmp
     
    ' Je créé ma requête de mise à jour
                sSQL = "UPDATE BORDEREAU INNER JOIN TMP3 ON BORDEREAU.Indice_Constructeur = TMP3.Indice_Constructeur AND BORDEREAU.Numero_Constructeur = TMP3.Numero_Constructeur AND BORDEREAU.Bordereau = TMP3.Bordereau SET BORDEREAU.Concatener = """ & tmp2 & """ & """ & tmp & """ "  
                DoCmd.RunSQL (sSQL)  ' je l'execute
                rst.MoveNext
          Loop
        ' Fermeture du Recordset
        rst.Close
    END sub
    Avec ce code je parcours bien la table TMP3 et les bordereau de la table TMP3 qui se trouve également dans la table BORDEREAU.

    Ma requête de mise à jour fonctionne.

    Le problème est qu'il me concatène tous les champ TMP3.FE et qu'il me les insère dans les champs BORDEREAU.Concatener il n'arrive pas à faire la distinction entre les TMP3.FE de tel NumeroBordereau et de les récupèrer et me les mettre dans le champ BORDEREAU.Concatener du NumeroBordereau correspondant.

    j'ai donc cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NumeroBordereau| NumeroConstructeur| Indice|Concatener
    ------------------------------------------------------------------
    BORD001            |  CONS001    |    B    | LET145#EBOM9EBOM12#LET114 
    ------------------------------------------------------------------
    BORD002            |  CONS002   |    1   | LET145#EBOM9EBOM12#LET114 
    ------------------------------------------------------------------
    BORD008            |  CONS112    |    F  |LET145#EBOM9EBOM12#LET114
    ------------------------------------------------------------------
    J'obtiens le concaténer total de tous les FE.TMP3 de Tous les Bordereaux et inséré dans dans tous les champs Concatener.BORDEREAU ce qui n'est pas correct.

    Désolé pour l'explication assez longue et j'espère avoir été claire.
    Pour mon code j'ai fait de mon mieux je ne suis pas un expert du VBA.

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Par défaut


    En recherchant dans les tutos qui sont à disposition, il y a celui concernant les manipulations des données via DAO qui pourrait correspondre à tes besoins


    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Par défaut
    Merci pour ta réponse, j'ai parcouru la doc mais mon soucis ne concerne pas le parcours des données.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    une piste pour la concaténation des champs est disponible dans la
    je t'encourage à y jeter un oeil pour adapter la solution à ton code existant
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Par défaut
    Je vais jeter un coup d'oeil merci

  6. #6
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Par défaut
    C'est bon j'ai réussi grâce au tuto. j'obtiens cela :


    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
    Public Function RecupFE(BORDEREAU As String) As String
    Dim res As DAO.Recordset
    Dim SQL As String
     
    'Selectionne les participant du projet
    SQL = "SELECT distinct TMP3.Fiche_Evolution FROM TMP3 WHERE TMP3.Bordereau =" & Chr(34) & BORDEREAU & Chr(34)
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupFE = RecupFE & res.Fields(0).Value & "#"
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupFE = Left(RecupFE, Len(RecupFE) - 1)
    'libere la mémoire
    Set res = Nothing
     
    End Function
    ensuite j'execute une requête qui avec ma fonction fait le concaténé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT TMP3.Bordereau, TMP3.Numero_Constructeur, TMP3.Indice_Constructeur, RecupFE(Bordereau) AS titi
    FROM TMP3;
    et j'ai plus qu'a effectuer ma requête d'update.

    merci à tous pour votre aide.


    PS : Pour trouver sans chercher, il faut avoir longtemps chercher sans trouver ...

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

Discussions similaires

  1. Boucle pour concaténer datasets
    Par debdev dans le forum Macro
    Réponses: 6
    Dernier message: 22/06/2009, 14h15
  2. [Requête]Concaténation des résultats d'une requête SQL
    Par teks9 dans le forum Développement
    Réponses: 2
    Dernier message: 01/09/2008, 15h34
  3. [Requête] Concaténation et Tri
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 30/03/2007, 08h41
  4. [Requête]Concaténation de 3 champs dans une table
    Par egg3774 dans le forum Access
    Réponses: 10
    Dernier message: 21/03/2007, 13h09
  5. Lecture fichier, boucle et concaténation
    Par yabbiyou dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/02/2007, 19h31

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