XL 2013 [VBA] Worksheetfunction SUMPRODUCT

Mjgreg67

XLDnaute Junior
Hello le forum

Cela fait maintenant 2H que je me casse la tête à faire fonctionner une formule VBA qui ne me semble pas si complexe que cela...


Dans mon fichier originial des SOMMEPROD mais le fichier en question rame beaucoup.
C'est pourquoi j'ai décidé de passer sous VBA. Cela semble être beaucoup plus rapide car le calcul ne se fait pas en instantané.

En PJ un exemple de ce que je souhaite faire. Je me suis d'ailleurs permis la formule SOMMEPROD qui fonctionne.

J'aimerai connaitre mon coût total pour l'achat et la vente de bois (dans l'exemple je n'ai que fait pour la vente...)

Les conditions sont les suivantes :

Réalise moi la somme en produit lorsqu'en colonne A les dates sont entre le 01/01/2017 et 02/01/2017 et qu'en colonne B il y a la mention "BOIS" et en colonne D la mention "VENTE".

Vous retrouverez mon code VBA dans le module 1 sous le nom "SUB TESTER ()".
Ce dernier m'affiche dans un msgbox la réponse 0. Je n'arrive pas à comprendre pourquoi...

Je ne souhaite pas passer par FORMULA .

Quelqu'un peut m'aider à trouver la bonne formule ?

Merci !
 

Pièces jointes

  • Test.xlsm
    14.7 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Bonjour.
En mettant :
VB:
MsgBox Application.Evaluate("SUMPRODUCT(('Feuil1'!A2:A1000=" & CLng(var1) & ")*('Feuil1'!B2:B1000=""" & var3 & """)*('Feuil1'!D2:D1000=""" & var4 & """),'Feuil1'!C2:C1000,'Feuil1'!E2:E1000)")
Ça m'affiche 2242,2
 

Mjgreg67

XLDnaute Junior
Au top cela fonctionne !:)

Une autre technique a été trouvé aussi :

Dim F1 As Range
Dim i As Integer
Dim s As Double
Dim Vente As Double
Dim Achat As Double
Dim DernLigne As Long
Application.Calculation = xlCalculationManual
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Set F1 = Sheets("Feuil1").Range("A1:A" & DernLigne)
montant = 0
s = 0
For i = 1 To F1.Rows.Count
If F1(i, 1) >= Cells(2, 8) And F1(i, 1) <= Cells(2, 9) And F1(i, 2) = "BOIS" And F1(i, 4) = "VENTE" Then
s = F1(i, 3) * F1(i, 5)
Vente = Vente + s
End If
If F1(i, 1) >= Cells(2, 8) And F1(i, 1) <= Cells(2, 9) And F1(i, 2) = "BOIS" And F1(i, 4) = "ACHAT" Then
s = F1(i, 3) * F1(i, 5)
Achat = Achat + s
End If
Next i
Cells(4, 9) = Vente
Cells(5, 9) = Achat
Application.Calculation = xlCalculationAutomatic
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 918
Membres
103 038
dernier inscrit
Herve7