Concatener toute une ligne

Résolu
Anthelm Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   -  
 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!
A voir également:

3 réponses

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