Somme Si + Période

Fermé
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009 - 6 août 2009 à 17:06
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 - 7 août 2009 à 13:28
Bonjour,

J'ai 2 colonnes de données. Une première colonne A avec des dates (format jj/mm/aa); une deuxième colonne B avec des quantités. Je souhaiterais obtenir dans une cellule la somme des quantités selon le mois.

J'ai tenté une formule mais elle ne prend en compte qu'un seul jour:
SUMIF(A1:A150;DATE(2009;1;1);B1:B150)

J'ai tenté de mettre 0, n, x ou ? à la place du jour mais ça ne donne aucun résultat.

Pouvez-vous m'aider s'il-vous-plaît ?

Ludo

16 réponses

tompols Messages postés 1219 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 460
6 août 2009 à 17:53
Bonjour,
2 propositions (pour une plage de 839 lignes et un critere de date janvier2009) :
=SOMMEPROD((MOIS(A1:A839)=1)*(ANNEE(A1:A839)=2009)*(B1:B839))
=> formule "classique"
=SOMME((MOIS(A1:A839)=1)*(ANNEE(A1:A839)=2009)*(B1:B839))
=> formule matricielle à valider par CTRL + SHIFT + ENTREE
Tom
1
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
6 août 2009 à 17:15
Je pense que tu devrai créer une macro... ça sera plus pratique que les formules excel
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
6 août 2009 à 17:27
Et c'est là que ça coince. Je ne sais pas faire ... pour l'instant. Mais j'ai l'impression que je vais devoir m'y mettre ! On m'avait déjà donné ce conseil mais j'ai persévéré dans les formules.

Merci quand même
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
6 août 2009 à 17:28
et tu as trouver avec les formules??
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
6 août 2009 à 17:47
Aucun problème. Ca m'intéresse beaucoup justement ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
6 août 2009 à 17:31
Non. J'en ai essayé plusieurs. Certaines mélangées à d'autres. J'ai bien secoué et le résultats n'était jamais au rdv.
La formule qui me paraissait la plus cohérente était SUMIF(A1:A150;DATE(2009;1;1);B1:B150) mais forcément ça ne prend en compte qu'une seule journée.
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
6 août 2009 à 17:42
si tu n'est pas trop réfractaire au macro on peut t'aider à la créer
ça te fera une première approche
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
6 août 2009 à 18:13
bon ok c parti
on va dire que tu va affecté ta futur macro à un bouton...
pour créer un bouton...
Affichage> barre d'outil > formulaire

Clic sur bouton sur la barre d'outil qui est apparu
et dessine ton bouton sur la page qui t'interesse
une fois que tu as dessiner ton bouton tu as une fenetre qui apparait "affecter une macro"
sinon clic droit sur ton bouton et "affecter une macro"

ensuite clic sur nouvelle et tu as les pages de code qui apparaissent

