Solveur ou VBA

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

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 ?

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 , te convient bien (il est d'ailleurs plus rapide), c'est parfait, l'important c'est que tu ai eu ce que tu attendais

Rechercher des sujets similaires à "solveur vba"