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

IHM Discussion :

concatenation en vba


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2011
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2011
    Messages : 119
    Points : 49
    Points
    49
    Par défaut concatenation en vba
    Bsr
    J'essai une solution a mon problème de concaténation qui me plait bien http://access.fr.free.fr/articles.php?lng=fr&pg=45
    J'arrive a mettre en place cette solution, mais dès que je mets zone de liste autoriser plusieurs valeurs sur le champ prénom j'ai une erreur dans le code au niveau de la ligne 22
    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
    Quelqu'un pourrait il m'aider sur ce problème
    Merci

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour Pascal5,
    Voici le lien qu'il te faut: http://warin.developpez.com/access/multivalue/#LIV-A
    à la section V Programmer les champs multi-valués.
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2011
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2011
    Messages : 119
    Points : 49
    Points
    49
    Par défaut
    Bjr Robert1957
    J'ai bien lu tous le tuto complet mais je dois dire que je n'ais pas trouvé la solution en rapport avec mon erreur sur cette fameuse ligne 22.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If strResult = "" Then
       strResult = .Fields(strConcat)
     Else
    Pourrais tu m'éguiller stp
    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2011
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2011
    Messages : 119
    Points : 49
    Points
    49
    Par défaut
    Bingo, enfin
    J'ai trouvé la solution a mon problème de concatenation d'une liste a valeur multiple. Je mets tous ici car je suis sur que ça pourras servir à d'autre car j'ai bien galéré pour la trouver.
    Par contre au lieu des prénoms j'ai le numéro ID du prénom qui s'affiche.
    La requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT MaTable.FamilleID, MaTable.fldNom, ConcatRelated("fldPrénoms.Value","MaTable","FamilleID = " & FamilleID) AS Expr1
    FROM MaTable;
    Le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Public Function ConcatRelated(strField As String, _
        strTable As String, _
        Optional strWhere As String, _
        Optional strOrderBy As String, _
        Optional strSeparator = ", ") As Variant
    On Error GoTo Err_Handler
        'Purpose:   Generate a concatenated string of related records.
        'Return:    String variant, or Null if no matches.
        'Arguments: strField = name of field to get results from and concatenate.
        '           strTable = name of a table or query.
        '           strWhere = WHERE clause to choose the right values.
        '           strOrderBy = ORDER BY clause, for sorting the values.
        '           strSeparator = characters to use between the concatenated values.
        'Notes:     1. Use square brackets around field/table names with spaces or odd characters.
        '           2. strField can be a Multi-valued field (A2007 and later), but strOrderBy cannot.
        '           3. Nulls are omitted, zero-length strings (ZLSs) are returned as ZLSs.
        '           4. Returning more than 255 characters to a recordset triggers this Access bug:
        '               http://allenbrowne.com/bug-16.html
        Dim rs As DAO.Recordset         'Related records
        Dim rsMV As DAO.Recordset       'Multi-valued field recordset
        Dim strSql As String            'SQL statement
        Dim strOut As String            'Output string to concatenate to.
        Dim lngLen As Long              'Length of string.
        Dim bIsMultiValue As Boolean    'Flag if strField is a multi-valued field.
     
        'Initialize to Null
        ConcatRelated = Null
     
        'Build SQL string, and get the records.
        strSql = "SELECT " & strField & " FROM " & strTable
        If strWhere <> vbNullString Then
            strSql = strSql & " WHERE " & strWhere
        End If
        If strOrderBy <> vbNullString Then
            strSql = strSql & " ORDER BY " & strOrderBy
        End If
        Set rs = DBEngine(0)(0).OpenRecordset(strSql, dbOpenDynaset)
        'Determine if the requested field is multi-valued (Type is above 100.)
        bIsMultiValue = (rs(0).Type > 100)
     
        'Loop through the matching records
        Do While Not rs.EOF
            If bIsMultiValue Then
                'For multi-valued field, loop through the values
                Set rsMV = rs(0).Value
                Do While Not rsMV.EOF
                    If Not IsNull(rsMV(0)) Then
                        strOut = strOut & rsMV(0) & strSeparator
                    End If
                    rsMV.MoveNext
                Loop
                Set rsMV = Nothing
            ElseIf Not IsNull(rs(0)) Then
                strOut = strOut & rs(0) & strSeparator
            End If
            rs.MoveNext
        Loop
        rs.Close
     
        'Return the string without the trailing separator.
        lngLen = Len(strOut) - Len(strSeparator)
        If lngLen > 0 Then
            ConcatRelated = Left(strOut, lngLen)
        End If
     
    Exit_Handler:
        'Clean up
        Set rsMV = Nothing
        Set rs = Nothing
        Exit Function
     
    Err_Handler:
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "ConcatRelated()"
        Resume Exit_Handler
    End Function

Discussions similaires

  1. concatenation en vba
    Par huître dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2011, 00h03
  2. VBA-E concatenation de feuilles
    Par porc-bouc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2007, 11h20
  3. [VBA] concaténation
    Par dalmasma dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/07/2007, 12h29
  4. Concatenation code VBA
    Par toolmeup dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/07/2007, 16h53
  5. [VBA - Excel]Concatenation checkbox/variable
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/06/2006, 16h45

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