une macro s'est créée et le curseur clignote...
(Sub est le terme de début de macro, ensuite tu as un nom de macro que tu pourra modifier si tu veux (mais pour l'instant laisse le nom automatique) ensuite les parenthèse () et toute macro doit se finir par end sub)

avant sub colle ça
dim DateF as Date
dim Som as Single
entre la ligne sub et end sub colle ce qui suit

for i=X to Y (remplace le X par le numéro de la première ligne avec une date de ta colonne date et le Y par le numéro de ta dernière)
DateF = Sheets("NomDeTaFeuille").Cells(i,NuméroDeTaColonneDeDate) (A=1, B=2...)
if Month(Date)=1 then
Som = Som + Sheets("NomDeTaFeuille").Cells(i,NuméroDeTaColonneQuantité)
end if
next i
Sheets("NomDeTaFeuille").Cells(NumLigne,NumColonne).value = som
(choisi une cellule dans laquelle afficher la somme et inscrit le numéro de sa ligne et le num de sa colonne )

Tout ce qui est en gras est à modifier par toi
essaye ça comme ça et demain on voit pour les explication et les modif...
cette macro fais la somme des quantité pour le mois de janvier...
on perfectionnera ensuite pour le faire pour chaque mois
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
7 août 2009 à 09:46
Tout d'abord merci beaucoup pour l'aide.

J'ai fait un petit tableau "test" sur lequel je m'essaie aux macros.
En colonne D les dates commencent au 01/08/09 en cellule D3.
Les quantités associées se trouvent en colonne F et commencent en cellule F3.
Le nom de ma feuille est "bilan".

Dim DateF As Date
Dim Som As Single
Sub Button1_Click()
For i = 3 To 500
DateF = Sheets("bilan").Cells(i, 4) -> Quand je clique sur le bouton, "Can't execute in break mode" apparait et la ligne est surlignée en jaune.
If Month(DateF) = 8 Then
Som = Som + Sheets("bilan").Cells(F, i)
End If
Next i
Sheets("bilan").Cells(9, 8).Value = Som
End Sub
0
tompols Messages postés 1219 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 460
7 août 2009 à 09:53
Bonjour,
Je persiste, utilser une macro ds ce cas n'est pas approprié : une formule, ou un TCD peuvent largement suffire (et seront plus performants que du code VBA).
Maintenant si effectivement tu souhaites en profiter pour t'intéresser aux macros, no pb.... ;)
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
7 août 2009 à 10:07
@ Tompols

Je découvre bel et bien les macros mais je ne ferme pas la porte à toutes autres solutions. J'en apprends encore plus !

J'ai rentré la première formule comme cela:
=SOMMEPROD((MONTH(D3:D841)=8)*(YEAR(D3:D841)=2009)*(F3:F839))

La seconde de cette manière (et j'ai bien validé par ctrl+shift+entré)
=SOMME((MONTH(D3:D841)=8)*(YEAR(D3:D841)=2009)*(F3:F841))

Voilà la réponse: #NAME?

Où c'est que ça coince ?

En attendant je vais tenter le TCD !
0
tompols Messages postés 1219 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 460
7 août 2009 à 10:12
Re,
Pemiere chose, tu as l'air d'etre en version anglaise, ds ce cas relmplace SOMME par SUM et SOMMEPROD par SUMPRODUCT...si tu as la possibilité de mettre un fichier exemple sur http://cijoint.fr/ ça nous aiderait je pense.....
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
7 août 2009 à 10:47
Bien vu le coup de la traduction ! Ca marche parfaitement.
Par contre, je souhaiterais malgrè tout comprendre le fonctionnement d'une macro et d'un TCD.

J'ai fait un tableau test.

http://www.cijoint.fr/cjlink.php?file=cj200908/cijUuivSqj.xlsx
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
7 août 2009 à 11:35
Désolé je ne peu pas ouvrir ton fichier il est enregistré en format xml et non en xls
En plus je pense que tu utilise excel2007 je ne possède que la version 2003
si tu peu enregistrer sous ce format je pourrai jetter un coup d'oeil et t'expliquer le fonctionnement de la macro
0
Mr Ludo Messages postés 8 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 7 août 2009
7 août 2009 à 11:43
Et voilà !

http://www.cijoint.fr/cjlink.php?file=cj200908/cijWRbmqgM.xls
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
7 août 2009 à 11:54
Bon, j'ai lancer la macro après quelque modif... ça marche essaye ça on perfectionnera après avec quelques explications

Dim DateF As Date
Dim Som As Single

Sub Bouton1_QuandClic()
For i = 3 To 500
DateF = Sheets("bilan").Cells(i, 2) '-> Quand je clique sur le bouton, "Can't execute in break mode" apparait et la ligne est surlignée en jaune.
If Month(DateF) = 8 Then
Som = Som + Sheets("bilan").Cells(i, 3)
End If
Next i
Sheets("bilan").Cells(6, 7).Value = Som
End Sub
0
ben13.51 Messages postés 112 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 11 janvier 2012 7
7 août 2009 à 13:28
Et si tu lance ce code
avec en F1 "Quantité Janvier", F2 "Quantité Fevrier"..., F12 "Quantité Décembre"
Tu as en une fois toute les sommes

Dim DateF As Date
Dim Som As Single

Sub Bouton1_QuandClic()
For j = 1 To 12
Som = 0
For i = 3 To 500
DateF = Sheets("bilan").Cells(i, 2)
If Month(DateF) = j Then
Som = Som + Sheets("bilan").Cells(i, 3)
End If
Next i
Sheets("bilan").Cells(j, 7).Value = Som
Next j
End Sub
0