Fonction à améliorer + compatibilité MAC

tete-jaune

XLDnaute Junior
Bonjour,

J'ai trouvé sur internet une fonction (que j'ai copié dans un module VB) qui permet d'effectuer une recherche, style recherchev, mais qui récupère tous les résultats correspondant à la valeur recherchée et les concatènent.

Code:
Function ConcatVLookUp(ByVal ValRecherche, _
                       ByVal TabMatrice As Range, _
                       ByVal IndexCol, _
              Optional ByVal blnConcat As Boolean = False, _
              Optional ByVal Separateur = ";") As Variant
                  
' Permet une recherchev sur des caractères génériques
'
Dim c As Range
 
application.Volatile
 
For Each c In TabMatrice.Cells
    If c.Value Like ValRecherche Then
        ConcatVLookUp = ConcatVLookUp & Separateur & c.Offset(0, IndexCol - 1).Value
        If Not blnConcat Then Exit For
    End If
Next c
ConcatVLookUp = Mid(ConcatVLookUp, Len(Separateur) + 1)
 
Set c = Nothing
End Function

J'ai testé cette fonction et à priori elle fonctionne mais j'ai un petit soucis :
La fonction me retourne des valeurs qui font doublon, triplon, etc...
Ex : Divers - Divers - Divers - Catalogue - Catalogue - Catalogue - Catalogue - Catalogue

J'aimerai obtenir quelque chose du style : Divers - Catalogue

Est-ce possible? Si oui que faut-il modifier/ajouter dans la fonction "concatvlookup" pour obtenir le résultat voulu?

Question subsidiaire : Je travaille sur Excel 2004 pour MAC. Est-il possible que cette fonction ne soit pas entièrement compatible et me fasse planter Excel quand j'ouvre mon fichier?

Merci d'avance pour le temps que vous m'accorderez
 

tete-jaune

XLDnaute Junior
Re : Fonction à améliorer + compatibilité MAC

Bonjour pierrejean,
En effet si je met "faux" dans blnConcat je n'obtiens qu'une seule valeur : la 1ère. (résultat identique à la fonction RechercheV)
Mais ce n'est pas le résultat que je souhaiterait.
Quand je met cette valeur à "vrai" j'obtiens comme résultat :
Divers - Divers - Divers - Catalogue - Catalogue - Catalogue - Catalogue - Catalogue
Moi j'aimerai pouvoir supprimer tous ces doublons, triplons, etc.. et avoir une valeur de chaque : "Divers" et "Catalogue"
Je joins un fichier Excel d'exemple.
En tout cas merci pour ta réponse.
 

Pièces jointes

  • Test.xls.zip
    10.9 KB · Affichages: 21
  • Test.xls.zip
    10.9 KB · Affichages: 21
  • Test.xls.zip
    10.9 KB · Affichages: 24

pierrejean

XLDnaute Barbatruc
Re : Fonction à améliorer + compatibilité MAC

bonjour a tous

Version avec collection (comme suggéré par JeanMarie :) )

Code:
Function ConcatVLookUp(ByVal ValRecherche, _
                       ByVal TabMatrice As Range, _
                       ByVal IndexCol, _
              Optional ByVal blnConcat As Boolean = False, _
              Optional ByVal Separateur = ";") As Variant
 
' Permet une recherchev sur des caractères génériques
'
Dim c As Range
Dim coll As Collection
Set coll = New Collection
Application.Volatile
 
For Each c In TabMatrice.Cells
    If c.Value Like ValRecherche Then
    On Error Resume Next
        coll.Add c.Offset(0, IndexCol - 1).Value, CStr(c.Offset(0, IndexCol - 1).Value)
       If Err.Number = 0 Then
        ConcatVLookUp = ConcatVLookUp & Separateur & c.Offset(0, IndexCol - 1).Value
       End If
    On Error GoTo 0
        If Not blnConcat Then Exit For
    End If
Next c
ConcatVLookUp = Mid(ConcatVLookUp, Len(Separateur) + 1)
 
Set c = Nothing
End Function
 

Pièces jointes

  • tete-jauneTest.zip
    10.4 KB · Affichages: 28

tete-jaune

XLDnaute Junior
Re : Fonction à améliorer + compatibilité MAC

Merci JeanMarie
Je viens de faire un test et c'est exactement le résultat que je souhaitai :)

Par contre j'ai un autre soucis; 2e question de mon 1er message :
Je travaille sur Excel 2004 pour MAC. Est-il possible que cette fonction ne soit pas entièrement compatible et me fasse planter Excel quand j'ouvre mon fichier?

En effet, je créée un fichier vierge dans lequel j'incorpore la fonction dans un module avec Visual Basic Editor.
Je peux utiliser la fonction sans soucis et enregistrer mon document.
Par contre, quand je veux le réouvrir, après avoir accepter d'activer les macros, Excel plante et se ferme...
J'ai bien essayé de lire le rapport d'erreur mais c'est incompréhensible.
Quelqu'un aurait-il une idée?
Merci
 

