WorksheetFunction.SumProduct ne fonctionne pas

Bonjour,

J’ai essayé de remplacer mes formules visibles dans la plage G2:I4 de la Feuil2 par une macro.

J’ai tenté la macro ci-dessous sur la Feuil1, mais ça bloque. Avez-vous une idée pourquoi ?

Sub Macro1()
Dim i As Byte, j As Byte

For i = 2 To 4
    For j = 7 To 9
        Cells(i, j) = Application.WorksheetFunction.SumProduct((Range("A:A") = Cells(i, 6)) * (Range("D:D") = Cells(1, j)))
    Next j
Next i

End Sub

Cordialement.

Bonjour,

J'avoue ne pas comprendre d'où vient l'erreur, n'utilisant pas trop les formules de cette manière

Cependant, je peux te proposer l'alternative suivante :

Sub Macro1()

    Dim i As Byte, j As Byte

    For i = 2 To 4
        For j = 7 To 9
            Cells(i, j).FormulaLocal = "=SommeProd((A:A)=(" & Chr(64 + i) & "6)*(D:D)=" & Chr(65) & j & ")"
        Next j
    Next i

End Sub

Ce qui renvoie la formule :

=SOMMEPROD((A:A)=(B6)*(D:D)=A7)

Cordialement,

Eriane

Salut Eriane,

Ma question précise était : Savez-vous pourquoi mon code ne fonctionne pas

Merci quand même pour ta tentative d'aide.

Amicalement.

Salut,

réponse ici peut-être !

Sinon essayer sans WorksheetFunction : Application.SumProduct(…)

Bonjour Yvouille,

Au vu des nombreux messages sur le sujet, il semblerait que la méthode WorksheetFunction.SumProduct n’offre pas les mêmes possibilités que SOMMEPROD.

La solution la plus fréquemment utilisée est de coupler EVALUATE et SOMMEPROD pour obtenir un résultat équivalent.

Cells(i, j) = Evaluate("SUMPRODUCT((A:A=" & Cells(i, 6).Address & ") * (D:D=" & Cells(1, j).Address & "))")

A+

Bonsoir,

cela reste une énigme pour moi. en faisant des recherches sur internet, j'ai vu qu'un galopin01 s' était déjà attaqué à ce sujet en 2008, en vain semble-t-il !

Re,

Idem pour moi.

Le résultat est que la fonction SommeProduct en VBA ne tolère pas les expressions booléennes.

Donc la fonction 'Evaluate' est à privilégier.

Bonsoir à Frangy et h2so4...

Cdlt.

Bonsoir,

Je suis finalement surpris d’avoir reçu autant de réponses alors que je constate à l’instant que j’ai oublié de placer mon fichier dans mon premier message

@ Marc L

Merci pour ta réponse. Il est bien entendu que c’est afin de pouvoir répondre à notre ami btmed sur son fil que j’ai placé moi-même cette demande car je trouvais que la solution de ThauThème était quand même un peu limitée (peu de possibilités de modifier l'ordre des données de base, ni d'en ajouter). Par contre je cherchais absolument à utiliser une formule VBA et non pas à placer une formule sur la feuille de calcul Excel comme tu l’as proposé toi.

@ Frangy

Ta solution est effectivement celle qui se rapporte le plus de mon envie et je t'en remercie bien. Ca fonctionne parfaitement bien que ça mouline pas mal. Je suis sur une vieille bécane au chalet et ça prend 18 secondes ! Mais ce n’est pas bien grave, l’essentiel étant que ça fonctionne.

@ Jean-Eric

Dernier arrivé, dernier remercié Merci pour cette explication qui lève un coin du voile recouvrant ce mystère.

Bonne continuation à vous tous.

Oui mais une formule VBA pure est souvent plus longue à s'exécuter via une boucle

qu'une formule R1C1 par exemple directement appliquée à une plage de cellules …

J'ai eu un cas équivalent sur un autre forum avec deux feuilles de calculs dans une fonction RECHERCHEV :

la formule pure VBA via une boucle était "interminable" et plantait Excel d'après l'initiateur de la discussion

tandis que la même formule appliquée directement à l'intégralité de la plage puis écrasée par les valeurs est quasi instantanée !

Et depuis Excel 2007 l'intégralité d'une colonne comportant plus d'un million de cellules, mieux vaut réduire la portée

de la colonne dans une formule à la partie utilisée par les données sinon effectivement « ça mouline pas mal » !

Salut Marc,

On va dire que c’est toi qui a raison et on passe à autre chose.

Cordialement.

NB : J'avais indiqué mon problème comme 'Résolu'

Rechercher des sujets similaires à "worksheetfunction sumproduct fonctionne pas"