trouver une somme précise à partir d'une plage contenant plusieurs montant

mimita781

XLDnaute Nouveau
bonjour et SVP aidez moi,

Aprés avoir fait plusieurs recherches sur internet pour resoudre mon probléme des combinaisons mathématique j'ai enfin pu trouver dans votre site la solution(dans la Discussion: Trouver la Combinaison de la somme ) mais ça a échoué aprés l'avoir testé sur mon fichier excel ,le probleme est le suivant :

j'ai une colonne contenant plusieurs montants(vers les 1000 lignes) et j'ai une somme de X ,je voudrais si c'est possible avoirs toutes les combinaison possible des montant de cette colonne pour avoir cette somme la ,la solution proposé dans la discussion sucité n'a pas donné de résultat ,j'ai copié mes montants et la somme voulu et j'ai executé la macro mais sans succés ....je n'ai aucune notion de la programation VBA donc est ce que quelqu'un peut m'aider ....

c'est vraiment important et merci pour votre compréhension.
 

MJ13

XLDnaute Barbatruc
Re : trouver une somme précise à partir d'une plage contenant plusieurs montant

Re

Il est sur que les Moins, cela met un peu le problème plus difficile à résoudre :confused:.

Sinon voici, en reprenant l'exemple, un fichier à tester. En première approche, on arrive à 777 Euros de différence.

Peut pas mieux faire sur ce coup :eek:.
 

Pièces jointes

  • Optimisation_Taux_De_Chute_MJ2bis.xls
    98.5 KB · Affichages: 364

mimita781

XLDnaute Nouveau
Re : trouver une somme précise à partir d'une plage contenant plusieurs montant

BonjourMJ13

Certe je ne suis pas douée en excel mais mathématiquement parlant je sais pertinemment que le nombre de combinaison à tester dépend du champ de valeurs à traiter;et c'était bien un malentendu c'est plutôt les deux tiers:confused:
Je n'ai pas encore testé votre méthode ,je vais le faire et si j'insiste sur le montant X souhaité c'est que j'en suis sure qu'il existe une solution mais entre temps si vous connaissez un magicien présentez le moi car il n y a pas que ce probleme à régler.:eek:
Merci et a+
 

MJ13

XLDnaute Barbatruc
Re : trouver une somme précise à partir d'une plage contenant plusieurs montant

Re

Alors pour 2/3 cela ne fonctionnera pas, car il m'en trouve 139 :eek:. Il faudrait lancer sur des tri aléatoires ou commencer par les plus petits pour en avoir au moins 200 .

Dès que tu as la solution, n'hésite pas à nous la communiquer, cela m'intéresse :).

Mais attention, avec un magicien, il y a un truc ;).
 

Dranreb

XLDnaute Barbatruc
Re : trouver une somme précise à partir d'une plage contenant plusieurs montant

Avec les nombres négatifs il faudrait ajouter une même grande valeur à tous pour les rendre positifs afin d'appliquer ma méthode. Ce qui impliquerait de connaitre le nombre de montants devant composer la somme afin de majorer aussi celle ci du produit de cette grande valeur par le nombre de montants.
C'est à ce prix seulement qu'on peut appliquer ma méthode qui éliminer les poids forts un peu comme pour trouver les chiffres formant un nombre dans une base numérique fractionnaire dépassant de peu 1.
Si on ne peut le connaitre, il faut se rabattre sur la methode bestiale qui examine vraiment toutes les combinaisons possibles.
 

MJ13

XLDnaute Barbatruc
Re : trouver une somme précise à partir d'une plage contenant plusieurs montant

Re

Bon, pour aller plus loin, reprenons un fichier cité dans cette discussion :).

Testons avec 23 valeurs et 50, je vous laisse le soin de me dire le temps mis avec 50 :confused:

Vous pouvez aussi faire de palliers de 2 en 2 (23, 25 27 et tracer la courbe en fonction du nombre de valeurs et du temps), très bon TP :eek:.
 

Pièces jointes

  • TestBond2.xls
    62 KB · Affichages: 1 052

Nono53

XLDnaute Nouveau
Bonjour,

Nouveau sur ce forum, je viens d'utiliser avec succès Ce lien n'existe plus et tiens à remercier le contributeur
Gael XLDnaute Barbatruc.

J'ai néanmoins une question : sauriez-vous réaliser une version actualisée au format .xlsx ?

Merci encore et par avance.Ce lien n'existe plus
 

yoblade

