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