XL 2016 [résolu]Additions possibles pour atteindre une valeur cible

Etn

XLDnaute Occasionnel
Bonjour,

Je sais pas trop comment l'exprimer donc je suis pas sûr que le titre signifie grand chose...

Bref, je souhaite atteindre une valeur cible à partir d'une addition d'une liste de nombres prédéfinie.

Exemple : dans ma colonne A j'ai une plage de 10 cellules avec des nombres allant de 1 à 10.
Que faut il additionner pour atteindre 25 ?
(Donc 10+9+6, ou 8+6+4+5+2, ou 10+8+7, etc)

L'idée serait d'avoir la liste des possibilités pour atteindre une valeur cible à partir de l'addition d'une liste de nombres.

J'espère avoir été clair dans mon explication.

Merci d'avance pour votre aide.

Etn
 

Dranreb

XLDnaute Barbatruc
Cette fonction perso renverrait dans une plage matricielle les nombres cherchés :
VB:
Function ListeSomme(ByVal Somme As Double, ByVal Rng As Range)
   Dim TDon(), TEss(), MeilDif As Double, N As Long, SEss As Double, LR As Byte, LD As Byte, Dif As Double
   TDon = Rng.Value
   MeilDif = (2 ^ 53 - 1) * 2 ^ 971
   For N = 1 To 2 ^ UBound(TDon, 1) - 1
      ReDim TEss(1 To UBound(TDon, 1), 1 To 1): SEss = 0: LR = 0
      For LD = 1 To UBound(TDon, 1)
         If N And 2 ^ (LD - 1) Then
            LR = LR + 1: TEss(LR, 1) = TDon(LD, 1)
            SEss = SEss + TDon(LD, 1): End If
         Next LD
      Dif = Abs(SEss - Somme)
      If Dif < MeilDif Then
         While LR < UBound(TEss, 1): LR = LR + 1: TEss(LR, 1) = "": Wend
         MeilDif = Dif: ListeSomme = TEss: End If
      Next N
   End Function
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Etn, @Dranreb ;),

Il y a quelques années, j'avais commis une macro assez rapide pour un lettrage de factures et/ou avoirs.
Il peut aussi servir à répondre à la question posée par @Etn.
les instructions sont dans le fichier joint.

En résumé :
  • mettre les 10 valeurs dans la colonne E à partir de E5
  • mettre en E3 la somme à composer
  • cliquer sur le bouton Hop
rem : si sur la feuille "Result", on sélectionne une cellule d'une solution , alors les constituants se mettent en gras dans l'en-tête en ligne 4
 

Pièces jointes

  • Etn-Lettrage-v4a.xlsm
    47.7 KB · Affichages: 31
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je m'y connais un peu en VBA mais je comprends pas comment utiliser une fonction perso.
Elle renvoie un tableau, alors on peut l'affecter à un autre tableau.
Sinon on peut aussi l'utiliser dans une formule matricielle de cellules. Par exemple :
En B3:B7 validé par Ctrl+Maj+Entrée :
Code:
=ListeSomme(B$1;$A$2:$A$6)
Les nombres d'origine étant supposés en A2:A11, et la somme à approcher en B1.
 

Discussions similaires

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko