Concatener toute une ligne

Résolu
Anthelm Messages postés 202 Statut Membre -  
 maxime365472 -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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. Anthelm Messages postés 202 Statut Membre 1
       
      Merci beaucoup pour cette macro :)
      0
    2. maxime365472
       
      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. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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. Anthelm Messages postés 202 Statut Membre 1
       
      Merci! je vais essayer ça
      0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour Anthelm,
    Sur le poste : Renvoyer du texte Anthelm - 23 oct. 2018 à 00:22 vous avez une proposition.
    0