Ajouter conditions à une fonction TEXTJOIN en VBA (Excel 2016)

Bonjour,

je me remets à la programmation VBA et je me rends compte que j'ai perdu beaucoup d'acquis avec les années !! J'ai Excel 2016, donc je ne peux utiliser la nouvelle fonction TEXTJOIN. J'ai donc ajouté une fonction home made qui cumule plusieurs données dans une même cellule, mais je dois la filtrer et je n'y arrive pas.

Dans la colonne D de l'onglet INFO, je cherche à afficher, pour chaque MAIN_ID, les SUB_NAME(s) qui répondent à 2 critères:

1. le SUB_NAME correspond au MAIN_ID (onglet SUB, colonnes B & C)

2. le SUB_STATUS (onglet SUB, colonne D) est "Public"

Je devrais retourner environ 4 valeurs par ligne, mais présentement, comme je n'arrive pas à filtrer, ma fonction retourne +/- 80 valeurs.

Voici mon code, auriez-vous l'aimabilité de m'aider avec la partie manquante ?

Un gros merci à l'avance et au plaisir d'échanger avec vous prochainement !

-------------------------

Option Explicit

Function My_TeXt_Join(delimiter As String, ignore_empty As Boolean, text_range As Range) As String

Application.Volatile
Dim c As Range
Dim n As Long
n = 0
For Each c In text_range
If ignore_empty = True Then
If VBA.IsEmpty(c.Value) = False Then
If n = 0 Then
My_TeXt_Join = c.Value
Else
My_TeXt_Join = My_TeXt_Join & delimiter & c.Value
End If
n = n + 1
End If

Else

If n = 0 Then
My_TeXt_Join = c.Value
Else
My_TeXt_Join = My_TeXt_Join & delimiter & c.Value
End If
n = n + 1

End If
Next

End Function

Edit modo : code mis entre balises, merci d'y faire attention la prochaine fois

bonjour, une méthode "quick and dirty", juste pour vous montrez ce qu'il est possible et à modifier plus tard ...

Function My_TeXt_Join1(delimiter As String, ignore_empty As Boolean, Condition) As String
     Application.Volatile     'toujours calculate
     aa = Evaluate("transpose(if(table4[main_id]=" & Condition & ",table4[sub_name],""~""))")     'filtrer avec condition (similar à une focntion dans la feuille
     If ignore_empty Then aa = Filter(aa, "~", 0)     'supprimer les valeurs fauses en case de ignore_empty
     s = Join(aa, delimiter)     'joindre
     If Not ignore_empty Then s = Replace(s, "~", "")     'remplacer les "~" par "" en cas de not ignore_empty
     My_TeXt_Join1 = s
End Function

méthode moins "quick&dirty" (cellules oranges) PS. au lieu d'une matrice on peut aussi utiliser les cellules directement

Function My_TeXt_Join2(delimiter As String, ignore_empty As Boolean, Condition) As String
     Dim aA
     Application.Volatile
     aA = Range("Table4").Value     'votre tableau
     For i = 1 To UBound(aA)     'boucle les données
          b = (aA(i, 3) = Condition)     'vérifier condition
          If Not ignore_empty Or b Then s = s & delimiter & IIf(b, aA(i, 2), "")     'joindre dans ces 2 cas
     Next
     My_TeXt_Join2 = Mid(s, Len(delimiter) + 1)
End Function

Bonjour RustyProg et

Une petite présentation ICI serait la bienvenue

Je vous invite à lire :
- La charte du forum
- Quelques fonctionnalites du forum à connaître

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Merci pour votre participation

Cordialement

Rechercher des sujets similaires à "ajouter conditions fonction textjoin vba 2016"