WorkSheetFunction.SumProduct # SommeProd ? Pourquoi ?

Le
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)â)*($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).
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Filochard
Le #4742371
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))]

Pierre TISSENDIER
Le #4742331
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" 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))]




Filochard
Le #4742221
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.....

Pierre TISSENDIER
Le #4742051
merci beaucoup !

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


"Filochard" 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.....




Publicité
Poster une réponse
Anonyme