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 :

Concaténer plusieurs enregistrements dans un même champ avec données de 2 tables différentes via requête


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Concaténer plusieurs enregistrements dans un même champ avec données de 2 tables différentes via requête
    Bonjour,

    Voici mon problème : j'aimerais que dans mon état, les noms des propriétaires apparaissent dans un même champ, séparés par des virgules ou points-virgule. Je pense que c'est pour cela que mes informations sont triplées par exemple au chapitre 9...? J'ai cherché et apparemment la seule solution est de coder en VBA, cependant je n'ai aucune idée du VBA

    Ces 3 informations (n° de chapitre, nom, prenom) proviennent de 2 tables (Chapitre, Proprietaire) et sont rassemblées via une requête dans mon état dans un sous-état.

    Pour compliqué l'histoire, j'ai du créer une relation N-M entre mes deux tables.

    Je pense que je n'ai pas choisi la manière la plus facile de faire, je débute dans Access...!!

    Merci d'avance !

    Nom : Capture d’écran 2015-06-18 à 15.27.00.png
Affichages : 2311
Taille : 85,1 Ko

    Nom : Capture d’écran 2015-06-18 à 15.31.34.png
Affichages : 2562
Taille : 12,8 Ko

    Nom : Capture d’écran 2015-06-18 à 15.32.22.png
Affichages : 2974
Taille : 26,5 Ko

  2. #2
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    Je pense qu'il suffit de masquer les doublons pour les contrôles de la section "détail" de l'état.

    (Dans la feuille de propriété de chaque contrôle concerné, Onglet "Format", propriété "Masquer doublons")

    Sinon pour afficher les noms des propriétaires sur une seule ligne dans l'entête , il faut créer un champ calculé dans la requête source de l'état et l'utiliser pour l'affichage et le tri dans regroupement

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Je ne peux pas masquer les doublons car il y a des cas où j'ai par exemple même date, mais pas même numéro etc...du coups ça masque des infos dont j'ai besoin...

    Mmmh je vais essayer la 2ème solution que tu proposes si j'arrive le faire, merci !

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Le masquage des doublons s'effectue contrôle par contrôle, seuls les contrôles en doublons sont masqués, pas les autres.

    Pour l'autre solution, ça risque d'être compliqué car, d'après ce que j'ai compris, les noms des propriétaires sont sur des "lignes" différentes dans le résultat de la requête et je ne suis jamais arrivée à établir une condition sur un champ calculé qui utilise plusieurs enregistrements. Il faudra surement écrire la requête différemment.

    En visualisant la requête dans l'éditeur d'acces, vous aurez une bonne idée de sa structure.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Nom : Capture d’écran 2015-06-19 à 07.42.12.png
