Partage
  • Partager sur Facebook
  • Partager sur Twitter

Raccourcir code avec boucle

    22 octobre 2018 à 17:00:31

    Bonjour,

    Je souhaiterai raccourcir le code suivant avec une boucle mais je ne vois pas très bien le procédure à suivre, je ne suis pas très à l'aise avec les boucles.

    Private Sub Worksheet_Change(ByVal Target As Range)
     
    'Début du code pour trouver la puissance frigorifique
    '
    If Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 5 Then 'Pour T°consigne entre (-5;0) et DKevap =5
    If Target.Address = Range("B9").Address Then
    Run ("negatifCinq")  'Pour T°consigne entre (-5;0) et DKevap =5 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifCinq")  'Pour T°consigne entre (-5;0) et DKevap =5 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 6 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifSix")  'Pour T°consigne entre (-5;0) et DKevap =6 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifSix")  'Pour T°consigne entre (-5;0) et DKevap =6 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 7 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifSept")  'Pour T°consigne entre (-5;0) et DKevap =7 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifSept")  'Pour T°consigne entre (-5;0) et DKevap =7 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 8 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifHuit")  'Pour T°consigne entre (-5;0) et DKevap =8 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifHuit")  'Pour T°consigne entre (-5;0) et DKevap =8 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 9 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifNeuf")  'Pour T°consigne entre (-5;0) et DKevap =9 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifNeuf")  'Pour T°consigne entre (-5;0) et DKevap =9 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 10 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifDix")  'Pour T°consigne entre (-5;0) et DKevap =10 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifDix")  'Pour T°consigne entre (-5;0) et DKevap =10 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 11 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifOnze")  'Pour T°consigne entre (-5;0) et DKevap =11 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifOnze")  'Pour T°consigne entre (-5;0) et DKevap =11 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 12 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifDouze")  'Pour T°consigne entre (-5;0) et DKevap =12 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifDouze")  'Pour T°consigne entre (-5;0) et DKevap =12 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 13 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifTreize")  'Pour T°consigne entre (-5;0) et DKevap =13 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifTreize")  'Pour T°consigne entre (-5;0) et DKevap =13 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 14 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifQuatorze")  'Pour T°consigne entre (-5;0) et DKevap =14 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifQuatorze")  'Pour T°consigne entre (-5;0) et DKevap =14 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 15 Then
    If Target.Address = Range("B9").Address Then
    Run ("negatifQuinze")  'Pour T°consigne entre (-5;0) et DKevap =15 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("negatifQuinze")  'Pour T°consigne entre (-5;0) et DKevap =1 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 5 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulCinq")  'Pour T°consigne entre (0;5) et DKevap =5 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulCinq")  'Pour T°consigne entre (0;5) et DKevap =5 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 6 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulSix")  'Pour T°consigne entre (0;5) et DKevap =6 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulSix")  'Pour T°consigne entre (0;5) et DKevap = 6 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 7 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulSept")  'Pour T°consigne entre (0;5) et DKevap = 7 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulSept")  'Pour T°consigne entre (0;5) et DKevap = 7 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 8 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulHuit")  'Pour T°consigne entre (0;5) et DKevap = 8 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulHuit")  'Pour T°consigne entre (0;5) et DKevap = 8 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 9 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulNeuf")  'Pour T°consigne entre (0;5) et DKevap = 9 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulNeuf")  'Pour T°consigne entre (0;5) et DKevap = 9 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 10 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulDix")  'Pour T°consigne entre (0;5) et DKevap = 10 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulDix")  'Pour T°consigne entre (0;5) et DKevap = 10 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 11 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulOnze")  'Pour T°consigne entre (0;5) et DKevap = 11 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulOnze")  'Pour T°consigne entre (0;5) et DKevap = 11 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 12 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulDouze")  'Pour T°consigne entre (0;5) et DKevap = 12 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulDouze")  'Pour T°consigne entre (0;5) et DKevap = 12 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 13 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulTreize")  'Pour T°consigne entre (0;5) et DKevap = 13 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulTreize")  'Pour T°consigne entre (0;5) et DKevap = 13 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 14 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulQuatorze")  'Pour T°consigne entre (0;5) et DKevap = 14 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulQuatorze")  'Pour T°consigne entre (0;5) et DKevap = 14 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 15 Then
    If Target.Address = Range("B9").Address Then
    Run ("NulQuinze")  'Pour T°consigne entre (0;5) et DKevap = 15 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("NulQuinze")  'Pour T°consigne entre (0;5) et DKevap = 15 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 5 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosCinq")  'Pour T°consigne entre (5;10) et DKevap =5 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosCinq")  'Pour T°consigne entre (5;10) et DKevap = 5 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 6 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosSix")  'Pour T°consigne entre (5;10) et DKevap =6 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosSix")  'Pour T°consigne entre (5;10) et DKevap = 6 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 7 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosSept")  'Pour T°consigne entre (5;10) et DKevap =7 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosSept")  'Pour T°consigne entre (5;10) et DKevap = 7 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 8 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosHuit")  'Pour T°consigne entre (5;10) et DKevap = 8 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosHuit")  'Pour T°consigne entre (5;10) et DKevap = 8 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 9 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosNeuf")  'Pour T°consigne entre (5;10) et DKevap = 9 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosNeuf")  'Pour T°consigne entre (5;10) et DKevap = 9 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 10 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosDix")  'Pour T°consigne entre (5;10) et DKevap = 10 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosDix")  'Pour T°consigne entre (5;10) et DKevap = 10 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 11 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosOnze")  'Pour T°consigne entre (5;10) et DKevap = 11 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosOnze")  'Pour T°consigne entre (5;10) et DKevap = 11 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 12 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosDouze")  'Pour T°consigne entre (5;10) et DKevap = 12 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosDouze")  'Pour T°consigne entre (5;10) et DKevap = 12 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 13 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosTreize")  'Pour T°consigne entre (5;10) et DKevap = 13 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosTreize")  'Pour T°consigne entre (5;10) et DKevap = 13 quand on agit sur B10 (DK Evap)
    End If
     
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 14 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosQuatorze")  'Pour T°consigne entre (5;10) et DKevap = 14 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosQuatorze")  'Pour T°consigne entre (5;10) et DKevap = 14 quand on agit sur B10 (DK Evap)
    End If
    
    ElseIf Range("B9").Value <= 10 And Range("B9").Value >= 5 And Range("B10").Value = 15 Then
    If Target.Address = Range("B9").Address Then
    Run ("PosQuinze")  'Pour T°consigne entre (5;10) et DKevap = 15 quand on agit sur B9 (T°consigne)
    ElseIf Target.Address = Range("B10").Address Then
    Run ("PosQuinze")  'Pour T°consigne entre (5;10) et DKevap = 15 quand on agit sur B10 (DK Evap)
    End If
    End If
    

    J'ai le même soucis avec mes modules :

    Sub NegatifCinq()
    Dim eFormule
    eFormule = Range("V4").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W4").Value - Range("V4").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulCinq()
    Dim eFormule
    eFormule = Range("V4").Value + (Range("B9").Value + Range("V3").Value) * ((Range("W4").Value - Range("V4").Value) / (Range("W3").Value - Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifTreize()
    Dim eFormule
    eFormule = Range("V12").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W12").Value - Range("V12").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifQuatorze()
    Dim eFormule
    eFormule = Range("V13").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W13").Value - Range("V13").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifQuinze()
    Dim eFormule
    eFormule = Range("V14").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W14").Value - Range("V14").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulSix()
    Dim eFormule
    eFormule = Range("W5").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X5").Value - Range("W5").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulSept()
    Dim eFormule
    eFormule = Range("W6").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X6").Value - Range("W6").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulHuit()
    Dim eFormule
    eFormule = Range("W7").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X7").Value - Range("W7").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulNeuf()
    Dim eFormule
    eFormule = Range("W8").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X8").Value - Range("W8").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulDix()
    Dim eFormule
    eFormule = Range("W9").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X9").Value - Range("W9").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulOnze()
    Dim eFormule
    eFormule = Range("W10").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X10").Value - Range("W10").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulDouze()
    Dim eFormule
    eFormule = Range("W11").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X11").Value - Range("W11").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulTreize()
    Dim eFormule
    eFormule = Range("W12").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X12").Value - Range("W12").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulQuatorze()
    Dim eFormule
    eFormule = Range("W13").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X13").Value - Range("W13").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NulQuinze()
    Dim eFormule
    eFormule = Range("W14").Value + (Range("B9").Value + Range("W3").Value) * ((Range("X14").Value - Range("W14").Value) / (Range("X3").Value - Range("W3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosCinq()
    Dim eFormule
    eFormule = Range("X4").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y4").Value - Range("X4").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosSix()
    Dim eFormule
    eFormule = Range("X5").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y5").Value - Range("X5").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosSept()
    Dim eFormule
    eFormule = Range("X6").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y6").Value - Range("X6").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosHuit()
    Dim eFormule
    eFormule = Range("X7").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y7").Value - Range("X7").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosNeuf()
    Dim eFormule
    eFormule = Range("X8").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y8").Value - Range("X8").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosDix()
    Dim eFormule
    eFormule = Range("X9").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y9").Value - Range("X9").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosOnze()
    Dim eFormule
    eFormule = Range("X10").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y10").Value - Range("X10").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifSix()
    Dim eFormule
    eFormule = Range("V5").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W5").Value - Range("V5").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosDouze()
    Dim eFormule
    eFormule = Range("X11").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y11").Value - Range("X11").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosTreize()
    Dim eFormule
    eFormule = Range("X12").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y12").Value - Range("X12").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosQuatorze()
    Dim eFormule
    eFormule = Range("X13").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y13").Value - Range("X13").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub PosQuinze()
    Dim eFormule
    eFormule = Range("X14").Value + (Range("B9").Value - Range("X3").Value) * ((Range("Y14").Value - Range("X14").Value) / (Range("Y3").Value - Range("X3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifSept()
    Dim eFormule
    eFormule = Range("V6").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W6").Value - Range("V6").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifHuit()
    Dim eFormule
    eFormule = Range("V7").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W7").Value - Range("V7").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifNeuf()
    Dim eFormule
    eFormule = Range("V8").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W8").Value - Range("V8").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifDix()
    Dim eFormule
    eFormule = Range("V9").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W9").Value - Range("V9").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifOnze()
    Dim eFormule
    eFormule = Range("V10").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W10").Value - Range("V10").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    
    Sub NegatifDouze()
    Dim eFormule
    eFormule = Range("V11").Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W11").Value - Range("V11").Value) / (Range("W3").Value + Range("V3").Value))
    Range("G5") = eFormule
    End Sub
    

    Le code est extrêmement répétitif et je pense qu'un moyen existe justement avec des boucles pour pouvoir grandement le réduire.

    Quelqu'un peut-il me mettre sur le voie ?

    Merci d'avance !



    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2018 à 18:44:51

      Salut,

      Je vais commencer par les petites Sub. Pour Worksheet_change on verra à la fin car on ne peut pas la simplifier sans simplifier les autres.

      Si on regarde juste NegatifCinq et NegatifQuatorze on voit qu'il y a beaucoup de points communs, B9, V3 et W3 ont l'air de pas trop bouger, cool ça veut dire que tu peux mettre leur valeur dans une variable qui a un sens (par exemple Tconsigne ou DKEvap), ça va raccourcir un peu le calcul et le rendra plus lisible.

      Pour les trucs qui changent il y a juste un 4 qui devient 13, encore un truc cool 13 - 4 = 9 = 14 - 5 donc ça veut qu'on peut partir d'une cellule et décaler de 9 lignes avec Range("V4").Offset(9,0).Value.

      Rien qu'avec ça ont peut déjà avoir une seul routine Negatif au lieu d'une dizaine, ça ressemblerait un peu à ça :

      Sub Negatif(offset As Integer)
      
          ' Je te laisse mettre les noms que tu veux et les bonnes valeurs
          Dim DKEvap As Double
          Dim TConsigne As Double
          DKEvap = Range("V3").Value
          TConsigne = Range("W3").Value
      
          Dim result As Double
          result = Range("V4").Offset(offset,0).Value + (DKevap '... je te laisse remettre la formule en corrigent où il faut
      
          Range("G5").Value = result
      
      End Sub


      Tu peux faire le même raisonnement sur les routines Nultruc et Postruc pour réduire ta trentaine de routines à juste 3 qui sont paramétrées (le offset As Integer). La valeur du paramètre sera déterminée dans Worksheet_Change, dans la boucle qui appelera les routines.

      Il y aura encore d'autres changement à faire avant que ce soit fonctionnel, mais tu as déjà de quoi faire avec ça :).

      -
      Edité par Stormweaker 22 octobre 2018 à 18:45:45

      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2018 à 21:55:44

        Merci encore pour ta réponse Stormweaker.

        Alors, je m'emmêle un peu les pinceaux, la boucle que j'ai crée ne fonction pas visiblement.

        Premièrement, je pense que je m'y prend mal avec les Offset, et deuxièmement j'ai un message d'erreur qui me dit que ma boucle ne possède pas de "Do"...

        Ce code-ci correspond à la routine.

        Sub Negatif(offset As Integer)
         
            Dim DKEvap As Double
            Dim TConsigneUneP As Double
            Dim TConsigneDeuxP As Double
            Dim TConsigneCF As Double
            
            TConsigneCF = Range("B9").Value
            TConsigneUneP = Range("V3").Value
            TConsigneDeuxP = Range("W3").Value
            
         
            Dim result As Double
            result = Range("V4").offset(offset, 0).Value + (-Range("B9").Value + Range("V3").Value) * ((Range("W4").offset(offset, 0).Value - Range("V4").offset(offset, 0).Value) / (Range("W3").Value + Range("V3").Value))
         
            Range("G5").Value = result
         

        Dans ce code, les valeurs se modifient doivent être les "V4" et "W4". Ces valeurs correspondait à "NégatifCinq". 

        Maintenant, si le DKevap change et passe de 5 à 6, les valeurs doivent être "V5" et "W5" dans ma formule. On descend donc d'une ligne sur le tableau. Cela correspondait à "NégatifSix". 

        Ce que je n'arrive pas à faire, c'est justement remplacer automatiquement ces valeurs dans la boucle afin de descendre dans mon tableau et avoir les bonnes valeurs de "V" et "W" en fonction du DKevap.

        Le code de la Feuil1 :

        Private Sub Worksheet_Change(ByVal Target As Range)
        
         
        
        'Début du code pour trouver la puissance frigorifique
        
        '
        
        Sub TconsigneNeg()
        
            Dim i As Integer
        
            i = 4
        
            Do
        
                If Target.Address = Range("B9").Address Then
        
                Run ("Negatif(i)")
        
                i = i + 1
        
            Loop While Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = i
        
        End Sub
        

        Merci beaucoup d'avance pour vos futures réponses et un grand merci.

        -
        Edité par BrownM 23 octobre 2018 à 21:56:22

        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2018 à 11:28:20

          Pour la routine Negatif, l'intérêt de créer des variables c'est de les réutiliser dans le calcul de l'interpolation juste en dessous, un peu comme ça :

              result = Range("V4").offset(offset, 0).Value + (-TConsigneCF + TConsigneUneP) * ((Range("W4").offset(offset, 0).Value - Range("V4").offset(offset, 0).Value) / (TConsigneDeuxP + TConsigneUneP))
          


          Ca permet de faciliter la lecture, si tu as pris des noms qui sont représentatifs des valeurs alors tu devrais pouvoir lire ça très facilement dans 2 ans quand tu reliras ce code, sans avoir besoin de retourner voir la feuille sans cesse pour voir à quelle valeur ça correspond (bon tu vas sans doute jamais revenir sur ce code après t'en être servi mais c'est une bonne habitude à prendre). Y a d'autres avantages mais qui ne sont pas spécialement significatifs ici.

          La routine Worksheet_change on la verra plus tard quand on aura fini de revoir les routines qui font l'interpolation. Mais sinon les quelques commentaires que je peux donner dessus :

          • la routine Negatif attend un nombre de ligne à décaler en paramètre (offset = décalage en anglais), donc quand tu appelles Negatif (i), quand i vaut 4 c'est comme si tu décalais de 4 lignes (voir doc), c'est-à-dire prendre la valeur de V8 au lieu de V4 donc il faudrait plutôt appeler Negatif(i-4) ;
          • j'ai jamais utilisé Run mais ce n'est pas la bonne syntaxe a priori (voir doc), je préfère utiliser Call, par exemple : Call Negatif(i) ;
          • il y a une erreur sur la boucle car tu ne fermes pas le bloc If avec End If, donc quand le compilateur arrive sur le Loop While, il pense être dans le bloc If sauf qu'il n'y a pas de Do dans ce bloc ;
          • à vue d'oeil la condition du Loop While à l'air d'être bonne ;
          • concernant la condition sur Target.Address, puisque Target ne changera pas pendant l'exécution de la routine ça ne sert à rien de tester à chaque fois, fait un seul test au début.

          -
          Edité par Stormweaker 24 octobre 2018 à 11:28:54

          • Partager sur Facebook
          • Partager sur Twitter

          Raccourcir code avec boucle

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown