Concatener toute une ligne

Résolu/Fermé
Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 - Modifié le 23 oct. 2018 à 19:36
 maxime365472 - 26 nov. 2021 à 11:37
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
Modifié le 24 oct. 2018 à 11:18
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 lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 1
9 nov. 2018 à 20:24
Merci beaucoup pour cette macro :)
0
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 14487 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 13 octobre 2024 2 733
23 oct. 2018 à 20:45
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 lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 1
23 oct. 2018 à 21:56
Merci! je vais essayer ça
0
Le Pingou Messages postés 12159 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 octobre 2024 1 448
24 oct. 2018 à 09:34
Bonjour Anthelm,
Sur le poste : Renvoyer du texte Anthelm - 23 oct. 2018 à 00:22 vous avez une proposition.
0