Combinaisons de 10 éléments avec condition à résoudre sur Excel
Bonjour à tous,
Je suis nouveau sur ce forum et j'ai besoin d'aide pour résoudre un problème assez complexe, impossible (ou presque) à faire à la main sur excel.
Je cherche à avoir toutes les combinaisons possibles de 10 éléments afin qu'à chaque fois, la somme de ces 10 éléments soit égale à 100.
Les valeurs que peuvent prendre chaque élément sont de 0 à 100 par pas de 5 (0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100). Soit 21 valeurs différentes.
Je laisse ci-dessous un aperçu des premières lignes afin d'être plus clair sur ma demande. (ici seul l'élément 10 est traité pour les valeurs 100, et 95. Concernant la valeur 90, elle était en cours de traitement et n'est pas finie...)
| Element 1 | Element 2 | Element 3 | Element 4 | Element 5 | Element 6 | Element 7 | Element 8 | Element 9 | Element 10 | Somme |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 95 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 95 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 95 | 100 |
| 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 95 | 100 |
| 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 95 | 100 |
| 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 95 | 100 |
| 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 95 | 100 |
| 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 95 | 100 |
| 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 95 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 10 | 0 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
| 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
| 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
| 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 5 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 5 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 5 | 90 | 100 |
| 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 5 | 90 | 100 |
| 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 5 | 90 | 100 |
| 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 5 | 90 | 100 |
| 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 90 | 100 |
| 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 0 | 5 | 5 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 5 | 0 | 5 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 5 | 0 | 0 | 5 | 0 | 90 | 100 |
| 0 | 0 | 0 | 5 | 0 | 0 | 0 | 5 | 0 | 90 | 100 |
| 0 | 0 | 5 | 0 | 0 | 0 | 0 | 5 | 0 | 90 | 100 |
| 0 | 5 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 90 | 100 |
| 5 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 0 | 5 | 5 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 0 | 5 | 0 | 5 | 0 | 0 | 90 | 100 |
| 0 | 0 | 0 | 5 | 0 | 0 | 5 | 0 | 0 | 90 | 100 |
| 0 | 0 | 5 | 0 | 0 | 0 | 5 | 0 | 0 | 90 | 100 |
| 0 | 5 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 90 | 100 |
| 5 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 90 | 100 |
Pour information, j'ai pu faire ce type de tableau pour 2 et 3 éléments mais le nombre élevé d'élément ici rend la chose complexe.
Je vous remercie par avance de votre aide.
Bien à vous,
Bonjour,
ça n'était pas prévu pour ça mais ça le fait.
Je craignais que ça dépasse les 250 solutions possibles (fait sur 2010 avec 256 colonnes)
mais à priori tu en as 128
Il te faudra transposer le résultat par un copier-coller Transposer
eric
Bonjour Eriiic,
Merci pour ta réponse.
J'avoue avoir du mal à lire ton excel vis à vis de ma demande. Je vois bien les 128 solutions en colonne mais il y a 21 lignes correspondant aux 21 valeurs possibles (de 0 à 100 par pas de 5).
Je pense qu'il y a forcément beaucoup plus de possibilité. => dans le tableau mis en exemple nous en sommes à plus de 40 solutions alors que nous n'avons pas encore terminé la distribution du deuxième résultat pour l'élément 10, il reste 18 valeurs à traiter pour l'élément 10 sans prendre en compte les autres éléments qui eux aussi doivent contenir les 21 valeurs.
Dans le tableau illustré que j'ai pu renseigner dans mon premier message, on peut bien s'apercevoir de la distribution des valeurs dans les 10 différents éléments notamment avec l'élément 10 à 90.
Pour ces raisons, je laisse ma demande d'aide active.
bonjour,
génial idée d'utiliser cet outil !
Avec ces 128 solutions, il y a déjà +23.000 combinaisons possible.
Donc si on a toutes les solutions possible, le nombre de combinaisons sera 100.000-1.000.000 (?), vous ferez quoi avec cela ? Les solutions sans les combinaisons suffisent, non ?
PS. Eriiic, pour augmenter ce nombre de 250, on fait ca où ?
Bonjour BsAlv,
Il est important dans ce problème d'avoir l'exhaustivité des combinaisons possibles car chaque élément à des caractéristiques différentes.
Les valeurs attribuées à chaque élément permettront d'effectuer un calcul final. Ceci permettra d'avoir l'exhaustivité des résultats possibles.
S'il y a trop de valeurs possibles, le pas peut être de 10 au lieu de 5 : 0,10,20,30,40,50,60,80,90,100.
Exemple de l'application finale :
Caractéristiques de l'Element 1: Coef 1 = 2*sigma1
Caractéristiques de l'Element 2: Coef 2 = 2*sigma2
..
..
In fine, à la droite du tableau initialement renseigné, il y aura une colonne avec la formule : Coef 1(élément1)*w1+Coef 2(élément2)*w2 ......Coef 10(élément 10)*w10. W1,W2, Wn étant les valeurs attribuées( par pas de 5 dans l'idéal ou par pas de 10)
A titre d'information, pour 3 éléments avec des valeurs par pas de 5, il y a plus de 225 lignes de combinaisons.
re,
le théorie des combinaisons est vague, je me rappèle que la moitié ... . Il y a 530 solutions possible et je pense(!!!) quand on crée toutes les combinaisons, il y en a +10.000.000. Il n'y a que 1.048.000 lignes dans une feuille.
l'élément "0" n'est pas traité comme un élément valable pour le moment
Bonjour,
Je pense qu'il y a forcément beaucoup plus de possibilité
Il ne suffit pas de le penser, il faudrait le calculer pour pouvoir être affimatif.
N'oublie que tu as limité la somme à 100 se qui réduit drastiquement le nombre de possibilités.
Pour l'instant je n'ai pas de raison de mettre en doute le résultat trouvé.
@BsAlv
Déjà il faudrait le mettre dans un xlsm pour dépasser 256 colonnes.
Tu as une variable Dim nbMaxSol As Long 'nombre maxi de solutions.
Je ne l'ai pas fait car dans le but du programme ce n'est pas utile.
Il est conçu pour retrouver les factures payées lorsqu'on a un paiement unique sans détails.
Pour moi à partir de 2 possibilités il y a ambiguïté pour déterminer quelle facture est réglée si tu en as plusieurs au même montant.
(si tu t'amuses avec j'aimerai que tu laisses mon nom stp
eric
@Eriiic,
C'est toujours difficile de lire/comprendre une macro d'une autre personne. Donc j'ai commencé de scratch. Les premiers 400 solutions, je le trouvais en 1 minute et puis pour le reste ca durait.
Maintenant, il trouve les 520 solutions en <0.2 sec
Peut-être l'algoritme est adaptable à votre problème de facturation ??? (là, vous n'utilisez pas des multiples, donc c'est peut-être encore ...)
Ah oui, c'est ça la différence.
Dans mon programme chaque valeur n'est utilisée qu'une fois.
Si elle est multiple il faut la lister autant de fois, ça ne convient pas ici
pour l'améliorer j'ai déjà une idée en tête depuis 2 ans.
Ca permettrai des centaines de valeurs sans que le temps de calcul soit exponentiel.
Là ça grimpe vite, qq dizaines et ça devient longuet...
@Eriiic,
Concernant le nombre de possibilités : étant donné qu'il y a plus de 225 possibilités avec 3 éléments, il y a à minima 3 fois plus de possibilités
Aussi, via un outil en ligne le nombre de combinaisons avec 10 éléments pour 21 valeurs de 0 à 100 par pas de 5 avec une limitation de la somme à 100 est de 352716 solutions.( https :// fr . planetcalc . com / 6786). N'ayant pas de détails je ne peux pas vérifier l'exhaustivité de la solution.
@BsAlv,
Merci pour ta réponse.
Je me suis peut-être mal exprimé mais ma demande concerne 10 éléments où, chacun peuvent prendre la forme de 21 valeurs. Le tableau de mon premier poste illustre à mon sens ma demande.
Le fichier que tu as partagé semble indiquer l'ensemble des combinaisons des 21 valeurs pour atteindre 100.
a titre d'exemple, la ligne 8 de ton fichier indique : 5*valeur 10 + 1*valeur 5 + 3*Valeur 15 ce qui est bien égal à 100 pour 9 éléments. Cependant ceci ne prend pas en compte quel élément correspond à quelle valeur :
| Element 1 | Element 2 | Element 3 | Element 4 | Element 5 | Element 6 | Element 7 | Element 8 | Element 9 | Element 10 | Somme |
| 5 | 10 | 10 | 10 | 10 | 10 | 15 | 15 | 15 | 0 | 100 |
| 0 | 5 | 10 | 10 | 10 | 10 | 10 | 15 | 15 | 15 | 100 |
| 15 | 0 | 5 | 10 | 10 | 10 | 10 | 10 | 15 | 15 | 100 |
| 15 | 15 | 0 | 5 | 10 | 10 | 10 | 10 | 10 | 15 | 100 |
| 15 | 15 | 15 | 0 | 5 | 10 | 10 | 10 | 10 | 10 | 100 |
| 10 | 15 | 15 | 15 | 0 | 5 | 10 | 10 | 10 | 10 | 100 |
| 10 | 10 | 15 | 15 | 15 | 0 | 5 | 10 | 10 | 10 | 100 |
| 10 | 10 | 10 | 15 | 15 | 15 | 0 | 5 | 10 | 10 | 100 |
| 10 | 10 | 10 | 10 | 15 | 15 | 15 | 0 | 5 | 10 | 100 |
| 10 | 10 | 10 | 10 | 10 | 15 | 15 | 15 | 0 | 5 | 100 |
Aussi les valeurs 10 et 15 peuvent se décomposer également en 10(5,5), 15(5,5,5 /10,5).
re,
les colonnes à partir de Y étaient supprimé dans ma dernière contribution. Ma ligne 8, cellule AE8, me dit qu'il y a (si ma formule est correcte) 5.040 combinaisions possible avec cette solution. Ce n'est pas un défi pour moi pour les générer toutes. En total, il y a 10.015.005 combinaisons à générer