Bonjour Gael,
Merci pour la proposition, malheureusement ce n'est pas possible pour moi car j'ai des impératifs strictes en terme de présentation des chiffres.
Du coup je continue à chercher et je dois avouer que je me suis résolu à faire appel au VBA sous la forme d'une fonction pour résoudre ce problème.
Mon but est de créer une fonction qui ferai un test pour identifier si les libellés contiennent le nom d'une série de marques et donnerai un vecteur résultat d'une seule colonne (contenant des 0 et des 1) pour pouvoir être imbriquée dans une formule de sommeprod.
du coup ça me donne quelque chose du type:
=SOMMEPROD(multicherche(Brand;Data);Data_value)
Brand (sélection des marques de la catégorie)
Data (libellés des transactions)
avec la fonction multicherche définit comme il suit:
Function multicherche(cherche, donnee As Variant)
Dim vecteur_cherche(), vecteur_donnee(), vecteur_resultat() As String
Dim i, j, max_i, max_j, valeur As Integer
Dim cel As Range
'intialise les variables
i = 0
j = 0
max_i = 0
max_j = 0
valeur = 0
'compte le nombre de valeurs à chercher
For Each cel In cherche.Cells
max_i = max_i + 1
Next cel
'donne la dimension de la zone de données
For Each cel In donnee.Cells
max_j = max_j + 1
Next cel
'on dimensionne les tableaux
ReDim vecteur_cherche(max_i)
ReDim vecteur_donnee(max_j)
ReDim vecteur_resultat(max_j)
'on remplit le tableau vecteur_cherche avec les valeurs de la zone cherche
For i = 1 To max_i
vecteur_cherche(i) = cherche.cel.Offset(i - 1)
Next i
'on remplit le tableau vecteur_données avec les valeurs de la zone donnée
For j = 1 To max_j
vecteur_donnee(j) = donnee.cel.Offset(j - 1)
Next j
'teste si la valeur cherchée est dans la zone de données (alors +1) et attribue la valeur au vecteur résultat
For j = 1 To max_j
For i = 1 To max_i
If InStr(vecteur_donnee(j), vecteur_cherche(i)) > 0 Then
valeur = 1
'teste si le texte de la ligne i du vecteur recherche est contenu dans le texte de la ligne j du vecteur résultat
Next i
vecteur_resultat(j) = valeur
'réinitialise le compteur et passe à la ligne suivante du vecteur résultat
valeur = 0
Next j
multicherche = vecteur_resultat
End Function
Bien sûr je ne suis pas bon en VBA et du coup ça plante. Si vous pouviez me dire ou je me trompe et m'aider à finir vous seriez bien sympa.
Merci d'avance et bonne soirée,
Heriss