Problème de Sommeprod

  • Initiateur de la discussion Initiateur de la discussion Pi_r_314
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Pi_r_314

XLDnaute Nouveau
Bonjour à tous,

Pour un exercice donné en cours, je cherche à calculer le coût humain de production d'un produit dans une seule cellule. Quand une seule personne travaillait à la production de ce produit, la formule SOMMEPROD fonctionnait très bien. J'ai maintenant plusieurs techniciens payés à un coût horaire différent et travaillant plus ou moins longtemps chaques jours à l'élaboration du produit.

Sur mon tableau et pour le produit SPE1 ça donnerait la somme des B (tps de travail) * L (coût horaire) en fonction de C (intiales).

Je bloque...

Merci d'avance pour votre aide ^^
 

Pièces jointes

Re : Problème de Sommeprod

J'ai fait une version VBA, un peu lourde mais qui fonctionne:

Option Explicit
Option Compare Text

Sub test()

Dim c As Range
Dim ci As Range

For Each c In Range("IN_1")
For Each ci In Range("IN")
If c.Value = ci.Value Then
Range("P5") = Range("P5") + ci.Offset(0, 1).Value * c.Offset(0, -1).Value
End If
Next ci
Next c

For Each c In Range("IN_2")
For Each ci In Range("IN")
If c.Value = ci.Value Then
Range("P6") = Range("P6") + ci.Offset(0, 1).Value * c.Offset(0, -1).Value
End If
Next ci
Next c

For Each c In Range("IN_3")
For Each ci In Range("IN")
If c.Value = ci.Value Then
Range("P7") = Range("P7") + ci.Offset(0, 1).Value * c.Offset(0, -1).Value
End If
Next ci
Next c

For Each c In Range("IN_4")
For Each ci In Range("IN")
If c.Value = ci.Value Then
Range("P8") = Range("P8") + ci.Offset(0, 1).Value * c.Offset(0, -1).Value
End If
Next ci
Next c

End Sub
 
Re : Problème de Sommeprod

Bonjour à tous,

Le code de Pi_r_314 peut être simplifié en le code:
Code:
Sub test()
Dim c As Range, ci As Range, X As Integer
Application.ScreenUpdating = False
For X = 1 To 4
For Each c In Range("IN_" & X)
For Each ci In Range("IN")
If c.Value = ci.Value Then
Range("P" & X + 4) = Range("P" & X + 4) + ci.Offset(0, 1).Value * c.Offset(0, -1).Value
End If
Next ci
Next c
Next X
Application.ScreenUpdating = True
End Sub
Cordialement
 
Dernière édition:
Re : Problème de Sommeprod

Bonjour,
Avec une macro événementielle
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r1 As Range, rIN As Range, rTPS As Range, idSPE$, total#
If Target.Count > 1 Then Exit Sub
Set r1 = Range("B5:I35")
If Not Intersect(Target, r1) Is Nothing Then
    If Target.Column Mod 2 = 0 Then
        idSPE = Cells(3, Target.Column)
        Set rTPS = Intersect(Columns(Target.Column), r1)
        Set rIN = Intersect(Columns(Target.Column), r1).Offset(0, 1)
    Else
        idSPE = Cells(3, Target.Column - 1)
        Set rTPS = Intersect(Columns(Target.Column), r1).Offset(0, -1)
        Set rIN = Intersect(Columns(Target.Column), r1)
    End If
    For Each c In Range("IN")
        If c.Offset(0, 1) <> 0 Then
            If Application.CountIf(rIN, c) > 0 Then
                total = total + Application.SumIf(rIN, c, rTPS) * c.Offset(0, 1)
            End If
        End If
    Next
    Range(idSPE) = total
End If
End Sub
Le recalcul ne se fait que sur la colonne de l'idSPE pour éviter les traitements trop longs
J'ai également remanié les plages nommées
A+
kjin
 

Pièces jointes

Dernière édition:
Re : Problème de Sommeprod

Bonjour à tous

Pour le fun, j'ai essayé de trouver une solution avec une formule, sans colonne intermédiaire.

Conclusion : J'en ai une, mais vraiment pas très belle, car elle est à rallonge, et de plus il faut définir plein de noms AB, XY...

Venant moins sur le forum depuis quelques mois, j'ai déja oublié pas mal de possibilités. On se rouille vite...

Si quelqu'un a une idée. Ca doit bien exister, une formule plus concise, et copier-collable vers le bas si possible...

@ plus
 

Pièces jointes

Re : Problème de Sommeprod

Rebonjour à tous

J'ai été cherché un peu d'antirouille...

Cf. en pièce jointe, en colonne O, une formule matricielle différente dans chaque cellule, et en colonne P, une formule matricielle pouvant être tirée vers le bas.

@ plus
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour