Combinaison de sommes égales à valeur cible

Résolu/Fermé
ask Answer - 20 mai 2012 à 13:15
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
- 21 avril 2022 à 09:44
Bonjour,
En utilisant Microsoft Excel 2007 je veux faire ce qui suit:
J'ai une base de données de valeurs (chiffres) et j'ai une valeur cible. Je veux trouver toutes les combinaisons de sommes des chiffres possibles (à partir de la base de données) qui égales la valeur cible.

Est ce possible?


A voir également:

13 réponses

eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié le 25 avril 2018 à 10:12
Bonjour,

Voici donc la dernière version qui traite nombres positifs et négatifs :
https://mon-partage.fr/f/DVIe7uJu/

eric


Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
26
Bonjour, je viens de trouver votre solution qui répond exactement à mon problème. Merci pour votre travail
0
Je vous remercie énormément pour ce fichier qui me sera très très utile
0
Super boulot, merci pour ton travail ! :D
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089 > Niko
29 janv. 2019 à 22:16
Bonjour,

Merci, mais il a évolué depuis...
La v4.3.3 : https://mon-partage.fr/f/DVIe7uJu/
eric
0
Naxos > eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022

19 avril 2019 à 14:30
Bonjour Eric, merci pour votre aide mais le fichier n'est plus accessible, pourriez-vous en remettre un lien ?

Merci beaucoup
Naxos
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié par eriiic le 20/05/2012 à 18:09
Bonjour,

Regarde si ce programme te convient :
https://www.cjoint.com/?BEushEb54QO
Les explications des paramètres sont mis en commentaire des cellules.

eric
1
Un très grand Merci Eric. C'est très utile et magnifique.
Juste j'ai remarqué que le programme ne marche pas correctement si:
1- J'insère dans la colonne "valeur" et/ou la cellule de la valeur cible un chiffre négatif.
2- j'insère des colonnes avant la colonne "valeur" (un message de "Incompatibilité de type" apparait).

SVP y-a t-il une solution pour ceux ci?
Merci
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié par eriiic le 20/05/2012 à 20:55
A la base le fichier est conçu pour coller les valeurs dedans. Si tu insères ou supprimes des lignes ou colonnes la macro ne s'y retrouves plus. Il faut la modifier en conséquence.

Et c'est vrai que je m'étais penché pour retrouver des sommes de nombres positifs (retrouver les lignes d'une facture groupée lorsqu'on a que le total)
Veux-tu expliquer ta problématique voir s'il y a d'autres cas particuliers ou possibilité d'un artifice.

eric

PS: après test il semble bien réagir avec des nombres négatifs
0
En fait, le besoin d'une telle application est né du fait que je travaille dans le domaine financier.
J'ai comme base de données une balance financière (avec au moins 3 colonnes: N° compte, libellé et Montant). La société me communique des états financiers dans les quels chaque rubrique possède un montant (qui en fait une sommation d'un ensemble de comptes de la balance). Vu que le nombre de lignes de la balance est généralement très nombreux, je perds des journées pour chercher les montants de la balance qui coïncident avec les rubriques des états financiers. Les montants de la balance peuvent être positifs et négatifs.

Qu'en pensez-vous?
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié par eriiic le 20/05/2012 à 22:41
Et donc il te faudrait 1 colonne supplémentaire, c'est ça ?

Et je viens de voir que tu parlais de la cellule cible en négatif.
C'est normal que ça ne fonctionne pas.
Pour éliminer des milliers (voire des centaines de milliers) de tests je sors d'une boucle dès que la somme est dépassée.
Supprimer cette optimisation donnerait des temps de réponse insupportables.
Il te faut inverser tes nombres dans ce cas :
- saisir -1 dans une cellule et la copier.
- sélectionner la plage et 'collage spécial multiplication'

eric
0
Oui en fait j'ai besoin d'une autre colonne.
Juste une petite question. Est ce que c'est possible lors de la programmation de trouver une solution permettant l'utilisateur d'ajouter des colonnes ou des lignes librement?
Pour les montants négatifs ton idée est si maline. Merci bien Eric
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
21 mai 2012 à 09:43
Bonjour,

