Somme selon critères

Bonjour,

Je cherche à additionner des cellules si elles remplissent certaines conditions.

Voici un exemple :

Commande  Chantier  Poste  Prix
E01       2001      P01    10
E01       2001             30
E01       2001             15
E02       3212      P02    12
E02       3212             18
E03       2001      P01    16
E03       2001             14
E03       2001             22

Je voudrais par exemple faire la somme des prix pour les commandes correspondant au chantier 2001 et au poste P01.

Le problème c'est que le numéro de poste n'est pas écrit sur chaque ligne, quand il n'est pas écrit c'est que le poste est celui du dessus.

Dans l'exemple ci-dessus les 3 premières lignes et les 3 dernières correspondent au chantier 2001 et au poste P01.

Si le poste était écrit sur chaque ligne ça ne serait pas un problème, une InputBox me demanderait d'indiquer le chantier, une autre demanderait le poste puis une WorksheetFunction.SumIfs me ferait la somme des cellules qui rempliraient ces deux critères dans des plages données.

Mais comme je dois appliquer ceci sur des fichiers existants remplis de cette manière je dois faire avec

Je pensais alors le faire en 2 fois :

1/ Chercher les numéros de commandes qui correspondent aux critères demandés et les enregistrés dans des variables aux noms incrémentés (par exemple dire que commande1 = E01 et que commande2 = E03)

2/ Puis faire la somme de la colonne Prix correspondant aux variables commandeX

Mais là je sèche.

bonjour

une solution via une colonne supplémentaire (hypothèse ajout de la colonne E, poste en colonne C

formule à mettre en E2 et à tirer vers le bas

=SI(C2="";E1;C2)

tu as maintenant la colonne E qui contient une information poste pour chaque ligne, il te reste à faire ton sumif sur base de cette colonne.

Bonjour Nefisto, h2so4,

Difficile de se faire une idée précise sur base des 10 lignes fournies en exemple, mais le n° de Chantier correspondrait-il à un seul et même poste?

Bonjour le forum,

H2 :

=SOMMEPROD(--(B2:B100=F2)*(Feuil2!A2:A100=G2)*(D2:D100))
somme

@h2so4 :

Il est vrai que l'ajout d'une colonne pourrait être une solution pour combler les infos manquantes.

Je pourrais même inscrire la formule comme ceci s'il manque le numéro de poste (soit absence de poste soit oubli de l'utilisateur)

=SI(ET(C2="";A2=A1);E1;C2)

Mais cela m'oblige à modifier tous les classeurs existants ce qui est plus fastidieux que d'importer un module VBA.

Mais je conserve quand même cette solution car elle fonctionnerait parfaitement si je ne trouve rien d'autre.

Donc déjà merci

@U. Milité :

Désolé je ne peux pas mettre un fichier en exemple, ils sont très lourds (nombreuses macro) et contiennent des données sensibles.

Pour répondre à ta question il peux y avoir plusieurs postes pour un même chantier. les lignes suivantes pourraient être 2001 P04.

Il est aussi possible qu'il n'y ait pas de numéro de poste mais pour celles ci on ne cherchera pas à faire la somme.

@mbbp :

Je ne comprends pas la partie de ta formule (Feuil2!A2:A100=G2), il y a quoi dans cette plage sur la feuille 2 ?

Nefisto a écrit :

@mbbp :

Je ne comprends pas la partie de ta formule (Feuil2!A2:A100=G2), il y a quoi dans cette plage sur la feuille 2 ?

Feuil2 : A2 :

=SI(Feuil1!C2=0;A1;Feuil1!C2)

A tirer vers le bas.

Salut,

Moi j'utiliserai une procédure VBA pour remplir les postes manquants et ensuite un TCD pour l'étude des données.

Cdlt,

bonjour

solution via une macro

Sub aargh()
    i = 2
    While Cells(i, 1) <> "" ' tant qu'il y a une valeur en colonne A
        If Cells(i, 3) = "" Then ' si colonne C est vide
            Cells(i, 3) = Cells(i - 1, 3) ' mettre la valeur trouvée dans la ligne précédente
        End If
        i = i + 1 ' passer à la ligne suivante
    Wend
End Sub

Le cas des commandes sans poste poseront soucis.

Si dans l'exemple donné la commande E02 pour le chantier 3212 n'est volontairement attribué à aucun poste alors cette solution ne convient pas sinon elle va se retrouver avec le poste de la commande précédente.

Il faudrait y rajouter un contrôle pour vérifier que les numéros de commande sont identiques pour faire la copie de la cellule du dessus.

Voila en faisant comme ça :

    Sub aargh()
        i = 2
        While Cells(i, 1) <> "" ' tant qu'il y a une valeur en colonne A
           If Cells(i, 3) = "" And Cells(i, 1) = Cells(i - 1, 1) Then ' si colonne C est vide et que la cellule en A est identique a celle du dessus
               Cells(i, 3) = Cells(i - 1, 3) ' mettre la valeur trouvée dans la ligne précédente
           End If
            i = i + 1 ' passer à la ligne suivante
       Wend
    End Sub

Je vais faire comme ça.

Ça sera plus propre et à l'avenir ils devront remplir aussi cette cellule (ou du moins une de mes macro veillera à ce qu'elle le soit )

Merci à tous.

Rechercher des sujets similaires à "somme criteres"