Creer une fonction sommeprod entre deux dates

Bonjour,

Je désirais créer une fonction de calcul entre deux dates et en complexifiant la fonction déja existante créer en intégrant la somme entre deux dates.

SOMMEPROD((GAUCHE((INDIRECT($A$1&"!$b$2:$b$1000"));NBCAR(B3))=GAUCHE(B3;11))*((INDIRECT($A$1&"!$c$2:$c$1000")*(((INDIRECT($A$1&"!$a$2:$a$1000")>=C1)*(((INDIRECT($A$1&"!$a$2:$a$1000")<=D1))))))))

Function Result(NomFeuille As String, ColonneCode As Integer, ColonneValeur As Integer, Critere As String) As Double

Dim Fe As Worksheet

Dim PlgCode As Range

Dim PlgValeur As Range

Dim I As Long

Dim Debut As Long

Dim Fin As Long

Dim Total As Double

Set Fe = ThisWorkbook.Sheets(NomFeuille)

Debut = Fe.Cells(1, ColonneCode).End(xlDown).Row

Fin = Fe.Cells(Rows.Count, ColonneCode).End(xlUp).Row

With Fe: Set PlgCode = .Range(.Cells(Debut, ColonneCode), .Cells(Fin, ColonneCode)): End With

Debut = Fe.Cells(1, ColonneValeur).End(xlDown).Row

Fin = Fe.Cells(Rows.Count, ColonneValeur).End(xlUp).Row

With Fe: Set PlgValeur = .Range(.Cells(Debut, ColonneValeur), .Cells(Fin, ColonneValeur)): End With

For I = 1 To PlgCode.Count

If Left(PlgCode(I).Value, Len(Critere)) = Critere Then Total = Total + PlgValeur(I).Value

Next I

Result = Total

End Function

18classeurtestvba.xlsx (226.21 Ko)

Bonjour,

2 propositions à étudier sans VBA !?

Cdlt.

43classeurtestvba.xlsx (344.99 Ko)

Merci de votre aide, mais ça ne correspond pas à l'utilisation que je veux en faire et je ne serai pas forcement sur du mensuel.

Par contre, je peux en faire une autre utilisation avec un autre objectif.

Merci

Bonjour,

La source du TCD en feuil1 comporte toutes les dates.

Je t'ai montré ce que tu pouvais faire (exemples). A toi d'adapter pour la suite de ton projet ?.

Sinon, la chronologie peut être effectuée par années, trimestres, mois ou encore en jours...

Cdlt.

Salut toutl le monde,

Juste pour info:

à mon avis cette formule donne les mauvais résultats!

=SOMMEPROD((GAUCHE((INDIRECT($A$1&"!$b$2:$b$1000"));NBCAR(B3))=GAUCHE(B3;11))*((INDIRECT($A$1&"!$c$2:$c$1000")*(((INDIRECT($A$1&"!$a$2:$a$1000")>=C1)*(((INDIRECT($A$1&"!$a$2:$a$1000")<=D1))))))))

Essaie cette formule:

=SOMME.SI.ENS(INDIRECT($A$1&"!C:C");INDIRECT($A$1&"!B:B");B3&"*";INDIRECT($A$1&"!A:A");">="&$C$1;INDIRECT($A$1&"!A:A");"<="&$D$1)

Je vais refaire un test sur ma formule pour valider les calcul.

Mais avec cette formule , je peux faire la somme sur 1 chiffre (ou lettre) ou sur de 2 chiffres ( ou lettres) sur 3 chiffres... ect.

ce qui me permet de faire la somme de groupe ou de sous groupe.

Exemple :

somme de la classe 5; somme des 512; somme des 5121...etc.

et ma volonté est de créer une Function en vba afin de pouvoir avoir saisir facilement les variables demandés ( feuille de calcul, date début et de fin , valeur recherche dans la base.

Il faut peut être créer 3 boucles au lieu d'une.

ou peut être tout simplement pas possible !

Rechercher des sujets similaires à "creer fonction sommeprod entre deux dates"