VBA somme avec conditions

Bonjour,

je suis stagiaire en contrôle de gestion, et je souhaite améliorer un fichier Excel.

Je veux faire apparaître, dans l'onglet tableau de bord dans les cases surlignées en jaune, la somme des réceptions et la somme des écarts de coûts, en fonction de 3 critères différents sélectionnés dans des listes déroulantes: Fournisseurs, GO, et Mois.

Je pourrais le faire par une fonction somme.si.ens, mais mais le piège est que si un de mes critères est vide, la fonction va faire la somme des cases vides pour ce critère et le résultat sera faux (si le critère est vide, je voudrais que la fonction l'ignore)

Je souhaite passer par VBA pour contourner ce piège, pouvez vous m'aider ?

Par avance, merci.

57tdb.xlsm (152.18 Ko)

J'ai fait début de code, qui ne fonctionne pas évidemment, mais qui n'est peut etre pas totalement faux, car je débute en VBA

J'ai renommé les colonnes de l'onglet BDD APPRO qui m'interresse pour inclure le nom dans chaque variable, ensuite j'ai utilisé If-Then puis inscris ma formule SumIfs avec les arguments dans le même ordre que somme.si.ens

Private Sub Worksheet()

Dim prix_réceptions As Long, Ecarts_de_couts As Long, fournisseurs As String, GO As Variant, mois As Integer

prix_réceptions = Worksheets("BDD APPRO").Range(prix_réception)

Ecarts_de_couts = Worksheets("BDD APPRO").Range(Ecart_de_cout)

fournisseurs = Worksheets("BDD APPRO").Range(fournisseurs)

GO = Worksheets("BDD APPRO").Range(GO)

mois = Worksheets("BDD APPRO").Range(mois)

If Range("B5") = "" Then

Range("B8") = Application.WorksheetFunction.SumIfs(Range(prix_réceptions), Range(fournisseurs), Range("B5"), Range(GO), Range("B6"), Range(mois), Range("B7"))

End If

End Sub

Somebody can tell me how to make it wright ?

Merci beaucoup

Bonjour, une proposition a tester, le bouton de calcul se trouve sur la feuille tdb.

Have a nice day !

Merci pour ta réponse Force rouge (tu as toujours été mon préféré, après le vert )

Le code fonctionne, mais j'aimerais que la somme se fasse quand même si un des critères est vide (si un critère est vide, la somme se fait pour toute la colonne correspondante), or quand j'enlève mes 3 critères, le résulat est égal à 0.

J'ai donc essayé d'ajouter des conditions "and" et "elseif"mais le code ne fonctionne plus.

Thx for your help

105tdb.xlsm (155.01 Ko)

et ceci ne conviendrai pas ?

 If a(i, 9) = cr1 Or a(i, 16) = cr2 Or a(i, 5) = cr3 Then
            Feuil3.Cells(8, 2) = Feuil3.Cells(8, 2) + a(i, 11)
            Feuil3.Cells(9, 2) = Feuil3.Cells(9, 2) + a(i, 15)
        End If
Force rouge a écrit :

et ceci ne conviendrai pas ?

 If a(i, 9) = cr1 Or a(i, 16) = cr2 Or a(i, 5) = cr3 Then
            Feuil3.Cells(8, 2) = Feuil3.Cells(8, 2) + a(i, 11)
         Feuil3.Cells(9, 2) = Feuil3.Cells(9, 2) + a(i, 15)        
End If

Après avoir modifié le code, j'ai un message d'erreur me renvoyant à l'avant-dernière ligne, et le résultat n'est pas celui désiré puisqu'il se fait par des conditions optionnelles et non plus obligatoires.

Est-ce qu'on ne peut pas ajouter des conditions comme "si critère1 = (vide), alors on ne prend en compte que critère 1 et 2" ?

J'ai réussi à avoir un résultat par une formule excel, en combinant les "SI", en appliquant tous les cas où un des critères serait vide (3 cas) + un cas où aucun ne serait vide + un dernier où tous seraient vides. La formule est longue, et si j'ai besoin de 4,5,6 critères ou plus, ca deviendra irréalisable.

Ce n'est pas irrealisable, c'est simplement long à écrire mais on a rien sans rien...Ce sont vos critères avec leur degré de liberté qui vont simplifier ou non, l'écriture de votre programme. Emboiter des fonctions if dans vba vous pouvez.

Après si vous n'avez pas le temps ni l'envie d'écrire des longs programmes pour x raison il faut confier le travail à qui de droit (force rose par exemple...)

Rechercher des sujets similaires à "vba somme conditions"