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 Sub

Cependant, 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 Sub

A+

Rechercher des sujets similaires à "simplification contenant boucle"