Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WorkSheetFunction.SumProduct # SommeProd ? Pourquoi ?

4 réponses
Avatar
Pierre TISSENDIER
Bonjour,
Quelqu'un pourrait-il m'aider à résoudre ce problème?
La fonction WorksheetFunction.SumProduct ne fonctionne pas comme la fonction
SOMMEPROD.

Voici mon exemple :
A B C D E F
1 06/06/2006 5 2006 2007 2008
2 01/04/2007 7 5 15 9
3 02/06/2007 8
4 05/03/2008 9


Colonne A des dates, Colonne B des Nombres.
Colonnes D,E,F en entête ligne 1 j'inscrit l'année,
dans la ligne 2 pour chaques cellules j'ai saisie la formule :
=SOMMEPROD((ANNEE($B$2:$B$5)=E2)*($C$2:$C$5))
Ça marche bien ! :-)))
Mais je voudrais utiliser la formule en VBA sous la forme :
[E3] = WorksheetFunction.SumProduct((Year([B2:B5])=[E2])*([C2:C5])

et la j'obtiens l'erreur 13:Incompatibilité de type :-(

Je n'arrive pas à trouver une réponse même sur les forums en anglais et je
voudrais éviter de passer par la programmation d'un boucle pour résoudre (ça
c'est pour le fun quoi! :-)))

Encore merci à ceux et celles qui voudrons bien me donner une piste ou me
répondre que ma quête est sans espoir :-( (il pleut dehors).

4 réponses

Avatar
Filochard
Mais je voudrais utiliser la formule en VBA sous la forme :
[E3] = WorksheetFunction.SumProduct((Year([B2:B5])=[E2])*([C2:C5])


[E3] = [SUMPRODUCT((YEAR(B2:B5)â)*(C2:C5))]

Avatar
Pierre TISSENDIER
Merci Filochard

Il pleut chez vous/toi aussi ;-))))

As tu le temps de m'expliquer?
Est ce que ta solution peut marcher avec des variables vba.
Si je veux par exemple écrire un truc du style .... (en arrangeant la
syntaxe sans doute ;-)))
Classeur1.Feuille4.Cells(r,l)=[Sumproduct((year(Classeur2.Feuille3.Range("C2:C5") Cells(x,y))*(Range("A:B"))]
Est que le secret réside uniquement dans le fait de mettre la formule entre
[] ?

enfin, encore merci et bon wk !


"Filochard" a écrit dans le message de news:
u2nvOdS$
Mais je voudrais utiliser la formule en VBA sous la forme :
[E3] = WorksheetFunction.SumProduct((Year([B2:B5])=[E2])*([C2:C5])


[E3] = [SUMPRODUCT((YEAR(B2:B5)â)*(C2:C5))]




Avatar
Filochard
Est ce que ta solution peut marcher avec des variables vba.
Si je veux par exemple écrire un truc du style .... (en arrangeant la
syntaxe sans doute ;-)))
Classeur1.Feuille4.Cells(r,l)=[Sumproduct((year(Classeur2.Feuille3.Range("C2:C5") > Cells(x,y))*(Range("A:B"))]
Est que le secret réside uniquement dans le fait de mettre la formule entre
[] ?


Il faut utiliser la fonction Evaluate et une chaîne (concatener) de caractères
qui respecte la syntaxe..!
Exemple avec les données dans un autre fichier ouvert (pour un fichier fermé,
modifier le chemin d'accès)
plg1 = "$B$2:$B$5"
plg2 = "$E$1"
plg3 = "$C$2:$C$5"
MsgBox Application.Evaluate("SUMPRODUCT((YEAR(" & "[Classeur3]Feuil1!" & plg1 &
")=" & "[Classeur3]Feuil1!" & plg2 & ")*(" & "[Classeur3]Feuil1!" & plg3 & "))")

Ca pourrait être aussi :
plg0 = "[Classeur3]Feuil1!"
plg1 = "$B$2:$B$5"
plg2 = "$E$1"
plg3 = "$C$2:$C$5"
MsgBox Application.Evaluate("SUMPRODUCT((YEAR(" & plg0 & plg1 & ")=" & plg0 &
plg2 & ")*(" & plg0 & plg3 & "))")

etc.....

Avatar
Pierre TISSENDIER
merci beaucoup !

à bientôt peut-être :-))))


"Filochard" a écrit dans le message de news:
eJX%23IvT$
Est ce que ta solution peut marcher avec des variables vba.
Si je veux par exemple écrire un truc du style .... (en arrangeant la
syntaxe sans doute ;-)))
Classeur1.Feuille4.Cells(r,l)=[Sumproduct((year(Classeur2.Feuille3.Range("C2:C5") >> Cells(x,y))*(Range("A:B"))]
Est que le secret réside uniquement dans le fait de mettre la formule
entre
[] ?


Il faut utiliser la fonction Evaluate et une chaîne (concatener) de
caractères qui respecte la syntaxe..!
Exemple avec les données dans un autre fichier ouvert (pour un fichier
fermé, modifier le chemin d'accès)
plg1 = "$B$2:$B$5"
plg2 = "$E$1"
plg3 = "$C$2:$C$5"
MsgBox Application.Evaluate("SUMPRODUCT((YEAR(" & "[Classeur3]Feuil1!" &
plg1 & ")=" & "[Classeur3]Feuil1!" & plg2 & ")*(" & "[Classeur3]Feuil1!" &
plg3 & "))")

Ca pourrait être aussi :
plg0 = "[Classeur3]Feuil1!"
plg1 = "$B$2:$B$5"
plg2 = "$E$1"
plg3 = "$C$2:$C$5"
MsgBox Application.Evaluate("SUMPRODUCT((YEAR(" & plg0 & plg1 & ")=" &
plg0 & plg2 & ")*(" & plg0 & plg3 & "))")

etc.....