Somme de valeurs en fonction des dates d'un fichier variable - VBA

Bonjour à toutes et à tous,

J’espère que vous allez bien,

Je tourne en rond sur un problème certainement très simple à résoudre mais...
En colonne B j'ai des dates allant du 01/01/2022 au 31/12/2022.

Je cherche à faire la somme des colonnes H en tenant compte des dates appartenant au même mois.

C’est-à-dire :

  • Si en colonne B, on a une date comprise 01/01/2022 au 31/01/2022, j’aimerai que le résultat s’affiche en cellule K2 (mois de janvier)
  • Si en colonne B, on a une date comprise 01/02/2022 au 29/02/2022, j’aimerai que le résultat s’affiche en cellule K3 (mois de février)
  • Si en colonne B, on a une date comprise 01/03/2022 au 31/03/2022, j’aimerai que le résultat s’affiche en cellule K4 (mois de mars)
  • Et ainsi de suite ...

NB : le tableau étant variable, c'est-à-dire que les lignes appartenant à un MOIS peuvent augmenter ou diminuer, j'aimerai que le code VBA tienne compte de cela.

Ci-joint un fichier plus explicite.

Merci d'avance pour votre aide

29somme-si.xlsx (13.18 Ko)

Bonjour

Pourquoi VBA ?

On peut faire cela par formules (avec SOMME.SI.ENS) ou TCD

Dans les 2 cas il est plus que conseillé de travailler en tableau structuré (existent depuis plus de 20 ans dans Excel) afin de suivre automatiquement l'évolution du nombre de ligne sans formules traitant 1 million de lignes ramant inutilement.

image

Merci 78Chris,

Sur Excel, je sais déjà le faire.

J'aimerai aussi savoir comment cela se fait en VBA afin de compléter mon travail qui est fait en VBA.

Dans l'attente de votre aide,

RE

Il suffit d'appeler la fonction SUMIFS en VBA et le tableau permet de coder proprement aussi en VBA...

Avec un tableau structuré nommé Data

Sub SOMMESI()
    With [Data].ListObject
        For i = 2 To 13
            Range("L" & i).Value = Application.WorksheetFunction.SumIfs(.ListColumns(8).DataBodyRange, .ListColumns("Date").DataBodyRange, ">=" & CLng(DateSerial(2022, i - 1, 1)), .ListColumns("Date").DataBodyRange, "<" & CLng(DateSerial(2022, i, 1)))
        Next
    End With
End Sub
image

Merci 78Chris,

Mais s'il te plait, peux-tu mettre les commentaires sur ton code VBA ? Suis un novice et ton code est trop complexe pour moi.

A peine je le comprends.

Dans l'attente de votre aide,

RE

C'est toi qui insiste pour coder inutilement ici...

Comme dit, tu mets ton tableau initial sous forme de Tableau structuré nommé Data

Après c'est une simple boucle de 1 à13 (numéros des lignes du petit tableau où doivent s'inscrire les montants mensuels

Et on calcule avec SUMIFS (le nom US de SOMME.SI.ENS) la valeur. Ont se base sur la ligne-1 puisque 2-1 c'est janvier, 3-1 c'est février etc...

Comme les dates sont sous la forme française il faut les traduire en nombre pour que cela fonctionne

DateSerial(2022, i - 1, 1)

Donne le 1er du mois mais on convertit en nombre avec CLng

With [Data].ListObject

Permet de se référer au Tableau structuré dont on utilise dans le SOMME.SI la 8ème colonne (avec un retour ligne dans le titre c'est merd*que d'utiliser le nom en VBA) et la colonne Date

C'est l'équivalent VBA de

=SOMME.SI.ENS(Data[Mouvement 
crédit];Data[Date];">="&DATE(2022;LIGNE()-1;1);Data[Date];"<"&DATE(2022;LIGNE();1))

Merci beaucoup 78Chris,

Rechercher des sujets similaires à "somme valeurs fonction dates fichier variable vba"