Oui, moi j'en ai une, puisque passer par du VBA ne te dérange pas:
Function AssembleTexte(plage, Optional separateur As String) As String
Application.Volatile
AssembleTexte = ""
tableau = plage
Dim cel As Range
For i = LBound(tableau, 1) To UBound(tableau, 1)
For j = LBound(tableau, 2) To UBound(tableau, 2)
If tableau(i, j) <> "" Then
If AssembleTexte <> "" Then
AssembleTexte = AssembleTexte & separateur & tableau(i, j)
ElseIf AssembleTexte = "" Then
AssembleTexte = tableau(i, j)
End If
End If
Next j
Next i
End Function
ce code, c'est celui d'une fonction personnalisée, qui est une version différente de CONCATENER, tu lui donne une plage de cellules, ou de valeurs, et ensuite, elle se charge de rassembler tes données avec un séparateur (si valeur non renseignée, ne sépare pas les valeurs).
De cette façon, en formule matricielle, ça fonctionne et te renvoie le résultat attendu, je te laisse voir :
Pour valider une formule matricielle, suivre le raccourci:
Shift (Maj) + Ctrl + Entrée