Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro pour trouver un montant total

7 réponses
Avatar
jc
Bonjour

je cherche une macro qui me permettrait de trouver à partir d'une liste
d'une dizaine de montants, un montant total

Par exemple (pour être plus clair)
j'ai un montant total de 6000

la liste de montants suivant :
1000, 400, 3000, 4000, 700, 300, 210, 9850

la macro devrait pouvoir me sélectionner 1000, 4000, 700, 300

afin de trouver la somme de 6000


est-ce possible ???

merci pour votre aide

7 réponses

Avatar
Daniel.M
Bonjour,

C'est possible mais tu dois savoir que l'algorithme qui trouve ce montant croît
à une vitesse exponentielle. Au delà de 25 cellules, ça va sérieusement ramer
(la vitesse de ta bécane n'y changera pas grand chose).

Pour une implantation dudit algorithme, jette un coup d'oeil là:
http://cjoint.com/?cyuqJL2Fkn

Salutations,

Daniel M.

"jc" wrote in message
news:421e1669$0$14791$
Bonjour

je cherche une macro qui me permettrait de trouver à partir d'une liste
d'une dizaine de montants, un montant total

Par exemple (pour être plus clair)
j'ai un montant total de 6000

la liste de montants suivant :
1000, 400, 3000, 4000, 700, 300, 210, 9850

la macro devrait pouvoir me sélectionner 1000, 4000, 700, 300

afin de trouver la somme de 6000


est-ce possible ???

merci pour votre aide




Avatar
jc
merci beaucoup

ça marche


"Daniel.M" a écrit dans le message de
news:
Bonjour,

C'est possible mais tu dois savoir que l'algorithme qui trouve ce montant
croît
à une vitesse exponentielle. Au delà de 25 cellules, ça va sérieusement
ramer
(la vitesse de ta bécane n'y changera pas grand chose).

Pour une implantation dudit algorithme, jette un coup d'oeil là:
http://cjoint.com/?cyuqJL2Fkn

Salutations,

Daniel M.

"jc" wrote in message
news:421e1669$0$14791$
Bonjour

je cherche une macro qui me permettrait de trouver à partir d'une liste
d'une dizaine de montants, un montant total

Par exemple (pour être plus clair)
j'ai un montant total de 6000

la liste de montants suivant :
1000, 400, 3000, 4000, 700, 300, 210, 9850

la macro devrait pouvoir me sélectionner 1000, 4000, 700, 300

afin de trouver la somme de 6000


est-ce possible ???

merci pour votre aide








Avatar
Starwing
Bonjour Daniel,

J'ai voulu tester et j'ai fais l'addition de la ligne 9 et 10 pour un
résultat de 47.
Réponse : elle me surligne en rouge la ligne 13, 14, 20 :-o
Le total donne bien 47, mais je voulais voir apparaître avant, la ligne 9 et
10.
--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing

--
Avatar
Daniel.M
Bonjour,

J'ai voulu tester et j'ai fais l'addition de la ligne 9 et 10 pour un
résultat de 47.
Réponse : elle me surligne en rouge la ligne 13, 14, 20 :-o
Le total donne bien 47, mais je voulais voir apparaître avant, la ligne 9 et
10.


Tu ne dis pas POURQUOI tu voudrais la ligne 9 et 10. Est-ce parce qu'elles sont
situées avant où parce qu'elles utilisent moins de nombres pour générer le
total?

Problématique1 : Localisation des nombres
========================================
L'algorithme récursif utilisé par l'auteur (Jimmy L. Day) s'aparente à un
'pre-order traversal' d'un arbre où on met le noeud qu'on visite à zéro avant
d'évaluer le total. Ainsi, les nombres trouvés en premier seront toujours ceux
où les 1 (colonne C) seront les plus loin dans la liste (parce qu'on met le
noeud à zéro avant d'appeler récursivement la proc Eval).

Faudrait coder un "post-order traversal" pour t'accomoder mais tu n'en serais
pas satisfait si tes nombres 33 et 14 étaient à la fin de la liste. Y'a jamais
de gagnant à ce jeu!


Problématique2: L'utilisation d'aussi peu de nombre pour générer le total
========================================================================
S'il te conviendrait de trouver la plus petite suite de nombre qui génère le
total, je te propose une petite modification à la Sub eval() qui répond à ce
besoin.

Sub eval(ByVal total As Double, ByVal pos As Integer)
If pos <= nbr_elem Then
stat(pos) = 0
eval total, pos + 1
stat(pos) = 1
eval total + elems(pos), pos + 1
Else
Select Case (Abs(total - target) - Abs(best - target))
Case Is < 0 ' total est plus proche de target que best
best = total
copy_stat
Case 0 ' aussi proche, on le garde s'il y a moins de nombres
If Application.Sum(stat) < Application.Sum(statb) Then
copy_stat
End If
Case Else ' > 0
' on ne fait rien
End Select

End If
End Sub

Salutations,

Daniel M.

Avatar
Starwing
Bonjour Daniel,

Tes interventions sont toujours aussi efficaces. Merci de tes explications
qui sont très claires. Je comprends beaucoup mieux maintenant comment
l'algorythme fonctionne.
Au début, javais pensé à une approche qui identifierait le premier résultat
trouvé avec le minimum de chiffre, par la suite le second etc.

J'essaie tout de suite la nouvelle version Eval()

--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing

--
Avatar
eric60300
jc a écrit le 24/02/2005 à 19h02 :
Bonjour

je cherche une macro qui me permettrait de trouver à partir d'une liste

d'une dizaine de montants, un montant total

Par exemple (pour être plus clair)
j'ai un montant total de 6000

la liste de montants suivant :
1000, 400, 3000, 4000, 700, 300, 210, 9850

la macro devrait pouvoir me sélectionner 1000, 4000, 700, 300

afin de trouver la somme de 6000


est-ce possible ???

merci pour votre aide


Bonjour,

je suis interessé par cette macro. Mais le lien donné n'existe plus. Quelqu'un peut il m'aider ?
Je vous remerci d'avance.
Avatar
eric60300
Starwing a écrit le 25/02/2005 à 14h43 :
Bonjour Daniel,

Tes interventions sont toujours aussi efficaces. Merci de tes explications
qui sont très claires. Je comprends beaucoup mieux maintenant comment
l'algorythme fonctionne.
Au début, javais pensé à une approche qui identifierait le
premier résultat
trouvé avec le minimum de chiffre, par la suite le second etc.

J'essaie tout de suite la nouvelle version Eval()

--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing

--


Bonjour,

cette macro m'intéresse mais malheureusement le lien n'est plus valide. Quelqu'un peut il m'aider? je vous remercie d'avance.