Menu

Concatener toute une ligne [Résolu]

Messages postés
149
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
20 juin 2019
-
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!
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
2066
2
Merci
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.

Cordialement,
Franck

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 46870 internautes nous ont dit merci ce mois-ci

Anthelm
Messages postés
149
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
20 juin 2019
1 -
Merci beaucoup pour cette macro :)
Commenter la réponse de pijaku
Messages postés
10737
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 juin 2019
1315
1
Merci
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
Anthelm
Messages postés
149
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
20 juin 2019
1 -
Merci! je vais essayer ça
Commenter la réponse de via55
Messages postés
9468
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
14 décembre 2018
963
0
Merci
Bonjour Anthelm,
Sur le poste : Renvoyer du texte Anthelm - 23 oct. 2018 à 00:22 vous avez une proposition.
Commenter la réponse de Le Pingou