Voici avec 5 colonnes.
Ajouté :
- traitement d'une somme cible négative (sans manipulation manuelle).
- un double clic sur une solution filtre sur les valeurs concernées.
- un double clic sur un filtre actif l'annule.

https://www.cjoint.com/?BEvjNdp8qA8

Normalement débuggué mais si tu peux tester à fond et signaler les pb pas trop tard...

eric
1
Formidable Eric. Je vous remercie énormément. Jusqu'à maintenant je n'ai rencontré aucun pb.
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
21 mai 2012 à 22:02
Ok, je met en résolu pour toi.
Bonne continuation :-)
eric
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
12 févr. 2013 à 16:22
Bonjour,

voici : https://www.cjoint.com/c/CBmqwkGmHcg
eric
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
Modifié par eriiic le 17/03/2014 à 23:14
Bonsoir,

En fait ce n'est pas des plantages, c'est plus un problème de reprise de main sur la macro lors des calculs longs.
Avec 65 valeurs ça peut être très long, plusieurs heures... Il faut explorer toutes les combinaisons, plusieurs millions.
Si tu mets nbTermesmini=7, tu exclues toutes les combinaisons des sommes de 2 à 6 termes, tu pourras voir que la solution est trouvée assez rapidement (en 30s, sans attendre des heures).

J'ai changé un peu la logique et ajouté un formulaire qui donne des éléments pour voir l'avancée de la macro. Il permet aussi de faire des pauses ou de stopper l'analyse.
https://www.cjoint.com/c/DCrxbr4PYST

eric

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu lorsque c'est le cas (en haut vers votre titre).
Merci
1
khaled_dz
Messages postés
6
Date d'inscription
dimanche 16 mars 2014
Statut
Membre
Dernière intervention
18 mars 2014

18 mars 2014 à 09:43
Bonjour, je vous félicite, joli travail, je souhaite acquérir ce niveau de compétence.
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
18 mars 2014 à 12:19
Si tu peux mettre un +1 que la dernière version soit en haut stp.
eric
0
avilor
Messages postés
4
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
18 mars 2014

18 mars 2014 à 17:37
good job eric tu est un pro .
0
Bonjour Eric,

Merci beaucoup pour votre travail qui me sauve la vie! Mon problème n'est cependant pas totalement résolu, en effet j'ai une liste de nombre (environ 350) et je veux faire des combinaisons pour arriver à ma valeur cible de 6. Comment est-il possible de relancer le calcul en ignorant les valeurs prise en compte dans la première combinaison?
Exemple:
Je rentre les valeurs
1
3
5
2
6
4
1
Ma valeur cible est 8
Le premier résultat que j'obtiens est bien la combinaison des valeurs 5 et 3
Je souhaiterai ensuite que le programme continu à tourner afin que toutes mes valeurs soient associées:
2ème résultat:: 6+2
3ème résultat: 4+1+1

??

J'espère que vous pourrez m'éclairer sur ce point, sinon merci tout de même!

Fanny
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
3 mai 2014 à 00:40
Bonjour,

Je ne comprend pas trop ton problème, il suffit de le laisser tourner et il sort toutes les combinaisons.
Mais il ne te sortira jamais 4+1+1 qui n'a jamais fait et ne fera jamais 8
eric
0
Bonjour,

je reviens vers ce sujet qui m'interesse beaucoup,

J'ai repris votre macro du début, pour essayer de la modifier pour l'aplliquer à mon problème.
Mon Pb : J'ai une liste de série de chiffre allant de 1 à 33, et je souhaite trouver les meilleurs combinaisons possible pour etre soit egal à 33 ou le plus proche de 33.
Sachant que chaque chiffre doit être utilisé une seul fois.


J'espere avoir étais clair dans mon explication, et comment pouvons nous modifier que les chiffres ne soit plus en euros, mais des entiers.

merci d'avance
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
8 juin 2012 à 11:52
Bonjour,

