Simplification IF contenant boucle FOR
Bonjour le forum,
Dans le cadre de mon stage je mets en place un programme de gestion de la fertilisation. L'utilisateur sélectionne le type de matière organique (MO) qu'il apporte sur sa parcelle (il peut en sélectionner maximum 3). En fonction de cela, le logiciel calcule en quelles quantités chaque MO doit être apportée. De ce fait, il existe 3 cas : 1 MO sélectionnée, 2 MO ou 3 MO. Pour chaque cas, il y a 3 sous cas possibles : par exemple, pour 1 MO sélectionnée, il y a 3 quantités possibles à apporter. Pour 2 MO sélectionnées, il y a 3 couples (qté MO1, qté MO2) possibles, etc. Cependant, je souhaite sélectionner uniquement les couples dont l'indice de fertilisation N, P et K est inférieur ou égal à 1. Pour cela j'ai mis en place le code suivant
Dim fe As Worksheet, feq As Worksheet, i&
Private Sub UserForm_Initialize()
Set feq = Sheets("Equations")
Set fe = Sheets("EntréeDonnées")
End Sub
Sub CalculBesoinsMO()
If fe.Range("J47") = 0 And fe.Range("J48") = 0 Then
For i = 1 To 3
If feq.Cells(17 + i, 16).Value <= 1 And feq.Cells(17 + i, 17).Value <= 1 And feq.Cells(17 + i, 18).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(17 + i, 10).Value / 1000
End If
Next i
ElseIf fe.Range("J47") <> 0 And fe.Range("J48") = 0 Then
For i = 1 To 3
If feq.Cells(51 + i, 8).Value <= 1 And feq.Cells(51 + i, 9).Value <= 1 And feq.Cells(51 + i, 10).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(51 + i, 3).Value / 1000
fe.Range("D59").Value = feq.Cells(51 + i, 4).Value / 1000
End If
Next i
ElseIf fe.Range("J47") <> 0 And fe.Range("J48") <> 0 Then
For i = 1 To 3
If feq.Cells(88 + i, 9).Value <= 1 And feq.Cells(88 + i, 10).Value <= 1 And feq.Cells(88 + i, 11).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(88 + i, 3).Value / 1000
fe.Range("D59").Value = feq.Cells(88 + i, 4).Value / 1000
fe.Range("D60").Value = feq.Cells(88 + i, 5).Value / 1000
End If
Next i
End If
End SubCependant, une fois sur deux, le cas n°2 (donc le deuxième if) ne fonctionne pas et ne m'affiche que des 0.
Je dépose en pièce jointe mon fichier car je ne suis pas sûre d'avoir été très claire. Ce code se trouve dans le UserForm "FormFinal".
Je vous remercie d'avance pour votre aide précieuse !
Bonne fin de journée à vous
Bonjour Ndiaye
Pour moi les ELSE ne servent à rien puisque tes conditions sont implicites
Essaye ceci
Sub CalculBesoinsMO()
' Cas 1
If fe.Range("J47") = 0 And fe.Range("J48") = 0 Then
For i = 1 To 3
If feq.Cells(17 + i, 16).Value <= 1 And feq.Cells(17 + i, 17).Value <= 1 And feq.Cells(17 + i, 18).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(17 + i, 10).Value / 1000
End If
Next i
Exit Sub
End If
' Cas 2
If fe.Range("J47") <> 0 And fe.Range("J48") = 0 Then
For i = 1 To 3
If feq.Cells(51 + i, 8).Value <= 1 And feq.Cells(51 + i, 9).Value <= 1 And feq.Cells(51 + i, 10).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(51 + i, 3).Value / 1000
fe.Range("D59").Value = feq.Cells(51 + i, 4).Value / 1000
End If
Next i
Exit Sub
End If
' Cas 3
If fe.Range("J47") <> 0 And fe.Range("J48") <> 0 Then
For i = 1 To 3
If feq.Cells(88 + i, 9).Value <= 1 And feq.Cells(88 + i, 10).Value <= 1 And feq.Cells(88 + i, 11).Value <= 1 Then
fe.Range("D58").Value = feq.Cells(88 + i, 3).Value / 1000
fe.Range("D59").Value = feq.Cells(88 + i, 4).Value / 1000
fe.Range("D60").Value = feq.Cells(88 + i, 5).Value / 1000
End If
Next i
Exit Sub
End If
End SubA+