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 :

Concatenation via code VBA


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut Concatenation via code VBA
    bonjour a tous ,

    a la recherche d'une solution pour ma requete ,je me permet d 'exprimer mon besoin . j'ai le tableau ci-dessous :

    Nom : for1.png
Affichages : 86
Taille : 20,1 Ko

    mon souhait est de concatonner la colonne : Num_compte , donc chaque NTiers dois avoir une seule ligne avec les 3 numero de compte .

    quelqu'un m'avait donner ce code , helas j'ai pu alles plus loin sur cette requete :

    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
     
    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 DAO.Database
    Dim rst As DAO.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
    Aux incompétents je dis merci ,grâce à vous je progresse !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Bonjour,

    Je pense que tu devrais aller voir là : https://access.developpez.com/source...QLLigneColonne

    ONTAYG

  3. #3
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    Bonjour ,

    j'ai fais le module suivant :

    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 RecupProjet(Nom As String) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les  projet du partcipant
    'chr(34) correspond a des guillemets pour encadrer le texte
    SQL = "SELECT Projet FROM 6 TIERS TEL PROF PP WHERE IDF_NUM_TIERS=" & _
              Chr(34) & Nom & Chr(34)
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
        RecupProjet = RecupProjet & res.Fields(0).Value & ";"
        res.MoveNext
    Wend
    'Enleve le dernier ;
    RecupProjet = Left(RecupProjet, Len(RecupProjet) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    ensuite la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT 6 TIERS TEL PROF PP.IDF_NUM_TIERS, Recupprojet(NomParticipant) AS NUM_COMPTE
    FROM 6 tiers tel prof pp;
    Nom de la table : 6 TIERS TEL PROF PP
    rassembler par : IDF_NUM_TIERS
    champ a concatonner : NUM_COMPTE

    apparement j'aurai un probleme de syntaxe
    Aux incompétents je dis merci ,grâce à vous je progresse !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Essayes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Projet FROM [6 TIERS TEL PROF PP] WHERE IDF_NUM_TIER
    Mettre le nom de la table entre crochet car il y a des espaces.

  5. #5
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    je ne dispose pas du champ projet dans ma requete /table
    Aux incompétents je dis merci ,grâce à vous je progresse !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 585
    Points : 1 080
    Points
    1 080
    Par défaut
    Citation Envoyé par omen123 Voir le message
    je ne dispose pas du champ projet dans ma requete /table
    Bien sûr il faut adapter la requête, le lien c'est le principe.

  7. #7
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    J'ai esseyé de refaire mon ancien code et de creer la requete suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT CFRP, ConcatForQuery("CFRP",[CFRP],"GSM","matable_1") AS TEL2
    FROM matable_1;
    le 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
    29
    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 DAO.Database
    Dim rst As DAO.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 strResult = "" Then
                    strResult = Nz(.Fields(strConcat), "")
                ElseIf Nz(.Fields(strConcat), "") <> "" Then
                    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
    malheuresement j'ai tjrs l"erreur suivante :

    Nom : for1.png
Affichages : 60
Taille : 138,9 Ko
    Aux incompétents je dis merci ,grâce à vous je progresse !

  8. #8
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    Bonjour ,

    si quelq'un peux me débloquer svp
    Aux incompétents je dis merci ,grâce à vous je progresse !

  9. #9
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Bonjour,

    D'un point de vue purement technique, le 2e argument d'appel de la fonction ConcatForQuery est supposé être de type string.
    Si je comprends comment ça fonctionne, ce 2e argument devrait plutôt être la valeur de regroupement, donc il faudrait appeler ConcatForQuery pour chaque titulaire, non ?
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  10. #10
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    ce qui veut dire ? dois je changer le type des element ?
    Aux incompétents je dis merci ,grâce à vous je progresse !

  11. #11
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Je dirais qu'il faut faire une boucle sur la lecture des différents IDF_NUM_TIERS.
    Pour chaque valeur de IDF_NUM_TIERS, on met à jour la nouvelle colonne avec ConcatForQuery("CFRP", VALEUR_DE_IDF_NUM_TIERS, "GSM", "matable_1").
    Si la fonction ne doit pas être réutilisée ailleurs et que IDF_NUM_TIERS n'est pas de type "string", il faut se poser la question de changer le type dans la fonction (sans oublier d'adapter la requête, notamment en enlevant les guillemets si c'est numérique).
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  12. #12
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    En fait, s'agit-il créer une nouvelle table ? Avec une seule ligne par titulaire ? Ou est-ce juste une restitution dynamique (pour un formulaire, un état...) ?
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  13. #13
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 340
    Points : 100
    Points
    100
    Par défaut
    pas vraiment besoin soit de creer soit faire une requete , je viens de conulter les types des elements ils sont tous format texte .ce que j'arrive pas a comprendre c'est ce ces codes fonctionnent dans une autre application

    Nom : for1.png
Affichages : 42
Taille : 28,0 Ko
    Aux incompétents je dis merci ,grâce à vous je progresse !

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 652
    Points : 14 631
    Points
    14 631
    Par défaut
    bonjour,
    il manque l'instruction Do Until rst.EOF dans le code du post #7 entre les lignes 16 et 17, alors qu'il y est bien dans celui du post #1 (ligne 20), c'est peut-être ça la cause de l'erreur de compilation ...
    le premier réflexe à avoir quand on a terminé de coder du VBA, c'est de le compiler
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. Erreur gestion excel via code VBA dans access pour importation
    Par blacklolou dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/01/2013, 10h24
  2. Comment imprimer un fichier "PRN" via code VBA.
    Par lakhdar16 dans le forum VBA Access
    Réponses: 7
    Dernier message: 08/03/2012, 18h55
  3. Tronquer text via code VBA
    Par developpeur_débutant dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 06/12/2011, 19h47
  4. Accés au donnés sur Excel via Code vba Access
    Par sakia dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/11/2007, 16h46
  5. Réponses: 5
    Dernier message: 03/08/2006, 16h13

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