XLDnaute Nouveau
Bonjour,
Cela fait quelque mois que je cherche à résoudre ce soucis de combinaisons. En contrôle de gestion je devais retrouver la combinaison de somme de 2 à 3 montants, parmis une liste, qui serait égale à un montant "cible". J'ai donc posé le problème mathématique sur feuille. Il est possible de construire une matrice triangulaire supérieure comportant l'ensemble des combinaisons possibles pour des couples de 2 ou 3 montants.
Ensuite je fait une recherche du montant cible dans la matrice et je retrouve les montants de cette somme. le montant cible est en A1 et pour la recherche j'utilise une recherche verticale ligne par ligne pour la macro combinaison double et la fonction cellsSearch pour la macro combinaison triple. Afin d'utiliser cellsSearch il est necessaire de téléchager un complément gratuit disponible sur le web.
L'inconvénient est le temps d'éxécution. pour une liste de montants de 50 éléments, le temps de calcule est d'environs 7-10 min. En revanche, pour une liste de 300 éléments il faut 2h30.... Je souhaiterais savoir si vous auriez des idées permettant d'améliorer le temps de calcule ? En effet, je pense que le principale soucis est que je calcule l'ensemble des possibilités.
Merci par avance

PS: je n'ai pas pu mettre la macro double car le fichier est trop volumineu. Je vous ai donc mis le code.



VB:
Sub Combinaison()

Application.ScreenUpdating = False
 Application.DisplayAlerts = False


Sheets(1).Activate
ActiveSheet.Buttons.Delete
Alpha = Cells(Rows.Count, "B").End(xlUp).Row

For i = 1 To Alpha - 1

Cells(Alpha - i, 2).Copy

Range(Cells(1, (Alpha + 4) - i), Cells(i, (Alpha + 4) - i)).Select

ActiveSheet.Paste


For j = 1 To Alpha

If Cells(j, (Alpha + 4) - i) <> "" Then

Cells(j, (Alpha + 4) - i) = Cells(j, (Alpha + 4) - i).Value + Cells(Alpha - i + j, 2).Value

End If

Next

Next

Beta = Cells(5, Columns.Count).End(xlToRight).Column
Alpha = Cells(Rows.Count, "E").End(xlUp).Row



Sheets(1).Activate

tableauAdresses = cellsSearch(Range(Cells(1, 5), Cells(Alpha, Beta)), Range("A1"))
   
    Sheets(5).Range("A1:Z1") = tableauAdresses
   
Sheets(5).Activate
 Rows("1:1").Select
    Selection.Copy
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
       
    Rows(1).Delete
   
    Delta = Cells(Rows.Count, "A").End(xlUp).Row
   
    For d = 1 To Delta
   
    If WorksheetFunction.IsNA(Cells(d, 1)) = True Then
    Rows(d).Clear
   
    End If
    Next
   
Sheets(1).Activate
Range("B:B").Copy

Sheets(3).Activate
Range("A:A").Select
ActiveSheet.Paste

Sheets(2).Activate
Range("A:A").Select
ActiveSheet.Paste

Sheets(1).Activate
Range("C:C").Copy

Sheets(2).Activate
Range("B:B").Select
ActiveSheet.Paste

Sheets(5).Activate
Range("A:A").Copy

Sheets(2).Activate
Range("D:D").Select
ActiveSheet.Paste




Sheets(1).Activate

Alpha = Cells(Rows.Count, "B").End(xlUp).Row

Beta = Cells(1, Columns.Count).End(xlToRight).Column


For i = 1 To Alpha - 1


Worksheets(1).Cells(Alpha - i, 2).Copy

Sheets(3).Activate

Range(Cells(1, (Alpha + 4) - i), Cells(i, (Alpha + 4) - i)).Select

ActiveSheet.Paste


For j = 1 To Alpha

If Worksheets(3).Cells(j, (Alpha + 4) - i) <> "" Then

Worksheets(3).Cells(j, (Alpha + 4) - i) = (Worksheets(1).Cells(j, (Alpha + 4) - i).Value - Worksheets(1).Cells(Alpha - i + j, 2).Value)
Worksheets(4).Cells(j, (Alpha + 4) - i) = Worksheets(1).Cells(Alpha - i + j, 2).Value

End If

Next

Next

Sheets(2).Activate
Gama = Cells(Rows.Count, "D").End(xlUp).Row

For p = 1 To Gama
Cells(p, 5) = Worksheets(3).Range(Worksheets(2).Cells(p, 4))

Cells(p, 7) = Worksheets(4).Range(Worksheets(2).Cells(p, 4))

Next

For q = 1 To Gama

Cells(q, 6) = Application.WorksheetFunction.VLookup(Cells(q, 5), Range("A:B"), 2)

Next

For s = 1 To Gama

Cells(s, 8) = Application.WorksheetFunction.VLookup(Cells(s, 7), Range("A:B"), 2)

Next

Application.ScreenUpdating = True
 Application.DisplayAlerts = True



End Sub
 

Pièces jointes

  • CTriple.xlsm
    44.3 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 083
Membres
103 458
dernier inscrit
Vulgaris workshop