Somme Si + Période

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
Configuration: Windows XP Internet Explorer 6.0

16 réponses

  1. Contributeur
    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
    1. Je pense que tu devrai créer une macro... ça sera plus pratique que les formules excel
      0
      1. 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
        1. et tu as trouver avec les formules??
          0
          1. Aucun problème. Ca m'intéresse beaucoup justement ...
            0
        2. 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
          1. 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
            1. 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
              1. 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
                1. Contributeur
                  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
                  1. @ 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
                    1. Contributeur
                      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
                      1. 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
                        1. 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
                          1. Et voilà !

                            http://www.cijoint.fr/cjlink.php?file=cj200908/cijWRbmqgM.xls
                            0
                            1. 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
                              1. 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