comment pouvons nous modifier que les chiffres ne soit plus en euros, mais des entiers.
Tu as juste à modifier le format de cellule (clic-droit sur les cellules)
Par contre dans le code laisse les variables typées à Currency, sinon tu risques de passer à coté de la solution exacte.
Ce programme ne recherche pas de solution la plus proche, ce n'est pas son but...

eric
0
Bonjour,

Merci pour votre travail, c'est exactement ce que je cherche!!!

Pourriez-vous poste le fichier sous format excel??

Merci d'avance!!

Roxane
0
Merci beaucoup!

Petite question: Serrait-il possible de permettre la combinaison de plusieurs nombres négatifs et plusieurs nombres positifd pour atteindre un résultat donné??

Quand on combine un négatif et un positif (par ex: pour trouver -5, le système combine "-6" et "1"), ça marche.
Mais si on essaie plusieurs négatifs avec plusieurs positifs (par ex: pour trouver -17, le système combinerait "-15", "3", "-7" et "2"=??), ça ne marche pas.

HELP!!!
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
13 févr. 2013 à 16:58
Bonjour,

tu n'as pas lu le post 5 je crois.
Pour éliminer des milliers (voire des centaines de milliers) de tests je sors d'une boucle dès que la somme est dépassée.
Supprimer cette optimisation donnerait des temps de réponse insupportables.

Dans ton cas je te suggère d'ajouter 20 à tous tes nombres y compris le total à atteindre, et de faire l'opération inverse à la fin.

eric
0
Oui mais imaginons qu'on ait une liste de nombre assez élevés et précis, avec plusieurs chiffres derrière la virgule, ça limiterait beaucoup le nombre de combinaisons possibles.. L'idée n'est toujours pas envisageable? 8-)
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
14 févr. 2013 à 12:56
Bonjour,

Oui mais imaginons qu'on ait une liste de nombre assez élevés et précis, avec plusieurs chiffres derrière la virgule, ça limiterait beaucoup le nombre de combinaisons possibles..
Non, ça diminue éventuellement le nombre de solutions.
Mais le nombre de combinaisons (elles doivent toutes explorées) lui est exponentiel. Si tu as vraiment beaucoup de valeurs attend toi à des temps de traitement longs, voire très très longs.

Quoiqu'il en soit ça m'a paru être une évolution intéressante, j'ai tenté...
Si tu pouvais me faire un retour si ça fonctionne bien.
Et par curiosité le nombre de valeurs ainsi que le temps mis.
https://www.cjoint.com/c/CBom4p3UbC6

eric
0
Merci beaucoup pour ton travail!

Malheureusement je n'arrive pas à ouvrir le lien car il est bloqué par le filtre installé sur le PC sur lequel je travaille. Y a-t-il moyen de publier le fichier excel d'une autre manière?

Merci d'avance.

Roxane
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
14 févr. 2013 à 15:37
Donne-moi un site de dépôt de fichier auquel tu as accès ou inscris-toi sur le site et passe-moi en MP (clic sur mon pseudo) ton email.
eric
0
avilor
Messages postés
4
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
18 mars 2014

14 mars 2014 à 17:39
merci pour le travail eriic ton fichier m'a beaucoup aider j'ai fait un test en utilisant une base de données composer de 65 montant la valeur cible contient 7 montant mais après 3 test consécutive de 3 minutes pas de solution trouver
pourquoi y a il pas de solution pourtant ma base est petite?

j'aimerai avoir une réponse,merci.
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
14 mars 2014 à 19:37
Bonjour (en général on commence par ça...),

Contrôle que nbTermesMaxi en H4 soit à une valeur suffisante avant de lancer la macro.
Par sécurité met-la à 65.
Et ne pas cocher pas 'Supprimer les doublons'. Il faut le faire en connaissance de cause, ça enlève des solutions.
Maintenant es-tu sûr à 100% qu'il y a obligatoirement une solution ? Peut-être qu'il manque des factures.
Par curiosité colle ici tes montants et le total à atteindre.
Et si tu connais la combinaison qui atteint le total, fourni là aussi.

eric
0
avilor
Messages postés
4
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
18 mars 2014

