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 champs avec des valeurs uniques [Sources]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Concaténer plusieurs champs avec des valeurs uniques
    Salut,

    la réponse se trouve peut-être déjà dans le forum mais là je n'ai pas trouvé
    et les sources sur le sujet ne m'ont pas beaucoup aidé vu mes faibles compétences en VBA.

    Donc, j'ai 4 champs avec une valeur dans chaque. Je souhaiterais regrouper leur contenu en un seul champ (facile) mais en sachant qu'il peuvent tous avoir des valeur identiques et que dans ces cas là je ne veux pas concaténer 2 fois la même valeur. Enfin l'idéal serait que les valeurs soient triées de façon croissante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ChampA     ChampB     ChampC     ChampD
    1          2          4          2
    2          3          5          1
               4          4          2
    9          9          9          9
     
    ChampConcaténation
    1,2,4
    1,2,3,5,1
    2,4
    9
    Est-ce que mon explication vous parait claire ?
    Si oui, y a une solution simple ?

    Merci.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    L'exemple donné dans les pages sources est pourtant assez précis. Où bloques tu réellement ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Eh bien ma foi la mise en oeuvre classique comme dans les sources j'y arrive

    par contre je ne vois pas comment faire pour ne pas obtenir :

    ChampConcatenation
    1,2,4,2
    2,3,5,1
    4,4,2
    9,9,9,9

    mais bien le résultat que je donne dans ma question.

    la modification que j'ai apportée dans le code pour récupérer les champs est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RecupProjet = RecupProjet & res.Fields(0).Value & ";" & res.Fields(1).Value & ";" & res.Fields(2).Value & ";" & res.Fields(3).Value

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    En fait même pour compléter ma question il faudrait que je puisse concaténer les 4 champs de tous les enregistrement donc un Id est identique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Id     ChampA     ChampB     ChampC     ChampD
    1      1          2          4          2
    1      2          3          5          1
    2                 4          4          2
    2      9          9          9          9
     
    Id     ChampConcatenation
    1      1,2,3,4,5
    2      2,4,9

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il suffit d'adapter un petit peu

    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
    Public Function ToLigne(Id As Long) As String
    Const SEPARATOR = ","
    Dim res As DAO.Recordset
    Dim SQL As String
    Dim strTempValeur As String
    'Selectionne les participant du projet
    SQL = "SELECT ChampA,ChampB,ChampC,ChampD FROM matable WHERE Id=" & Id
    Set res = CurrentDb.OpenRecordset(SQL)
    ToLigne = SEPARATOR
    'Concatene les différents enregistrement
    While Not res.EOF
        For i = 0 To 3
            If Nz(res.Fields(i).Value) <> "" Then
                strTempValeur = res.Fields(i).Value
                If InStr(1, ToLigne, SEPARATOR & strTempValeur & SEPARATOR) = 0 Then _
                ToLigne = ToLigne & res.Fields(i).Value & SEPARATOR
            End If
        Next i
    res.MoveNext
    Wend
    'Enleve le dernier espace
    ToLigne = Mid(ToLigne, 2, Len(ToLigne) - 2)
    'libere la mémoire
    Set res = Nothing
    End Function
    Autre solution, transfomer la table en une requête à deux colonnes :ID, Valeur reprennant la liste des données (requête UNION) et utiliser l'exemple des sources

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    et si on veut juste l'integralité du champ A et du champ C comment fait on?
    on utilise le "&" pour concatener les 2 champs?
    ------------------- --------------------
    eFFeT DeVeLoPpEz.CoM

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Pour ça à partir de la source d'origine c'est pas compliqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL = "SELECT ChampA,ChampC FROM matable WHERE Id=" & Id
    (...)
    RecupProjet = RecupProjet & res.Fields(0).Value & ";" & res.Fields(1).Value

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Tofalu : je ne peux dire qu'une chose... BRAVO et MERCI
    (ah tiens ça fait deux...)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    euh en fait je suis allé un peu vite (merci quand même !) :

    donc est-ce qu'on peut concaténer les 4 champs de tous les enregistrement dont les Id sont identiques ? (voir question plus haut) ?

    Ou alors je suis obligé de faire ça en deux fois ?
    - première passe avec ta routine
    - deuxième passe avec la routine classique issue des sources pour tout regrouper par Id ?

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Non, une seule passe :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
     
      DISTINCT ID, TOLIGNE(ID)
    FROM MATABLE

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    pffff.... je crois que me voilà bien fatigué !

    tout baigne ! merci.

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

Discussions similaires

  1. Select avec des valeurs uniques et résultats multiples
    Par Daviloppeur dans le forum AngularJS
    Réponses: 0
    Dernier message: 16/10/2014, 16h01
  2. Concaténer plusieurs champs avec conditions
    Par jondal dans le forum BIRT
    Réponses: 4
    Dernier message: 31/10/2012, 16h11
  3. Réponses: 11
    Dernier message: 17/06/2010, 18h25
  4. Réponses: 4
    Dernier message: 16/01/2010, 19h33
  5. [JS] contrôle sur la saisie d'un champ avec des valeurs numeriques ?
    Par adil_vpb dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/03/2007, 11h12

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