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 avec clé primaire différent dans une seule colonne [AC-2013]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut Concaténer plusieurs enregistrements avec clé primaire différent dans une seule colonne
    Suite au code suivant que j'ai trouvé dans le FAQ "Concaténer plusieurs enregistrements dans une seule colonne":


    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 EMAIL_RECETTEUR FROM TABLE_RECETTEUR WHERE Projet=" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    J'ai effectué l'action suivante avec Microsoft Access 2013 (je jongle sur deux ordinateurs donc un avec Access 2013 et l'autre avec Access 2007):

    Dans le fenetre VB (ALT+F11) -->Outils-->Référence. Et là tu coche la bonne référence "Microsoft DAO 3.6 Object Library"
    Mais j'ai le message d'erreur suivant:

    Name conflits with existing module, project, or object library
    En faisant une recherche sur le net, il est indiqué que Microsoft DAO est en conflit avec

    Microsoft Access 15.0 Object library
    Mais quand je veux le décocher, cela est impossible

    Can't remove control or reference ; in use
    Voici les references actuelles:
    Nom : Reference.jpg
Affichages : 366
Taille : 68,1 Ko

    J'ai regarder ici comme préconisé par le modérateur Loufab:
    http://warin.developpez.com/access/dao/
    http://warin.developpez.com/tutoriel...et-ulterieurs/

    Mais je n'ai pas trouvé ma réponse, ai je peut être mal lu?

    J'ai une table TABLE_RECETTEUR qui posséde un email par ligne. J'aimerais pouvoir concaténer ses emails dans un champs:
    exemple:

    Résultat attendu:

    d@free.fr;c@free.fr;e@free.fr;f@free.fr

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 130
    Par défaut
    Bonjour,

    Même réponse que dans ta demande précédente.

    http://warin.developpez.com/tutoriel...et-ulterieurs/

    1er chapitre je cite :
    Si vous travaillez sur une application Microsoft Access, aucune référence supplémentaire n'est à ajouter à votre projet. En revanche si vous développez depuis une autre application Office, n'oubliez pas d'activer la bibliothèque Microsoft Office 12(14).0 Access Database Engine Object via le menu Outils->Références de l'éditeur Visual Basic.
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Je ne sais pas si vous avez lu mon post mais si vous regardez bien mes références
    Microsoft Office 15.0 Access Database Engine Object
    est déja coché et le probléme subsiste toujours.
    Quand j'exécute ma requête, il me demande de rentrer une valeur pour
    T_RECETTEUR.Projet
    .

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 130
    Par défaut
    Bonjour,
    Plusieurs choses me trouble :

    Jongler avec 2 versions ce n'est pas bon. Les références changent de l'une à l'autre ça crée des problèmes. Il faut au minimum faire une décompilation sans exécution avant de passer de la 2013 à 2007. (cf http://blogaccess.free.fr/?p=75 )

    Est-ce que le problème de la référence DAO 3.6 impossible à décocher est toujours d'actualité ? C'est ce qu'il faut régler en priorité. Décompiler, ouvrir avec le shift et décocher. Si cela persiste créer nouveau fichier accdb et transférer tous les objets vers celui-ci.

    Tu indiques "T_RECETTEUR.Projet" cependant dans le code fourni la requête ni fait pas référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT EMAIL_RECETTEUR FROM TABLE_RECETTEUR WHERE Projet=" & Projet
    Ce qui me fait penser que le code fourni a évolué.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Bonjour,

    Merci de vos réponses car avec tous ses incoherences, il y a de quoi faire tourner la tête.
    Pour le moment je reste sur la version 2013 pour éviter tout probléme.

    Après lecture de votre post, j'ai enfin compris ma bêtise:
    Dans référence, j'ai décoché:
    Microsoft office 15.0 Access database engine object
    Ce qui m'a permis de cocher
    Microsoft DAO 3.6 Object Library
    Nom : Reference.jpg
Affichages : 382
Taille : 68,5 Ko

    J'ai mis à jour le code VBA:
    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
     
    Option Compare Database
    Public Function RecupParticipant(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT EMAIL_RECETTEUR FROM T_RECETTEUR WHERE Projet=" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Voici ma requête SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT T_RECETTEUR.Projet, Recupparticipant(Projet) AS LesParticipants
    FROM T_RECETTEUR;
    Concernant la table suivante:
    Nom : Reference.jpg
Affichages : 315
Taille : 29,8 Ko

    Quand j'exécute cette requête, j'ai la fenêtre suivante qui s'affiche:
    Nom : Reference.jpg
Affichages : 310
Taille : 11,4 Ko

    Maintenant que j'ai réussi à cocher la référence Microsoft DAO, je ne comprends pas pourquoi la requête SQL n'arrive pas à faire appel à la fonction RecupParticipant

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 130
    Par défaut
    "DAO 3.6" ne doit plus être utilisé, c'est une vieille bibliothèque qui est remplacée par la "Microsoft office xx.0 Access database engine object"

    Pour être vue par les requêtes une fonction doit être Publique et enregistrée dans un module standard, si vous l'avez mises dans un formulaire un état ou un module de classe elle ne sera pas visible.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    ok
    Donc j'ai décoché Microsoft DAO et recoché Microsoft office 15.0 Access database engine object.
    En gros j'étais OK depuis le début mais cela ne fonctionne pas.

    La fonction est bien public et est bien placé dans un module standard.

    Voici en piéce jointe la base de données:test.7z

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 130
    Par défaut
    On en revient à la remarque précédente :

    T_RECETTEUR.Projet ce champ n'existe pas dans la table.

    Donc ceci n'est pas valide non plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RecupParticipant([Projet]) AS LesParticipants
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Merci loufab d'avoir éclairé ma lanterne bien eteinte , affaire enfin résolu. Bon après midi.

    Voici le bon code dans un module standard avec dans les références: décoché Microsoft DAO et coché Microsoft office 15.0 Access database engine object.:
    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
    Public Function RecupParticipant(ID_RECETTEUR As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT EMAIL_RECETTEUR FROM T_RECETTEUR 
    ' Pour tout prendre d'un coup enlever le WHERE ID_RECETTEUR=" & ID_RECETTEUR
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Avec la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT T_RECETTEUR.ID_RECETTEUR, Recupparticipant(ID_RECETTEUR) AS LesParticipants
    FROM T_RECETTEUR;

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

Discussions similaires

  1. [AC-2007] Probleme pour Concaténer plusieurs enregistrements dans une seule colonne
    Par severik dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 08/11/2017, 15h15
  2. Réponses: 2
    Dernier message: 11/04/2014, 18h16
  3. [AC-2003] Concaténer plusieurs enregistrements dans une seule colonne
    Par pgomis dans le forum Access
    Réponses: 2
    Dernier message: 29/07/2013, 10h39
  4. Réponses: 2
    Dernier message: 23/11/2012, 14h14
  5. Réponses: 4
    Dernier message: 29/10/2010, 17h05

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