Affichages : 2175
Taille : 16,3 Ko

    Voilà ce qu'il se passe en masquant les doublons : Quand 2 numéros différents ont la même date ça masque une date qui ne devrait pas être masquée !

    Ici la date qui ne s'affiche pas est la même que celle du dessus : 27.03.06.

    Et lorsque je veux changer les propriété de toute la ligne (numéro-date-genre-remarque) il n'y a pas l'option "masquer les doublons"

    J'ai essayé de faire par requête pour tout mettre sur même ligne mais pas réussi...

  6. #6
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Pouvez vous mettre le code de la requête source de l'état, ça me permettra de mieux comprendre ce dont ce dernier est composé ?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Le SQL ?

    Sinon du code je ne sais pas où ça se trouve

    Ma requête finale découle de 3 étapes de requêtes si je peux dire ça comme ça... Car J'ai du faire des LEFT/RIGHT JOIN et il acceptait pas avec mes relations M-N...

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    J'ai trouvé ce code qui m'a l'air d'être ce qu'il me faut, mais je ne sais pas où l'entrer et comment l'adapter à mon cas

    J'aimerais l'appliquer sur ma requête "qry_chap_propr"

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    ' ---
    ' FUSION DE VALEURS D'ENREGISTREMENTS
    ' ---
    ' Entrée      : strSource         <- Table, requête ou instruction SQL
    '               varFields         <- Liste des champs à fusionner.
    '                                    Ex. : array("Nom", "Prénom")
    '               strRowDelimiter   <- Séparateur pour les lignes.
    '               strFieldDelimiter <- Séparateur pour les colonnes.
    '               blnIncludeNulls   <- True pour conserver les valeurs Null.
    ' Sortie      : Résultat concaténé
    '
    Function MergeRows( _
      ByVal strSource As String, _
      ByVal varFields As Variant, _
      Optional ByVal strRowDelimiter As String = ", ", _
      Optional ByVal strFieldDelimiter As String = " ", _
      Optional ByVal blnIncludeNulls = False) As String
     
      ' Quelques variables
      Dim rst As DAO.Recordset
      Dim varField As Variant
      Dim strResult As String
      Dim strVal As String
     
      ' Ouvrir la source
      Set rst = CurrentDb.OpenRecordset(strSource, dbOpenSnapshot)
     
      ' Concaténer la valeur du même champ, pour tous les enregistrements
      ' de la source
      strResult = ""
      While Not rst.EOF
        ' Concaténer tous les champs
        strVal = ""
        For Each varField In varFields
          If strVal <> "" Then strVal = strVal & strFieldDelimiter
            strVal = strVal & rst(varField)
          Next
          strVal = Trim(strVal)
     
        ' Ajout de l'enregistrement au résultat
        If (strVal <> "") Or blnIncludeNulls Then
          If strResult <> "" Then strResult = strResult & strRowDelimiter
            strResult = strResult & strVal
          End If
     
          ' Enregistrement suivant
          rst.MoveNext
      Wend
     
      ' Libérer les ressources
      rst.Close
      Set rst = Nothing
     
      MergeRows = strResult
    End Function

  9. #9
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    J'ai plutôt l'impression que cette fonction permet de concaténer les valeurs de différents champs d'un enregistrement et non les valeurs de différents enregistrements d'un même champ.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Mmmh d'accord, sinon j'ai cela, mais dans mon cas les valeurs viennent de 2 tables, je ne sais pas si on arrive adapter cela... ?

    Nom : Capture d’écran 2015-06-19 à 16.04.59.png
Affichages : 2363
Taille : 100,2 Ko

  11. #11
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Cette deuxième solution me parait correcte.
    C'est la requête appelée "R01" qui permettra de rassembler les informations des 2 tables

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Mmmmmh ok pour moi le VBA c'est encore du chinois pour l'instant

    Donc je fais le clique droit le mode création et "créer code événement", je suis juste ?

    Puis j'ai essayé d'adapter à mes donnée ce code mais... au bol....!

    Ça donnerait quelque chose comme ça...?! Il faut virer ce qui d'office "Sub" ?

    Merci beaucoup pour cette précieuse aide !



    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
     
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
    End Sub
     
     
    Public Function RecupProprietaire(ID_chapitre_AS_numero As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT nom, prenom, ID_chapitre_AS_numero FROM Proprietaire, Chapitre WHERE ID_chapitre_AS_numero=" & ID_chapitre_AS_numero
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupProprietaire = RecupProprietaire & res.Fields(0).Value & " "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupProprietaire = Left(RecupProprietaire, Len(RecupProprietaire) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function

  13. #13
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Il faut mettre quelque chose dans la procédure (sub), appeler la fonction par exemple.

    Je vous conseille de consulter les "tuto" Acces du site, ils expliquent bien le fonctionnement et la structure du VBA et sinon, ça fonctionne un peu comme d'autres langages pour la logique.

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Ok merci pour tout, je vais donc me pencher sur le VBA, ça me parait indispensable pour aller plus loin dans Access...!

Discussions similaires

  1. [MySQL] enregistrer plusieurs valeurs dans un même champ
    Par xKryckx dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/03/2015, 14h37
  2. Réponses: 2
    Dernier message: 11/04/2014, 18h16
  3. Réponses: 22
    Dernier message: 22/05/2013, 17h52
  4. [AC-2003] Concaténation plusieurs valeurs dans un même enregistrement
    Par Hmiachon dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/04/2009, 10h02
  5. Réponses: 1
    Dernier message: 27/04/2008, 16h53

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