myDearFriend!

XLDnaute Barbatruc
Re : Fonction à améliorer + compatibilité MAC

Bonjour tete-jaune, pierrejean, JeanMarie, le Forum,

Pour éviter le recours à la collection et peut-être alléger un peu cette fonction :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Function[/COLOR] ConcatVLookUp([COLOR=NAVY]ByVal[/COLOR] ValRecherche, _
                       [COLOR=NAVY]ByVal[/COLOR] TabMatrice [COLOR=NAVY]As[/COLOR] Range, _
                       [COLOR=NAVY]ByVal[/COLOR] IndexCol, _
              [COLOR=NAVY]Optional ByVal[/COLOR] blnConcat [COLOR=NAVY]As Boolean[/COLOR] = [COLOR=NAVY]False[/COLOR], _
              [COLOR=NAVY]Optional ByVal[/COLOR] Separateur = ";") [COLOR=NAVY]As Variant[/COLOR]
                  
[COLOR=GREEN]' Permet une recherchev sur des caractères génériques[/COLOR]
[COLOR=NAVY]Dim[/COLOR] C [COLOR=NAVY]As[/COLOR] Range
[COLOR=NAVY]Dim[/COLOR] T [COLOR=NAVY]As String[/COLOR]
    Application.Volatile 
    [COLOR=NAVY]For Each[/COLOR] C [COLOR=NAVY]In[/COLOR] TabMatrice.Cells
        [COLOR=NAVY]If[/COLOR] C.Value [COLOR=NAVY]Like[/COLOR] ValRecherche [COLOR=NAVY]Then[/COLOR]
            T = Separateur & C.Offset(0, IndexCol - 1).Text
            [COLOR=NAVY]If Not[/COLOR] ConcatVLookUp [COLOR=NAVY]Like[/COLOR] "*" & T & "*" [COLOR=NAVY]Then[/COLOR]
                ConcatVLookUp = ConcatVLookUp & T
            [COLOR=NAVY]End If
            If Not[/COLOR] blnConcat [COLOR=NAVY]Then Exit For
        End If
    Next[/COLOR] C
    ConcatVLookUp = Mid(ConcatVLookUp, Len(Separateur) + 1)   
    [COLOR=NAVY]Set[/COLOR] C = [COLOR=NAVY]Nothing
End Function[/COLOR]
Par contre, je ne m'explique pas le plantage que tu rencontres avec la version de cette fonction proposée par pierrejean... et j'imagine que tu vas avoir le même problème avec celle-ci. Ton problème doit être ailleurs et pas forcément lié à une incompatibilité Mac...

Cordialement,
 

JeanMarie

XLDnaute Barbatruc
Re : Fonction à améliorer + compatibilité MAC

Re...

Sur les deux fichiers transmis sur ce fil, en l'ouvrant sur Excel 2004 (2008 ce n'est pas la peine, il n'y a plus de VBA). Excel a littéralement quitté.

J'ai donc ouvert les fichiers en désactivant les macros, puis enregistrer le fichier, et ré-ouvert en activant les macros, et c'est bon.

Je ne vois pas le pourquoi de la chose.

PS : Pierrejean, le fichier transmis ne contient pas la function modifiée.

Edit : Salut Didier, ta solution fonctionne aussi sur mac, te connaissant bien, je savais que tu allais utiliser Like, que je n'arrive jamais à me souvenir, et pour cause, elle n'est pas visible dans la fenêtre "explorateur d'objet" (fenêtre essentielle sur Mac en VBA).

@+Jean-Marie
 
Dernière édition:

tete-jaune

XLDnaute Junior
Re : Fonction à améliorer + compatibilité MAC

Re,
Après quelques tests, j'ai toujours le même problème.
Sur un autre forum, on a conseillé de supprimé la ligne : Application.Volatile
Ce que j'ai essayé mais il n'y a aucune différence.
D'ailleurs, à quoi correspond cette ligne de code?
Je joins un fichier que je viens de créer avec la dernière fonction proposée par Didier. Je n'arrive plus à l'ouvrir.
D'ailleurs si j'essaie d'ouvrir le fichier en désactivant les macros, Excel me dit qu'il ne peut pas désactiver les macros (Microsoft Excel version 4.0 macro)

J'ai bien l'impression que cela ne vient pas d'une incompatibilité en effet mais alors aucune d'idée de l'origine du problème. Du coup je suis complètement bloqué... :(
 

Pièces jointes

  • TestV4.xls.zip
    10.3 KB · Affichages: 32

Discussions similaires

Statistiques des forums

Discussions
312 453
Messages
2 088 551
Membres
103 881
dernier inscrit
malbousquet