15 mars 2014 à 09:16
Bonjour eric concernant ta question c'est oui j'ai respecter les règles et je connais la combinaison se n'est que l'addition de sept montant,une formule très simple (une façon de faire un test).
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
15 mars 2014 à 12:48
Tu peux mettre ici les valeurs, le montant et la somme correcte stp ?
0
avilor
Messages postés
4
Date d'inscription
vendredi 14 mars 2014
Statut
Membre
Dernière intervention
18 mars 2014

15 mars 2014 à 13:05
6 374,31 €
108 541,88 €
75 566,79 €
74 623,24 €
78 587,43 €
2 116,57 €
611 494,40 €
878 328,32 €
1 481 372,72 €
42 256 629,73 €
1 983 360,61 €
1 499 746,41 €
15 976 478,77 €
714 807,00 €
2 194 054,82 €
855 646,34 €
9 571 079,23 €
4 573 078,31 €
1 782 192,29 €
41 286 529,09 €
13 819 675,57 €
68 882,76 €
1 940 295,28 €
1 371 098,28 €
37 156 338,86 €
11 169 637,16 €
1 183 563,46 €
1 746 518,08 €
1 818 206,29 €
1 155 930,90 €
38 677 773,29 €
10 125 099,48 €
38 695 024,69 €
8 777 939,93 €
39 430 615,24 €
7 332 474,17 €
1 093 920,77 €
2 968,32 €
1 795,62 €
1 808 349,55 €
1 842 064,26 €
2 272,28 €
1 027 644,74 €
4 073,10 €
4 327 158,82 €
38 782 450,19 €
881 430,44 €
1 823 045,71 €
37 685 918,39 €
66 104,67 €
2 849 674,72 €
7 375,65 €
803 688,60 €
1 771 655,25 €
1 099,57 €
2 274,23 €
3 574,84 €
704 994,73 €
1 558,49 €
1 723 241,90 €
1 392 345,83 €
285 145,97 €
37 436 926,60 €
21 561,73 €
15 254,21 €

tu peut prendre 7 montant ou plus n'importe lequel dans cette base et tu auditionne ça ne marche pas pour exemple tu peut prendre les 4 premiers et les 3 derniers de la base de donnée ça va faire (37 738 848.76 euro) j'utilise ta 4 eme version.
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
15 mars 2014 à 20:46
Effectivement il y a des cas de plantages, ça va être chaud à rechercher, il va falloir que je trouve du temps libre...
Je posterai ici quand résolu.
Merci de l'avoir signalé.
eric
0
Ok ça marche mais ne soit pas long......rire.
0
PAPAWALKER
Messages postés
3
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
14 avril 2015

14 avril 2015 à 22:07
Bonsoir,
Je lis ce post plusieurs mois plus tard. J'ai récupéré le fichier et j'ai regardé le code (Bravo ERIC, vraiment)
Je voudrais savoir s'il est possible de faire cette analyse sur un tableau à plusieurs colonnes?
Explications (ou du moins tentative :-) :
La plage A4:A100 contient 96 valeurs et une valeur en A2 égale à la somme de certaines des valeurs de la colonne A
La plage B4:B100 contient 96 valeurs et une valeur en B2 égale à la somme de certaines des valeurs de la colonne B
La plage C4:C100 contient 96 valeurs et une valeur en C2 égale à la somme de certaines des valeurs de la colonne C

Peut-on rechercher les lignes capable de satisfaire à la fois les valeurs de A2, B2, C2?

1°) Les valeur sont des entiers positifs ou négatifs
2°) Le nombre de ligne max pour arriver à la somme est souvent =<3

Si qualqu'un me lit et sait répondre à ça, merci vraiment d'avance

Cordialement
0
eriiic
Messages postés
24408
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 juin 2022
7 089
14 avril 2015 à 23:08
Bonjour,

Ben tu le fais en 3 fois avec ce fichier non ?
Le modifier dans ce sens prendrait des jours (voire des semaines vu le peu de dispo que j'ai)
eric
0
Merci Eriic
0