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 :

Regrouper enregistrements dans une colonne sous deux conditions [AC-365]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Regrouper enregistrements dans une colonne sous deux conditions
    Bonjour à tous,

    Grace au tuto en lien ci apres (https://access.developpez.com/sources/?page=Requete), j'ai pu mettre plusierus enregistrement dans une colonne.

    En gros j'ai une base avec des inscrits à un événement

    j'ai repris l'exemple dans le tuto :
    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
    Public Function RecupParticipant(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT [Nom]&' '&[Prenom] FROM [LISTE DES INSCRITS] WHERE [DATE D'INSCRIPTION ] =" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & "- " & res.Fields(0).Value & vbCrLf
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Et j'utilise cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT [LISTE DES INSCRITS].[DATE D'INSCRIPTION ], [LISTE DES INSCRITS].Société, Recupparticipant([DATE D'INSCRIPTION ]) AS LesParticipants
    FROM [LISTE DES INSCRITS];
    j'arrive bien a regrouper tous les inscrits a un événement a une date donnée mais j'aimerai aussi que cela se fasse par société.

    En gros avoir :
    Evenement A
    SOCIETE A /INSCRIT 1 (retour a la ligne)-INSCRIT 2(retour a la ligne)-INSCRIT 3(retour a la ligne)
    SOCIETE B /INSCRIT 1 (retour a la ligne)-INSCRIT 2(retour a la ligne)
    Evenement A
    SOCIETE x /INSCRIT 1 (retour a la ligne)-INSCRIT 2(retour a la ligne)-INSCRIT 3(retour a la ligne)
    SOCIETE X /INSCRIT 1 (retour a la ligne)-INSCRIT 2(retour a la ligne)

    sachant que les inscrit sont différents,c 'est juste une énumération

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Peut-être essayer d'ajouter le champ société dans le SQL du recordset pour le récupérer ensuite au début :

    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
    Public Function RecupParticipant(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT [Nom]&' '&[Prenom], Societe FROM [LISTE DES INSCRITS] WHERE [DATE D'INSCRIPTION ] =" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    if Not res.EOF Then
    RecupParticipant =res.Fields(1).Value & "/" & res.Fields(0).Value & vbCrLf ' récupère le nom de la société et le 1er participant
    res.MoveNext
    While Not res.EOF
    RecupParticipant = RecupParticipant & "- " & res.Fields(0).Value & vbCrLf
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    end if
    'libere la mémoire
    Set res = Nothing
    End Function
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    et Merci pour votre aide.

    En faisant cela, j'obtiens en résultat de la requête
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT [LISTE DES INSCRITS].[DATE D'INSCRIPTION ], [LISTE DES INSCRITS].Société, Recupparticipant([DATE D'INSCRIPTION ]) AS LesParticipants
    FROM [LISTE DES INSCRITS];

    Sauf que moi j'aimerais que ma requête me dise pour chacune date d'événement et la liste des participants par sociét
    En gros avoir

    24/12/2019 (Date de l'évenement) | Société X (Nom de l'entreprise | liste des participants à l'événement de la société X
    24/12/2019 (Date de l'évenement) | Société Y (Nom de l'entreprise | liste des participants à l'événement de la société Y

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Autant pour moi, j'avais lu un peu vite

    dans ce cas il faut filtrer par société :

    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
    Public Function RecupParticipant(Projet As Long, societe as string) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT [Nom]&' '&[Prenom] FROM [LISTE DES INSCRITS] WHERE [DATE D'INSCRIPTION ] =" & Projet & " and [Société] like '" & Societe & "'"
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & "- " & res.Fields(0).Value & vbCrLf
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Et ensuite, faire :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT [LISTE DES INSCRITS].[DATE D'INSCRIPTION ], [LISTE DES INSCRITS].Société, Recupparticipant([DATE D'INSCRIPTION ],[Société]) AS LesParticipants
    FROM [LISTE DES INSCRITS];
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    merci effectivement cela marche.
    par contre des qu'une société a un ' dans son nom ça fait boguer la requête.
    En php je sais que l'on peut traiter les caractères d'échappement mais sur Acess je ne sais pas comment cela se gére.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    les doubles guillemets de chaque côté à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT [Nom]&' '&[Prenom] FROM [LISTE DES INSCRITS] WHERE [DATE D'INSCRIPTION ] =" & Projet & " and [Société] like """ & Societe & """"
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Et bien parfait les éléments fonctionnent correctement
    Merci ;-)

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

Discussions similaires

  1. [XL-2007] Comment supprimer des lignes d'une plage dans une colonne sous condition
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/06/2015, 11h34
  2. Réponses: 6
    Dernier message: 24/05/2014, 12h38
  3. Réponses: 10
    Dernier message: 07/07/2012, 17h11
  4. Réponses: 1
    Dernier message: 08/03/2007, 12h35
  5. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56

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