XL 2013 Fonction Textjoin VBA

JHA

XLDnaute Barbatruc
Bonjour à tous,

J'ai téléchargé une fonction personnalisée "Textjoin".
Apparemment, sous excel 2016, cette nouvelle fonction d'excel est capable de retourner dans une seule cellule une liste unique en validation matricielle.
Avec le code VBA, cela ne fonctionne pas. Est il possible de modifier ce code pour avoir le même résultat sous excel 2013.

JHA
 

Pièces jointes

  • Extraction liste unique dans une seule cellule.xlsm
    15.2 KB · Affichages: 68

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

Il y a déjà une fonction Join dans le VBA d'Excel
On peut faire comme cela avec join
VB:
Function TEXTJOIN(Rng As Range) As String
TEXTJOIN = Join(Application.Transpose(Rng), "-")
End Function
Dans la cellule C2 : = TEXTJOIN(A2:A8)

Et si on veut avoir le choix pour le séparateur
VB:
Function TEXTJOIN(Rng As Range, Optional Delimiter As String = "-") As String
TEXTJOIN = Join(Application.Transpose(Rng), Delimiter)
End Function
Séparateur par défaut: -
=TEXTJOIN(A2:A8)
ou avec comme séparateur choisi le point virgule par exemple
=TEXTJOIN(A2:A8,";")
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Le but est de supprimer les doublons de la liste "A2:A8" en validant la fonction textjoin() avec les touches Ctrl+Maj+Entrée
donc ne garder que les noms suivant:
{"Chin";"Mindy";"Gigi";"";"Phil";"Sioux";""}
sans les "".

JHA
 

Dranreb

XLDnaute Barbatruc
Je confirme. Elle était mal écrite, de sorte de ne pouvoir supporter une expression matricielle.
Il faut l'écrire comme ça :
VB:
Function TEXTJOIN(Delimiter As String, IgnoreEmpty As Boolean, ParamArray Parm() As Variant)
Dim E, C As Range, V, T() As String, N&
For Each E In Parm
  If TypeName(E) = "Range" Then
     For Each C In E.Cells: V = C.Value: GoSub 1: Next C
  ElseIf IsArray(E) Then
     For Each V In E: GoSub 1: Next V
  Else
     V = E: GoSub 1: End If: Next E
TEXTJOIN = Join(T, Delimiter)
Exit Function
1: If V = "" And IgnoreEmpty Then Return
N = N + 1
ReDim Preserve T(1 To N): T(N) = V
Return
End Function
Bon j'arrête de la tripoter, c'est ma dernière version…
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
gosselien, ça enlève les doublons seulement parce que la formule matricielle de JHA les remplace par des textes vides.

Précisions: Curieusement sa formule validée classiquement donne aussi un résultat puisqu'alors le 3ieme paramètre est l'intégralité de A2:A8. Validée en matriciel c'est un tableau de Variant comportant un mélange de certaine valeurs de cellules de A2:A8 et de textes vides. Et c'est là que ça coinçait dans le code original qui n'acceptait que des Range.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
393

Statistiques des forums

Discussions
312 932
Messages
2 093 733
Membres
105 802
dernier inscrit
Witchun