Code VBA calcul combinaison d'article pour prix panier

bonjour,

je voudrais via une macro, faire une estimation de tous les paniers possible avec les articles de la Feuil 2. et ranger le resultat sur la Feuil 1 du total panier du plus petit au plus grand.

les hypotheses sont :

  • on peu utiliser chaque article plusieurs fois
  • on peu utiliser qu'une partie des articles
  • on s'arrette quand le poids atteint 3000 grammes

on range le resultat comme l'exemple à gauche mais le format n'est pas figé, si il y a plus simple pour la programmation, ça me va !!

merci d'avance

cordialement.

23panier.xlsx (10.21 Ko)

SALUT

Je comprend pas

on peu utiliser qu'une partie des articles

le but étant de répertorier tous les paniers clients possible, alors il est possible que ce dernier ne prenne qu'un seul article, ou bien deux sur les quatre proposées. l'objectifs est de lister comment on arrive à effectuer cette suite de prix global en ordre croissant.

dans notre cas : 4,4 / 5,5 / 7 / 8,8 / 9,9 / .... on remarque que d'abord il y a qu'1 article, puis 2 .....

je recherche cette suite qui ce suit dans l'ordre.

SALUT

PAS ENCORE COMPRIS

Donnez quatre ou trois exemples clairs avec des articles grands et petit

le .xls mis à jour avec des exemples de résultats souhaité

36panier.xlsx (11.08 Ko)

Bonjour,

tu veux la liste de tous les paniers pesant 3 kg ou la liste de tous les paniers dont le poids est inférieur à 3 kilos ? dans le dernier cas le nombre de possibilités est tellement important (au minimum 500000000000) qu'il faudra des des années voire des millénaires pour les déterminer toutes

Si c'est plus simple alors oui, pourquoi pas limiter a la recherche d'un panier d'un poids déterminé, et de son prix correspondant.

Et que cherches-tu exactement à savoir ?

le prix du panier de 3 kg le moins cher, le plus cher ?

Le moins cher

Bonjour,

nul besoin de programme pour cela

le panier le moins cher proche de 3 kg est le panier de 111 articles de 27 grammes à 12.5 pour un poids total de 2997 gr et un coût de 1387.5

s'il te faut 3 kg précisément, le panier le moins cher est celui qui comprend

110 articles de 27 gr , 1 article de 19 gr et 1 article de 11 gramme pour un coût total de 1390.4

mince alors j'arrive avec une question, je repart avec le compte est bon des chiffres et des lettres !!

non serieusement, ce qu'il me faut c'est une macro, pas d'une calculette !!

bon, je vais donner mon point de vue, sur les différentes étapes necessaires ....

  • reperer l'article le moins cher, voir combien de fois il faut le multiplier pour atteindre 3000 gramme
  • le resultat obtenue sera notre plus grand multiplicateur commun (PGMC)
  • pour chaque article, multiplier aléatoirement par des nombres entiers entre 0 et le PGMC, ce qui donne à chaque fois un nombre entre 0 et 9999 (dans notre exemple).
  • voir si le poids total correspondant à ce resultat est inférieur à 3000 gramme
  • si oui le rajouter à la liste, si non, le supprimer
  • au bout de 1000 boucles, arreter
  • supprimer les doublons
  • ranger les resultats du plus petit au plus grand

Bonsoir

voici donc une macro pour résoudre un problème qui n'a pas besoin d'une calculette

la macro t'affiche le nombre d'articles à mettre dans ton panier pour obtenir 3000 gr au coût le moins élevé.

Dim poids(8), prix(8), solu(100), solution(1000, 8), solutprix, sol, minip, mini
Sub ntest()
    sol = 0
    mini = 10000000000#
    panier = 3000
    'on recherche le produit le moins cher au gramme
    For i = 1 To 8
        poids(i) = Cells(i + 1, 2)
        prix(i) = Cells(i + 1, 1)
        q = Int(panier / poids(i))
        pm = q * prix(i)
        'Cells(i + 1, 3) = pm
        If pm < mini Then mini = pm: miniv = i: miniq = q: minip = miniq * poids(i)
    Next i
    If minip < panier Then
    While True 'on recherche si on doit compléter le panier

        If trouvesolution(panier - minip, miniv, 1) Then
            ' cherche meilleure solution parmi les solutions possibles
            mini = 10000000000#
            MsgBox "nombre de solutions envisagées " & sol
            For j = 1 To sol
                For k = 1 To 8
                    If k = miniv Then
                    p = p + miniq * prix(miniv)
                    Else
                    p = p + solution(j, k) * prix(k)
                    End If
                Next k
                If p < mini Then mini = p: minisol = j
            Next j
            For k = 1 To 8
                If k = miniv Then
                    Cells(k + 1, 3) = miniq
                Else
                    Cells(k + 1, 3) = solution(minisol, k)
                End If
            Next k
            Exit Sub
        Else
            minip = minip - poids(miniv)
            miniq = miniq - 1
        End If
    Wend
    Else
    MsgBox "le panier le moins cher est de " & miniq & " articles " & miniv
    Cells(miniv + 1, 3) = miniq
    End If
End Sub
Function trouvesolution(valeur, miniv, start, Optional niveau = 1)

    For i = start To 8
        If i <> miniv Then
            If poids(i) < valeur Then
                solu(niveau) = i
                ok = trouvesolution(valeur - poids(i), miniv, i, niveau + 1)
            ElseIf poids(i) = valeur Then
                solu(niveau) = i
                sol = sol + 1
                Dim z(8)
                For j = 1 To niveau
                    z(solu(j)) = z(solu(j)) + 1
                Next j

                For j = 1 To 8
                    Cells(j + 1, sol + 3) = z(j)
                    solution(sol, j) = z(j)
                Next j
                Exit Function
            End If
        End If
    Next i
    If sol > 0 Then trouvesolution = True
End Function
Rechercher des sujets similaires à "code vba calcul combinaison article prix panier"