SommeProd en VBA [Résolu]

- 4 avril 2014 à 11:07 - Dernière réponse :  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 !
Afficher la suite 

Votre réponse

9 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 4 avril 2014 à 11:13
0
Merci
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.
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 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.
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é !
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 4 avril 2014 à 11:48
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.
Merci pour ton aide, j'ai pu le faire fonctionner !

Bonne journée et à la prochaine
Commenter la réponse de ucfoutu
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 4 avril 2014 à 11:25
0
Merci
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


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.
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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...
Merci Beaucoup pour ton aide et ta disponibilité, c'est bon ça fonctionne !
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.