Concatener toute une ligne

Résolu
Bonjour,
Tout est dans le titre!
=CONCATENER(Repères!B3:XFD3), ça ne marche pas!

Idéalement j'aimerais que ma cellule attrape toute les cellules texte à partir de la colonne B. Comme si je faisais
=CONCATENER(Repères!B3&Repères!C3&Repères!D3)

(imaginons que ma ligne 3 soit une simple suite

Le résultat attendu doit être sous format texte: abcdefghi...

Idéalement, il faudrait séparer les résultats par des virgules...

Si quelqu'un peut m'apporter un début d'indice, ce serait formidable.

Merci beaucoup!

3 réponses

  1. Modérateur
    Bonjour,

    Voici une fonction personnalisée vous permettant de concatener :
    > une ligne entière (jusqu'à la première cellule vide),
    > une colonne entière (jusqu'à la première cellule vide),
    > une plage de cellule,
    > un Array à 1 dimension (uniquement en VBA),

    Public Function CONCATENER_PLUS(TabOrRange As Variant, Optional strSep As String, Optional ByRow As Boolean) As String
    Dim temp As Variant, i As Long, j As Long, fin As Long, R As Range
       If TypeOf TabOrRange Is Excel.Range Then
          If TabOrRange.Rows.Count = 1 And TabOrRange.Columns.Count = 1 Then
             CONCATENER_PLUS = TabOrRange.Value
          ElseIf TabOrRange.Rows.Count > 1 And TabOrRange.Columns.Count > 1 Then
             If ByRow Then
                ReDim temp(1 To TabOrRange.Rows.Count) As String
                For i = 1 To TabOrRange.Rows.Count
                   For j = 1 To TabOrRange.Columns.Count
                      temp(i) = temp(i) & strSep & TabOrRange.Cells(i, j).Text
                   Next
                   temp(i) = Right$(temp(i), Len(temp(i)) - Len(strSep))
                Next
                CONCATENER_PLUS = Join(temp, strSep)
             Else
                ReDim temp(1 To TabOrRange.Rows.Count) As String
                For i = 1 To TabOrRange.Columns.Count
                   For j = 1 To TabOrRange.Rows.Count
                      temp(j) = TabOrRange.Cells(i, j).Text
                   Next
                   CONCATENER_PLUS = CONCATENER_PLUS & strSep & Join(temp, strSep)
                Next
                CONCATENER_PLUS = Right$(CONCATENER_PLUS, Len(CONCATENER_PLUS) - Len(strSep))
             End If
          Else
             fin = TabOrRange.Rows.Count
             If fin = 1 Then fin = TabOrRange.Columns.Count
             ReDim temp(1 To fin)
             i = 1
             Do While TabOrRange.Cells(i).Value <> vbNullString And i <= fin
                temp(i) = TabOrRange.Cells(i)
                i = i + 1
             Loop
             ReDim Preserve temp(i - 1)
             CONCATENER_PLUS = Join(temp, strSep)
             CONCATENER_PLUS = Left$(CONCATENER_PLUS, Len(CONCATENER_PLUS) - Len(strSep))
             Erase temp
          End If
       ElseIf IsArray(TabOrRange) Then
          CONCATENER_PLUS = Join(TabOrRange, strSep)
       Else
          CONCATENER_PLUS = "#VALUE"
       End If
    End Function


    Exemples d'utilisation :
    Pour une cellule (renvoie la valeur contenue dans cette cellule) : =CONCATENER_PLUS(A1;", ")
    Pour une colonne : =CONCATENER_PLUS(J:J;" / ")
    Pour une ligne : =CONCATENER_PLUS(1:1;" : ")
    Pour une plage : =CONCATENER_PLUS(C1:F1;", ")
    ou encore : =CONCATENER_PLUS(C1:F5;", ")

    Renvoient une erreur :
    =CONCATENER_PLUS(1;", ")

    Pour des cellules non conjointes, utiliser CONCATENER simplement.

    4
    1. Merci beaucoup pour cette macro :)
      0
    2. Bonjour,

      Votre fonction est très utile,
      Cependant j'en ai une utilisation particulière, je possède des cellules vides dans le jeux de données, J'aimerai l'utiliser lignes par lignes cependant j'ai des cellules vides dans mes lignes
      Comment est ce que je peux utiliser la fonction ?
      Sinon vous dites que si les cellules non conjointes, utiliser concaténer simplement ?
      Ou trouver la fonction concaténer ?

      Merci de votre réponse
      Cordialement
      0
  2. Une possibilité :
    En B4 tu mets =B3
    puis en C4 la formule=B4 & ";" & C4 à étirer jusqu'au bout de la ligne, dans la dernière cellule tu auras la concaténation

    Sinon si tu le veux par formule dans une cellule il faut créer une fonction personnalisée en VBA

    Cdlmnt
    Via
    1
    1. Merci! je vais essayer ça
      0
  3. Bonjour Anthelm,
    Sur le poste : Renvoyer du texte Anthelm - 23 oct. 2018 à 00:22 vous avez une proposition.
    0