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 :

Concatener sur un même champ


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    secrétaire
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 14
    Points
    14
    Par défaut Concatener sur un même champ
    Bonjour,


    Pour pouvoir concatener plusieurs contacts (un champ sur plusieurs lignes) par organisme dans ma base, j'ai besoin d'une fonction que ne possède apparemment pas Access 2013. Néophyte mais à force de chercher partout, j'ai récupéré ce codage VBA (ici) :

    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
    Function ConcatForQuery(strRegroup As String, fldRegroup As String, _
        strConcat As String, strTable As String, _
        Optional strSep As String = "/") As String
     
        '** Regroupement de donnée sur le champ fldRegroup
        '** et concaténation sur le champ strConcat
        Dim db As Database
        Dim rst As Recordset
        Dim strResult As String
        Dim strRst As String
     
        Set db = CurrentDb()
        strRst = "Select * From [" & strTable & "] " _
            & "Where [" & strRegroup & "] = """ & fldRegroup & """;"
     
        Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
        With rst
            If Not .BOF Then
                .MoveFirst
                Do Until .EOF
                    If strResult = "" Then
                        strResult = .Fields(strConcat)
                    Else
                        strResult = strResult & strSep & .Fields(strConcat)
                    End If
                .MoveNext
                Loop
            End If
        End With
        rst.Close: Set rst = Nothing
        db.Close: Set db = Nothing
        ConcatForQuery = strResult
     
    End Function
    Après quoi je dois appeler la fonction avec une requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT n°_CPME,
    ConcatForQuery("n°_CPME",[n°_CPME],"civ_prn_nom","Visu_entrps_X_contacts","
    - ") AS Résultat
    FROM Visu_entrps_X_contacts
    GROUP BY n°_CPME;
    Or ça ne semble pas fonctionner correctement et j'ai vraiment besoin de terminer cette base pour mon stage qui finit ce vendredi ! Je ne connais pas le langage VBA, juste du SQL (et des notions culture G sur les algorithmes). J'ai une fenêtre qui s'ouvre et me demande de choisir une base de données (apparemment ODBC ?...) et j'avoue bloquer pour me dépatouiller.

    Nom : fenetre_db_demande.jpg
Affichages : 220
Taille : 67,8 Ko

    Pourriez-vous m'aider aussi diligemment que possible ?


    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Option Compare Database
     
    Sub Test()
    Debug.Print GetString(CurrentDb.OpenRecordset("select * from Table4"))
    Debug.Print GetString(CurrentDb.OpenRecordset("select * from Table4"), chrSep:=":")
    Debug.Print GetString(CurrentDb.OpenRecordset("select * from Table4"), chrVbctrl:="$")
    Debug.Print GetString(CurrentDb.OpenRecordset("select * from Table4"), ":", "/")
    Debug.Print GetString(CurrentDb.OpenRecordset("select [Index] from Table4"), "", " ")
    End Sub
    Function GetString(Rs As Object, Optional chrSep = ";", Optional chrVbctrl = vbLf)
    Dim txt As String
    While Not Rs.EOF
        txt = ""
     For Each f In Rs.Fields
        If txt = "" Then txt = CStr("" & f.Value) Else txt = txt & chrSep & CStr("" & f.Value)
     Next
     GetString = GetString & txt & chrVbctrl
     Rs.MoveNext
    Wend
    End Function

  3. #3
    Membre à l'essai
    Femme Profil pro
    secrétaire
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 14
    Points
    14
    Par défaut
    Faut-il que je remplace la fonction que j'ai créé ou que j'insère ce nouveau code dans celui que j'ai déjà ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour être franc avec toi je n'es vue dans ton exposé qu'une partie du problème

    Je n'avais pas vue qu'il s'agissait de concaténation d'une requête dans une requête! Demain quand j'aurais accès a mon ordinateur je regarde. Mais si ta méthode fonction ou un internaute de propose un autre oublie la mienne qui n'est pas achevé!

Discussions similaires

  1. [MySQL] Plusieurs données concatenées dans un même champ ou une table supplémentaire?
    Par Rocky Turquoise dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/11/2008, 01h31
  2. 2 clés étrangères sur le même champs
    Par titouille dans le forum MySQL
    Réponses: 1
    Dernier message: 29/10/2008, 12h51
  3. Requête avec conditions multiples sur le même champ
    Par skerdreux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2008, 19h15
  4. Réponses: 4
    Dernier message: 26/04/2006, 14h02

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