XL 2013 Fonction Textjoin VBA

  • Initiateur de la discussion Initiateur de la discussion JHA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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,";")
 
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
 
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
359
Réponses
4
Affichages
181
Réponses
6
Affichages
199
Retour