SommeProd en VBA

Résolu
Nyposh - 4 avril 2014 à 11:07
 Nyposh - 4 avril 2014 à 11:54
Bonjour à tous,

Je souhaite traduire une sommeprod en VBA, et je suis coincé. Pourriez-vous m'apporter votre aide ?

Voici la formule sur la feuille de calcul :
=SOMMEPROD((Feuil2!F2:F2000=Feuil1!C6)*(Feuil2!E2:E2000=Feuil1!E4))

Voici ma tentative VBA correspondante :
Feuil1.Cells(6, 5).Value = WorksheetFunction.SOMMEPROD((Feuil2.Cells(i, 7) = Feuil1.Cells(8, 3) * (Feuil2.Cells(i, 5) = Feuil1.Cells(4, 5))))


Pour i de 2 à 2000.

Merci pour votre aide et bonne journée !

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 avril 2014 à 11:13
Bonjour,
Déjà :
Une ouverture de ton aide VBA (rubrique WorkSheetFunction) puis l'examen des membres (en bas de page) de cet objet te fera vite découvrir que SOMMEPROD n'est pas l'un de ses membres. Il ne te sera pas difficile d'y trouver le membre correspondant à SOMMEPROD.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 avril 2014 à 11:30
SUMPRODUCT n'évalue rien (pas plus que SOMMEPROD).
Tes signes "=" ne risquent donc pas d'y être compris.
Je ne vois par ailleurs pas ce que vient faire là ton EVALUATE. ni pourquoi tu as abandonné worksheetfunction.
Je te rappelle enfin que tant sommeprod que worksheetfunction.sumproduct ne peuvent traiter que des plages de dimensions égales.
0
Merci ucfoutu,

Bien reçu pour les plages de dimension égale, a priori cette condition est remplie.

Peux-tu m'éclairer sur la manière dont je peux faire fonctionner mon Sumproduct en utilisant worksheetfunction du coup ?


Voici le code en question :

Sub Analyse_données()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Integer
Set ws1 = Worksheets("Feuil1")
Set ws2 = Worksheets("Feuil2")

If Not IsEmpty(Feuil1.Cells(4, 5)) & (Feuil1.Cells(6, 3)) = True Then
For i = 2 To 2000
Feuil1.Cells(6, 5).Value = Evaluate("=SumProduct((Feuil2.Cells(i, 7) = Feuil1.Cells(8, 3)) * (Feuil2.Cells(i, 5) = Feuil1.Cells(4, 5)))")
Next
End If
End Sub


Et voici ce que je veux faire : Je souhaite que dans la cellule (6,5) de la Feuil1 s'affiche le nombre de cellules contenant la réponse "Oui" (ou tout autre texte) à une question à la condition que le service de la personne qui y répond soit celui indiqué en tête de colonne (cellule 4,5)


Merci beaucoup de ta disponibilité !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 4/04/2014 à 11:50
Je ne comprends pas (ne cerne pas) bien ta question, mais il semble à priori que worksheetfunction.sumif est ce qu'il te faut alors.
Plutôt Worksheetfunction.Countif, d'ailleurs.
0
Merci pour ton aide, j'ai pu le faire fonctionner !

Bonne journée et à la prochaine
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
4 avril 2014 à 11:25
Bonjour,

Le plus simple est d'utiliser Application.Evaluate()

Exemple:
' Calcul de la Moyenne des cellules M1:M10 si les cellules G1:G10 = "ok"

Sub MoyenneSiViaSommeprod()
Plage1 = "G1:G10"
Plage2 = "M1:M10"
' Pour un critère texte, utiliser Triple Guillemets
critere = """ok"""
SommeProd = "SUMPRODUCT((" & Plage1 & " = " & critere & ")*(" & Plage2 & "))/SUMPRODUCT((" & Plage1 & " = " & critere & ")*(1))"
Mosi = Application.Evaluate(SommeProd)
Debug.Print Mosi
End Sub


0
Bonjour Jordane 45, merci pour ta réponse !

J'aurais besoin de plusieurs éclaircissements :

1 - Je ne crois pas pouvoir calculer une moyenne étant donné qu'il me faut recenser le nombre de cellules contenant une valeur textuelle en fonction de 2 critères. Est-ce bien le cas ?

2 - Mon critère étant variable, dois-je tout de même utiliser les triples guillemets si je fais référence à une cellule plutôt qu'à du texte ?

Merci pour ton éclairage.
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
4 avril 2014 à 11:51
Bonjour

1 - Je ne t'ai donné qu'un exemple d'utilisation... pas le code correspondant à TON besoin.

2 - de mémoire..Dès que le critère est du text ( ou contient du text) il faut l'encapsuler dans des triples guillemets pour qu'il soit accepté dans le someprod.
Mais bon.. rien de t'empèche de tester par toi même...
0
Merci Beaucoup pour ton aide et ta disponibilité, c'est bon ça fonctionne !
0
Rejoignez-nous