Calcul d'éléments de 2 différentes feuilles avec condition

Bonjour je rencontre une petite difficulté avec excel

j'ai 3 feuilles excel : "pic", "cadence" et "capacité".

Dans "pic", j'ai les codes produits dans la colonne A3 et les quantités nécessaires pour chaque mois dans les cellules de la colonne AO à BF.

Dans "cadence" j'ai les codes produits dans la colonne A et le rythme de production dans la colonne E.

Dans "Capacité" j'ai un bouton et la cellule k13.

Avec vba, je veux programmer le bouton dans la feuille "Capacité" pour calculer la somme des cellules de AO à BF dans "pic" et la diviser par la valeur de la cellule en colonne E en "cadence" à chaque fois que le code produit dans la colonne C dans la feuille "pic" correspond au code produit dans la colonne A dans la feuille "cadence" et afficher le résultat dans la cellule K13 dans "Capacité"

Bonjour Mathieu,

Je te propose la procédure suivante :

Sub calcCapacity()
    Dim oSheetPic As Worksheet, oSheetCadence As Worksheet, oSheetResult As Worksheet
    Dim oCell As Range
    Dim i As Long, j As Long, k As Long
    Dim lastrowPic As Long, lastrowCadence As Long
    Dim dblResult As Double, sProduct As String, lSumPic As Long, dblCadence As Double

    Set oSheetPic = Sheets("pic")
    Set oSheetCadence = Sheets("cadence")
    Set oSheetResult = Sheets("Capacité")

    lastrowPic = oSheetPic.Cells(Rows.Count, "C").End(xlUp).Row
    lastrowCadence = oSheetCadence.Cells(Rows.Count, "A").End(xlUp).Row

    'On boucle sur les lignes de "Pic"
    For i = 2 To lastrowPic
        'On somme les valeurs de toutes les colonnes de "Pic"
        For j = 41 To 58
            Set oCell = oSheetPic.Cells(i, j)
            lSumPic = lSumPic + oCell.Value
        Next
        'On Recherche la valeur de cadence
        sProduct = oSheetPic.Cells(i, 3)
        dblCadence = 0
        For k = 2 To lastrowCadence
            Set oCell = oSheetCadence.Cells(k, 1)
            If oCell.Value = sProduct Then
                dblCadence = oCell.Offset(, 4).Value
                Exit For
            End If
        Next
        If dblCadence > 0 Then
            dblResult = dblResult + (lSumPic / dblCadence)
        End If
    Next i

    'On affiche le résultat dans la cellule K8
    Set oCell = oSheetResult.Range("K13")
    oCell.Value = dblResult

    'On fait le ménale
    Set oCell = Nothing
    Set oSheetPic = Nothing
    Set oSheetCadence = Nothing
    Set oSheetResult = Nothing

End Sub

Bonjour Gérard,

je te remercie pour l'interêt que tu portes a ce petit problème. Je viens d'essayer ton code et ca marche en quelque sorte, mais je crains que le calcul qu'il fait est faux. voici un code que j'avais essayé de créer, mais je pense qu'il manque la boucle qui enregistre les résultat des divisions des lignes dans une variable ( du genre lSumPic = lSumPic + oCell.Value)

Private Sub CommandButton2_Click()

Dim pic As Worksheet, cadence As Worksheet, Capacite As Worksheet
Set pic = Sheets("pic")
Set cadence = Sheets("cadence")
Set Capacite = Sheets("Capacité")

Dim i As Long, j As Long

'pour circuler le tableau des pic
For i = 2 To pic.Range("C" & Rows.Count).End(xlUp).Row

'pour circuler le tableau des cadences

For j = 2 To cadence.Range("A" & Rows.Count).End(xlUp).Row

If (pic.Range("C" & i).Value = cadence.Range("A1" & j).Value) Then

sumRange = pic.Range("AO" & i & ":" & "BF" & i)

sumValue = Application.WorksheetFunction.Sum(sumRange) / cadence.Range("E" & j).Value
Capacite.Range("K13") = sumValue

End If

Next j
Next i
End Sub

J'ai aussi essayé de faire le calcul manuellement sur le fichier ci-joint et ca fait ressortir 2 résultats différents

Help me :')

Bonjour Mathieu,

Désolé, mon code précédent oubliait de remettre à 0 la variable de boucle 'lSumPic'.

Par contre, dans le tableau que tu as ajouté dans PIC pour simuler les calculs, les valeurs de la colonne 'Les cadences' ne semblent pas correspondre aux valeur de la feuille 'Cadence'. Par exemple pour le produit P09066, 'Les cadences' = 894 alors que dans 'Cadence' = 684.

Nouveau code corrigé :

Sub calcCapacity()
    Dim oSheetPic As Worksheet, oSheetCadence As Worksheet, oSheetResult As Worksheet
    Dim oCell As Range
    Dim i As Long, j As Long, k As Long
    Dim lastrowPic As Long, lastrowCadence As Long
    Dim dblResult As Double, sProduct As String, lSumPic As Long, dblCadence As Double, dblCalc As Double

    Set oSheetPic = Sheets("pic")
    Set oSheetCadence = Sheets("cadence")
    Set oSheetResult = Sheets("Capacité")

    lastrowPic = oSheetPic.Cells(Rows.Count, "C").End(xlUp).Row
    lastrowCadence = oSheetCadence.Cells(Rows.Count, "A").End(xlUp).Row

    'On boucle sur les lignes de "Pic"
    For i = 2 To lastrowPic
        'On initialise la somme
        lSumPic = 0
        'On somme les valeurs de toutes les colonnes de "Pic"
        For j = 41 To 58
            Set oCell = oSheetPic.Cells(i, j)
            lSumPic = lSumPic + oCell.Value
        Next
        'On Recherche la valeur de cadence
        sProduct = oSheetPic.Cells(i, 3)
        dblCadence = 0
        For k = 2 To lastrowCadence
            Set oCell = oSheetCadence.Cells(k, 1)
            If oCell.Value = sProduct Then
                dblCadence = oCell.Offset(, 4).Value
                Exit For
            End If
        Next
        If dblCadence > 0 Then
            dblCalc = (lSumPic / dblCadence)
            dblResult = dblResult + dblCalc
        Else
            dblCalc = 0
        End If

        Debug.Print sProduct & " = " & lSumPic & " | " & dblCadence & " | " & dblCalc
    Next i

    'On affiche le résultat dans la cellule K8
    Set oCell = oSheetResult.Range("K13")
    oCell.Value = dblResult

    'On fait le ménage
    Set oCell = Nothing
    Set oSheetPic = Nothing
    Set oSheetCadence = Nothing
    Set oSheetResult = Nothing

End Sub
Rechercher des sujets similaires à "calcul elements differentes feuilles condition"