[Excel]Somme conditionnelle vba

Résolu
spass_pa Messages postés 17 Statut Membre -  
 tyuiop -
Bonjour,
je chercher à faire une somme conditionnelle en prenant en compte un interval de dates, je m'explique :

mon tableau est tout simple: 1ere colonne des dates, 2nd colonne des valeurs associées aux dates.

Je dois faire en sorte que sur la Feuil1, en entrant deux dates (ex:01/01/2006 et 31/01/2006, en gros le mois de janvier), on puisse avoir la somme des valeurs correspondantes au mois de janvier.

pour ce faire j'ai une macro qui ressemble à ca :

Sub Rectangle1_QuandClic()

Dim test As Variant
Dim i As Integer

test = 0

For i = 1 To ThisWorkbook.Worksheets.Count

test = test + Worksheets(i).[SUMIF(A:A,Feuil1!E2,B:B)]

Next
Worksheets(1).Range("E10") = test

End Sub

Pour l'instant je teste seulement avec une seule valeur (ex:si en colonne 1 j'ai "3" alors je somme les valeurs de la colonne 2 correspondante). La valeur "3" est entrée dans la cellule E2.

J'ai pas mal parcouru les forums et j'ai rien trouvé pour faire cette somme conditionnelle. J'ai essayé SUMIF mais ca prend pas en compte les intervalles on dirait. Je viens d'essayer SOMMEPROD mais je ne comprends pas trop l'intéret. Et j'ai également essayé des trucs comme ca :
'If Cells(e, 4).Value <= Range("A:A").Value Then
'If Range("A:A").Value <= Cells(f, 4).Value Then

mais aucun succès.

C'est pourquoi je vous demande un petit coup de pouce.

Merci d'avance.

P.S/si je n'ai pas été assez clair n'hésitez pas à me demander d'éclairsir...
Configuration: Windows XP
Internet Explorer 6.0

14 réponses

  1. Claude Claude Messages postés 1757 Statut Membre 584
     
    Correspond à la fonction SOmme.Si de Excel
    1
  2. spass_pa Messages postés 17 Statut Membre
     
    oui SUMIF c'est le SOMME.SI de excel mais en anglais pr le langage vba.
    mais apres je n'arrive pas à prendre en compte l'interval.
    0
  3. spass_pa Messages postés 17 Statut Membre
     
    Voila j'arrive à faire ça mais comment intégrer l'autre date?

    SUMIF(A:A,">12/01/2006",B:B)
    0
    1. Claude Claude Messages postés 1757 Statut Membre 584
       
      Dans ton SUMiF, la date sera toujours codée en dur ?
      0
  4. spass_pa Messages postés 17 Statut Membre
     
    je ne sais pas trop ce que "codé en dur " veut dire...en revanche je sais que la date sera toujours prise pour une date et non une chaine de caractères
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. spass_pa Messages postés 17 Statut Membre
     
    Un petit coup de pouce...
    0
  7. Claude Claude Messages postés 1757 Statut Membre 584
     
    La date 12/01/2006 est une constante ou une variable ?
    0
  8. spass_pa Messages postés 17 Statut Membre
     
    pour l'instant c'est une constante pour faire les essais, mais apres ca sera une variable.
    je m'explique : en fait c'est pour faire un récapitulatif d'apres des dates. Et donc on sera amené à le faire sur le mois d'aout, celui de février et ainsi de suite.
    J'ai essayé auparanvant de créer une varible :

    Dim date as variant

    date = "12/01/2006"

    mais quand dans la formule avec le SUMIF j'essaye de mettre la variable date :
    SUMIF(A:A,">date",B:B)
    ca marche pas. Je pense qu'il faut l'écrire autrement mais j'ai beau chercher sur le net je ne trouve pas.
    Par ailleurs si à la place de ">date" je mets ">E2" (pour prendre comme condition une date dans la cellule E2) ca ne marche pas non plus...
    0
  9. Claude Claude Messages postés 1757 Statut Membre 584
     
    Le critère est a priori uniqument une constante; la varaible ne parait pas possible.

    Est ce que c'est une somme par mois que tu veux faire.

    Dans ce cas on crée une cellule interméiaire qui serait égale au mois de la cellule à tester, puis tu fais un somme.si pour le mois concerné

    Je reconnais, c'est moyen.

    L'usage du tableau croisé dynamqiue ne te conviendrait pas ?
    0
  10. spass_pa Messages postés 17 Statut Membre
     
    oui c'est une somme par mois que je veux faire.
    le problème c'est que je dois faire ca sur une centaine de feuilles et que sur chaque feuille il n'y a pas un nombre identique de valeurs à sommer par mois, exemple :

    feuille 1:
    12/06/2006
    20/07/2006
    03/08/2006
    14/08/2006
    24/08/2006
    05/09/2006
    05/10/2006
    10/10/2006
    20/10/2006
    10/11/2006
    17/11/2006
    05/12/2006
    15/12/2006
    02/02/2007
    15/02/2007
    09/03/2007
    03/04/2007
    19/04/2007
    18/05/2007
    07/06/2007

    feuille 2 :
    12/07/2006
    04/09/2006
    22/12/2006
    28/12/2006
    07/05/2007
    16/08/2007
    24/12/2007
    31/12/2007
    02/01/2007

    Je sais déjà comment faire la boucle pour prendre en compte les feuilles.

    Apres je ne sais pas ce qu'est un tableau croisé dynamqiue :S désolé je suis novice.

    qu'en penses tu?
    0
  11. Claude Claude Messages postés 1757 Statut Membre 584
     
    Ton développement sert juste à faire les sommes par mois ?
    0
  12. spass_pa Messages postés 17 Statut Membre
     
    oui et les feuilles représentent plusieurs fournisseurs.
    c'est tout simple en fait
    0
  13. Claude Claude Messages postés 1757 Statut Membre 584
     
    Quelle est ton adresse email ?
    0
    1. spass_pa Messages postés 17 Statut Membre
       
      bobjul7456@msn.com
      0
  14. spass_pa Messages postés 17 Statut Membre
     
    juste pour connaitre l'état d'avancement et savoir si ce que je voulais faire est finalement concrétisable
    0
  15. Claude Claude Messages postés 1757 Statut Membre 584
     
    Je t'ai fait un retour par messagerie !
    0
    1. jerome_lehoux
       
      Salut,

      je cherche à faire la même chose: je voudrais faire la somme des "heures", par mois, pour chaque "item"

      item date heures
      A 01/02/07 24
      A 02/02/07 24
      A 03/02/07 24
      A 21/02/07 24
      A 22/02/07 24
      A 23/02/07 19
      A 24/02/07 13,67
      A 25/02/07 24
      B 17/05/07 24
      B 18/05/07 24
      B 19/05/07 24

      J'ai essayé un truc du genre:

      For i = 4 To row_max

      Do While (Month(Cells(i, 2)) = Month(Cells(i + 1, 2)))
      Cells(i, 4) = Cells(i, 3) + Cells(i - 1, 4)
      i = i + 1
      Loop

      Next i

      mais ça ne marche pas très bien car il me manque le calcul pour le dernier jour de chaque mois... Pourriez-vous me donner un coup de main?

      Merci!
      J.
      0
      1. tyuiop > jerome_lehoux
         
        Tu ne pourrais pas ajouter une colonne a droite ou a gauche.

        Calculer le mois avec la formule mois()* recopie vers le bas .

        Et faire un tableau croisé dynamique*, somme de heures croisée par item et par mois ?

        * il y a une aide en ligne
        0