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