Plantage Excel 2004

Dans ton message 31 la fonction gardait les doublons, triplons, etc... et c'est ça que je voulais enlever.
Ah oui, mille excuses, je n'avais pas fait attention à ça (toujours vouloir aller vite n'a pas que des avantages) ! J'ai bien fait de poser la question :D
 
Pas de soucis ;)
Tu m'as bien aidé depuis le début et puis grâce à toi j'ai appris pas mal de choses également

PS : il n'y a rien sur ce forum pour mettre le sujet "Résolu" par exemple?
 
PS : il n'y a rien sur ce forum pour mettre le sujet "Résolu" par exemple?
Non.

Comme je n'aime pas baisser les bras, voici une version revue "sans doublon" (et toujours sans tableaux). J'espère que la fonction InStr() n'est pas une fonction VBA 6 (de mémoire, je dirais que non).

Bloc de code:
Function rechtableau(ByVal ValRecherche, ByVal TabMatrice As Variant, ByVal IndexCol) As String
Dim T As String, C As Range, Separateur As String, ValTrouve As String
Separateur = " - "
For Each C In TabMatrice.Cells
If C.Value = ValRecherche Then
ValTrouve = C.Offset(0, IndexCol).Text
If T = "" Then
T = ValTrouve
Else
If InStr(1, T, ValTrouve) = 0 Then
T = T & Separateur & ValTrouve
End If
End If
End If
Next C
rechtableau = T
End Function
 
Je vois que tu es comme moi : ne jamais lâcher!
Ça marche mais à priori pas entièrement...
Voir l'exemple joint.
j'ai mis "tutu2" dans une cellule et plus loin "tutu"
La 2e valeur n'est pas récupérée car elle est "trouvée" dans "tutu2" (je pense)
Inversement, s'il y a "titi" avant "titi1" les 2 valeurs sont bien récupérées.
J'avoue que c'est vicieux mais ça pourrait arriver dans mes données réelles...
 
Je vois que tu es comme moi : ne jamais lâcher !
;) Y'a un peu de ça.


j'ai mis "tutu2" dans une cellule et plus loin "tutu"
La 2e valeur n'est pas récupérée car elle est "trouvée" dans "tutu2" (je pense).
Oui, c'est exact. On peut le contourner en se basant sur le séparateur :

Bloc de code:
Function rechtableau(ByVal ValRecherche, ByVal TabMatrice As Variant, ByVal IndexCol) As String
Dim T As String, C As Range, Separateur As String, ValTrouve As String
Separateur = "-"
For Each C In TabMatrice.Cells
If C.Value = ValRecherche Then
ValTrouve = C.Offset(0, IndexCol).Text
If T = "" Then
T = ValTrouve
Else
If InStr(1, Separateur & T & Separateur, Separateur & ValTrouve & Separateur) = 0 Then
T = T & Separateur & ValTrouve
End If
End If
End If
Next C
rechtableau = T
End Function
Tu noteras que j'ai même poussé encore en rajoutant aussi le séparateur devant (ce qui évite le risque de ne pas distinguer "2tutu" de "tutu" en plus de "tutu2"). On risque cependant de rencontrer à nouveau un problème si tu utilises dans ta liste un terme qui inclut le séparateur (mais là, il y a tout de même peu de chances).
 
Tu peux même le rendre insensible à la casse...

Option Explicit

Function rechtableau(ByVal ValRecherche, ByVal TabMatrice As Variant, ByVal IndexCol) As String

Dim T As String, C As Range, Separateur As String, TabSplit, TabResult() As String, Flag As Integer, cpt1 As Long, cpt2 As Long, cpt3 As Long, firstPassage As Integer

Separateur = "-" 'Separateur entre les differents elements
firstPassage = 0

For Each C In TabMatrice.Cells 'Pour chaque element de la matrice on verifie si la valeur est identique a la valeur recherchee et si oui, on la concatene dans une chaine de caracteres
If C.Value = ValRecherche Then
If T = "" Then
T = C.Offset(0, IndexCol).Text
Else
If Not InStr(1, T, C.Offset(0, IndexCol).Text, vbTextCompare) > 0 Then 'vbTextCompare pour sensible à la casse sinon vbBinaryCompare
T = T & Separateur & C.Offset(0, IndexCol).Text
End If
End If
End If
Next C
rechtableau = T


End Function

Edit je viens de voir ! donc inclure le séparateur.
 
Je viens de tester les 2 fonctions et on peut dire que ça marche bien même très bien ;)
Le code est clair, "simple" et bien moins long que ce que j'avais pondu avec des tableaux.
Après, en réel, je ne note pas une grande différence d'exécution entre ces fonctions et la mienne.
Mais pour un soucis de maintenance et de continuité du projet, je vais quand même opter pour la votre.

Pour conclure, on peut dire que tout est parfait maintenant.
Je suis content d'être tombé sur ce forum.
Et encore un grand merci à tous les 2 pour votre aide! :zen:
En plus, mon chef n'est pas mécontent du résultat :up: