VBA ne fonctionne pas avec formule matricielle ?

nze123

XLDnaute Nouveau
Bonjour
Je chercher à établir une "shopping list" par colonne en cochant dans une liste de ligne sur chaque colonne :
2011-11-14 20h31_43.png

j'ai donc la formule matricielle :
Code:
SI(B6:B15="x";$A$6:$A$15;"")
qui me retourne les valeurs des lignes cochées que je cherche à concaténer pour faire ma shopping list
Comme la fonction CONCATENER ne fonctionne pas avec les references de tableaux mais n'accepte qu'une liste d'arguments, j'ai donc créé la fonction VBA suivante

Code:
Function ConcatList(r As Range, Optional separator As String) As String
Dim c As Range
If separator = "" Then separator = ", "
ConcatList = ""
For Each c In r
  If ConcatList = "" Then
    ConcatList = c.Text
  Else
    If c.Text <> "" Then ConcatList = ConcatList & separator & c.Text
  End If
Next c
End Function
Qui fonctionne bien avec le range de la colonne A (visible en A16) mais pas avec le résultat de la formule matricielle ci-dessus

Auriez-vous une idée de ce qui provoque ce comportement ?
Regarde la pièce jointe Concatlist.xls
Merci d'avance

--
NZ
 

Dranreb

XLDnaute Barbatruc
Re : VBA ne fonctionne pas avec formule matricielle ?

Bonjour
Pour garder sa polyvalence à votre fonction, réécrivez la ainsi :
VB:
Function ConcatList(ByVal V As Variant, Optional ByVal Separator As String = ", ") As String
Dim R As Long, C As Long, ItsNotTheFirstValue As Boolean
If TypeName(V) = "Range" Then V = V.Value
For R = 1 To UBound(V, 1): For C = 1 To UBound(V, 2)
   If V(R, C) <> "" Then
      If ItsNotTheFirstValue Then ConcatList = ConcatList & Separator Else ItsNotTheFirstValue = True
      ConcatList = ConcatList & V(R, C)
      End If
   Next C: Next R
End Function
Les évaluations d'expressions matricielles sont en effet passées en tableaux de variants.
Cordialement.
 
Dernière édition:

nze123

XLDnaute Nouveau
Re : VBA ne fonctionne pas avec formule matricielle ?

Voilà donc la subtilité ; et pourtant l'évaluation de la formule matricielle me retourne bien un vecteur ex: {"A";"";"";"D";"E";"F";"";"";"I";"J"}

Merci pour cette proposition.

Y a-t-il moyen de s'affranchir de VBA pour faire la même manip ? (formule excel, sans utiliser CONCATENER qui ne fonctionne pas avec les plages de cellules)
Il semble que les formules matricielles peuvent faire des trucs assez puissants : Excel Magic Trick 473: Extract Unique Records with Formula (Complex Array Formula) - YouTube.
Mais je ne maitrise pas trop les subtilités..

Cordialement,
NZ
 

Discussions similaires

Statistiques des forums

Discussions
312 297
Messages
2 086 972
Membres
103 412
dernier inscrit
antoire