Solveur ou VBA
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Bonjour,
Pour ce classeur je suis plus à l'aise avec le code de h2so4 mais je sais déjà ou ta fonction va me servir Thèze, j'ai essayé en modifiant les valeurs-limites et cela m'a fait une erreur avec un coef B de 100 cela ne fonctionne pas.
Concernant ton code h2so4 j'ai un petit problème je me suis ajouté des valeurs et des limites sur mes coefficients mais cela ne fonctionne pas et je n'arrive pas à voir mon erreur il ne prend pas en compte les limites c et d? tu sais me dire où je me suis trompé?
Sub aargh()
Dim dlig&: Application.ScreenUpdating = 0
Dim lima As Integer
Dim limb As Integer
Dim limc As Integer
Dim limd As Integer
Dim lime As Integer
Dim limf As Integer
Dim cible As Integer
Dim rep As Byte
Dim sol As Integer
dlig = Cells(Rows.Count, 1).End(xlUp).Row
If dlig > 24 Then Range("A25:N" & dlig).ClearContents
A1 = 210
lima = 100 'valeur limite pour a
B1 = 180
limb = 100 'valeur limite pour b
C1 = 160
limc = 100 'valeur limite pour c, 0 pour ne pas prendre cette valeur
D1 = 125
limd = 0 'valeur limite pour d
E1 = 120
lime = 100 'valeur limite pour e
F1 = 100
limf =100 'valeur limite pour e
cible = 2500
sol = 0
rep = 24
Do
vda = Int(cible / A1)
If vda > lima Then vda = lima
For A = vda To 0 Step -1
Vdb = Int((cible - (A * A1)) / B1)
If Vdb > limb Then Vdb = limb
For B = Vdb To 0 Step -1
vdc = Int((cible - (A * A1) - (B * B1)) / C1)
If vdc > limc Then vdc = limc
For C = Vdb To 0 Step -1
vdc = Int((cible - (A * A1) - (B * B1) - (C * C1)) / D1)
If vdc > limd Then vdc = limd
For D = Vdb To 0 Step -1
vdc = Int((cible - (A * A1) - (B * B1) - (C * C1) - (D * D1)) / E1)
If vdc > lime Then vdc = lime
For E = vdc To 0 Step -1
F = (cible - (A * A1) - (B * B1) - (C * C1) - (D * D1) - (E * E1)) / F1
If F = Int(F) And F <= limf Then
sol = sol + 1
rep = rep + 1
Cells(rep, 1) = A1 & "*" & A & "+" & B1 & "*" & B & "+" & C1 & "*" & C & "+" & D1 & "*" & D & "+" & E1 & "*" & E & "+" & F1 & "*" & F & "=" & cible
Cells(rep, 2) = A
Cells(rep, 3) = B
Cells(rep, 4) = C
Cells(rep, 5) = D
Cells(rep, 6) = E
Cells(rep, 7) = F
Cells(4, 7) = cible
End If
Next E
Next D
Next C
Next B
Next A
cible = cible - 1
Loop Until sol > 0
MsgBox sol & " solution" & IIf(sol > 1, "s", "") & " trouvée" & IIf(sol > 1, "s", "") & " pour une valeur cible de " & cible + 1
End Sub
Cordialement,
Bob
Bonjour,
voici une correction
Sub aargh()
Dim dlig&: Application.ScreenUpdating = 0
Dim lima As Integer
Dim limb As Integer
Dim limc As Integer
Dim limd As Integer
Dim lime As Integer
Dim limf As Integer
Dim cible As Integer
Dim rep As Integer
Dim sol As Integer
dlig = Cells(Rows.Count, 1).End(xlUp).Row
If dlig > 24 Then Range("A25:N" & dlig).ClearContents
A1 = 210
lima = 100 'valeur limite pour a, 0 pour ne pas prendre cette valeur
B1 = 180
limb = 100 'valeur limite pour b, 0 pour ne pas prendre cette valeur
C1 = 160
limc = 100 'valeur limite pour c, 0 pour ne pas prendre cette valeur
D1 = 125
limd = 0 'valeur limite pour d, 0 pour ne pas prendre cette valeur
E1 = 120
lime = 100 'valeur limite pour e, 0 pour ne pas prendre cette valeur
F1 = 100
limf = 100 'valeur limite pour f, 0 pour ne pas prendre cette valeur
cible = 2500
sol = 0
rep = 24
Do
'vdx valeur de départ pour la boucle x, plus grande valeur possible qui ne dépasse pas limx
vda = Int(cible / A1)
If vda > lima Then vda = lima
For A = vda To 0 Step -1
Vdb = Int((cible - (A * A1)) / B1)
If Vdb > limb Then Vdb = limb
For B = Vdb To 0 Step -1
Vdc = Int((cible - (A * A1) - (B * B1)) / C1)
If Vdc > limc Then Vdc = limc
For C = Vdc To 0 Step -1
Vdd = Int((cible - (A * A1) - (B * B1) - (C * C1)) / D1)
If Vdd > limd Then Vdd = limd
For D = Vdd To 0 Step -1
Vde = Int((cible - (A * A1) - (B * B1) - (C * C1) - (D * D1)) / E1)
If Vde > lime Then Vde = lime
For E = Vde To 0 Step -1
F = (cible - (A * A1) - (B * B1) - (C * C1) - (D * D1) - (E * E1)) / F1
If F = Int(F) And F <= limf Then
sol = sol + 1
rep = rep + 1
Cells(rep, 1) = A1 & "*" & A & "+" & B1 & "*" & B & "+" & C1 & "*" & C & "+" & D1 & "*" & D & "+" & E1 & "*" & E & "+" & F1 & "*" & F & "=" & cible
Cells(rep, 2) = A
Cells(rep, 3) = B
Cells(rep, 4) = C
Cells(rep, 5) = D
Cells(rep, 6) = E
Cells(rep, 7) = F
Cells(4, 7) = cible
End If
Next E
Next D
Next C
Next B
Next A
cible = cible - 1
Loop Until sol > 0
MsgBox sol & " solution" & IIf(sol > 1, "s", "") & " trouvée" & IIf(sol > 1, "s", "") & " pour une valeur cible de " & cible + 1
End Sub
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Bonjour,
Merci, j'ai compris d’où venais mon erreur
Cordialement,
Bob
Re,
j'ai essayé en modifiant les valeurs-limites et cela m'a fait une erreur avec un coef B de 100 cela ne fonctionne pas.
Bizarre, je rentre 100 en cellule C4 concernant la limite du coefficient B (Valeurs des limites pour les coefficients A = 8, B = 100, C = 8, D = 8) et la fonction me sort 35 résultats et chez toi ça ne fonctionne pas ?
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Bonjour,
Quand je mes Coeff Max A = 100 et Coeff Max B = 100, j'ai un gros #VALEUR! dans toute la matrice.
Cordialement,
Bob
Oui, mes variables son typées Integer mais avec des limites aussi hautes il faut les typer Long.
Si le code de h2so4