Condition If...End if à l'intérieur d'une boucle For...Next - VB/VBA/VBS - Programmation
Marsh Posté le 07-05-2010 à 23:50:27
 
Sub Rex () 
Dim x As Double 
Dim y As Double 
Dim z As Double 
Dim u As Double 
z = 2.45 * y 
u = x + y + z 
For x = 515 To 0 Step -0.01 
    For y = 0 To 150 Step 0.01 
        x = 0.75 * (x + y) 
        If u = 515 Then 
              Exit Sub 
        End If 
    Next y 
    If u = 515 Then 
        Exit Sub 
     End If 
Next x 
 
If u = 515 Then 
     Exit Sub 
End If 
 
 
Cells(1, 1).Value = x 
Cells(2, 1).Value = y 
Cells(3, 1).Value = z 
Cells(4, 1).Value = u 
 
End Sub 
 
Il faut déjà penser à indenter ton code. 
TU n'as pas de problème de syntaxe mais de logique. 
au bout d'un moment sur ta ligne  x = 0.75 * (x + y) 
x ne va qu'augmenter  
 
x=0.75*(0.8917+0.32) 
ce qui fait que ton X n'atteindra jamais sa limite à 0 et ta boucle est illimité ce qui plante Excel. 
 
Ensuite tu as un test qui ne sert à rien  
   If u = 515 Then 
              Exit Sub 
        End If 
u ne varie jamais, l'affectation du début ne change pas.
Marsh Posté le 08-05-2010 à 11:18:45
Merci beaucoup pour ces conseils. 
 
Il est vrai que j'ai un problème de logique mais je n'arrive toujours pas à déterminer exactement où se situe l'erreur. 
Il faudrait donc essayer de tester  l'équation x = 0.75 * (x + y) en même temps que de vérifier si u est bien égal à 515? 
 
 
 
Sub Rex() 
Dim x As Double 
Dim y As Double 
Dim z As Double 
Dim u As Double 
z = 2.45 * y 
u = x + y + z 
For x = 515 To 0 Step -0.01 
    For y = 0 To 150 Step 0.01 
       
        If x = 0.75 * (x + y) And u = 515 Then 
              Exit Sub 
        End If 
    Next y 
    Next x 
 If x = 0.75 * (x + y) And u = 515 Then 
              Exit Sub 
        End If  
 
  
Cells(1, 1).Value = x 
Cells(2, 1).Value = y 
Cells(3, 1).Value = z 
Cells(4, 1).Value = u 
  
End Sub 
 
Merci d'avance
Marsh Posté le 08-05-2010 à 11:27:08
Pareil  
    
        If x = 0.75 * (x + y) And u = 515 Then 
              Exit Sub 
        End If  
 
u ne change jamais dans ta boucle, il a toujours la valeur que tu lui as affecté avant : u = x + y + z  
Il faut que tu intègres cette ligne dans la boucle
Marsh Posté le 08-05-2010 à 14:28:39
D'accord donc je les inclue dans la boucle et je teste la somme u? 
 
Sub Rex() 
Dim x As Double, y As Double, z As Double, u As Double 
 
For x = 515 To 0 Step -0.01 
    For y = 0 To 150 Step 0.01  
        x = 0.75 * (x + y) 
        z = 2.45 * y 
        u = x + y + z 
        If u = 515 Then 
            Cells(1,1).Value = x 
            Cells(1,2).Value = y 
            Cells(1,3).Value = z 
            Cells(1,4).Value = u 
            Exit sub 
        End If 
    Next y 
Next x 
End Sub 
 
Sauf que ça ne fonctionne toujours pas... 
Bon ben merci pour tout en tout cas, je crois qu'on ne peux plus rien pour moi.  
 
Je n'ai aucune logique. 
Marsh Posté le 08-05-2010 à 15:56:58
Tu sais que tu peux suivre au pas à pas ta requête. 
Tu verras bien que u ne dépasse jamais 2 
Ensuite un conseil, vu que tu travailles sur autre chose que des entiers, utilise "u>=" plutot que "u=". 
 
Mais si tu nous expliquais ce que tu veux faire avec ton truc.
Marsh Posté le 08-05-2010 à 18:11:55
Je te remercie pour tout antac. Tu as raison c'est à ce niveau qu'il y avait une erreur. J'ai été bête de croire que je pouvais tomber sur 515 tout pile. 
 
En fait je souhaitais faire ce programme dans le cadre d'un travail en chimie. 
 
Je fais varier la masse de l'espèce x par rapport à la somme des masses des espèces x et y. L'espèce z est elle reliée à l'espèce y via un coefficient constant. 
Enfin il faut que je maintienne les somme des masses des trois espèces x, y et z à 515. 
 
Voilà je te remercie ce programme va grandement me faciliter la vie.
Marsh Posté le 07-05-2010 à 22:42:38
Bonsoir à tous,
Je débute dans la programmation sous VBA et je cherche à faire un programme pour éviter une erreur de référence circulaire sous Excel.
Je voudrais réaliser un programme afin de déterminer trois nombres x, y et z tels que :
z=2,45*y
x=0,75*(x+y)
x+y+z=515
Sachant que x varie de 515 à 0, que y varie de 0 à 150 et que je cherche à avoir une précision de 0,01 sur x, y et z.
J'ai tenté de faire un programme mais celui-ci ne fonctionne pas. Excel plante à chaque nouvel essai donc je n'arrive pas à savoir où se situent les erreurs. Je poste la programme ci-dessous :
Sub Rex ()
Dim x As Double
Dim y As Double
Dim z As Double
Dim u As Double
z = 2.45 * y
u = x + y + z
For x = 515 To 0 Step -0.01
For y = 0 To 150 Step 0.01
x = 0.75 * (x + y)
If u = 515 Then
Exit Sub
End If
Next y
If u = 515 Then
Exit Sub
End If
Next x
If u = 515 Then
Exit Sub
End If
Cells(1, 1).Value = x
Cells(2, 1).Value = y
Cells(3, 1).Value = z
Cells(4, 1).Value = u
End Sub
Merci d'avance pour votre aide!
Matrach