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

RE : Fonction ou Macro

4 réponses
Avatar
Angel Dust
Bonjour,


Merci à Piotr et anonymous de m'avoir répondu.
Je n'ai pas été assez clair par rapport à ma recherche.

En fait, j'ai 44 valeurs dans la plage de A1 à A44. En B1, j'ai une valeur
totale. Je sais que la somme de 24 éléments de ma plage donnent mon résultat
en B1.

Pour répondre à Piotr :

- As-tu toujours 44 valeurs ?
Non c'est variable comme la valeur totale le nombre d'éléments.

-Les sommes ne doivent-elles se faire que par 2 valeurs ou bien peut-il y en
avoir 3, 4, ... pour atteindre 32 (ou un autre nombre) ?
C'est variable. Ici, il m'en faut 24.

- Et si la valeur elle-même se trouve dans la liste (si on a un 32 dans les
5 valeurs), faut-il l'indiquer ou l'exclure. ?
L'exclure.

-Quand il y a plusieurs solutions (dans ton exemple, il y a également
15+17), y a-t-il une règle pour déterminer celle que l'on doit conserver ?
Pour l'instant aucune.

-Sous quelle forme souhaites-tu le résultat ?
Par exemple, les valeurs qui constituent la somme en rouge.

Je vais essayer de voir avec l'algo de Pierre, j'espérais qu'il existait une
fonction d'excel tout faite ;o)))

A+
Steph



Dans les cas plus complexes, je pense qu'il faut une fonction VB
spécifique... Mais je n'aurai pas le temps de te l'écrire car je dois m'en
aller bientôt. Dans un cas général, je verrais bien une fonction récursive
du genre (écrite plus en algo qu'en VB : il faudra traduire) :
function TrouveSomme(Plage;Cible;n) as string
dim x as string
Si Plage.Count<n alors TrouveSomme=""
Si Plage(n)=Cible alors TrouveSomme=Plage(n)
Sinon si Page(n)>Cible alors TrouveSomme=TrouveSomme(Plage,Cible,n+1)
Sinon si Plage(n)<Cible alors
x=TrouveSomme(Plage,Cible-Plage(n),n+1)
Si x="" alors TrouveSomme=TrouveSomme(Plage,Cible,n+1)
Sinon TrouveSomme=Plage(n) & "+" & x
Fin.Si
Fin.Si
End Function
Plage est la liste de valeur, Cible la valeur à rechercher par une somme, et
au début n vaut 1 (c'est le numéro d'ordre dans la liste).
En l'état, la fonction s'arrête dès qu'elle trouve une solution. Il doit y
avoir possibilité de la faire continuer pour toutes les trouver, mais il
faut étudier le moyen de stocker le résultat.

Je ne sais pas si Excel accepte bien les fonctions récursives.
Et puis il y a peut-être moyen d'optimiser cela en triant la liste de
données par ordre croissant.
A creuser.

J'espère que cela t'aidera.

Bon courage.
Pierre.

> > Bonjour,
> >
> > Je me demandais s'il existait une fonction ou macro pour trouver par
> exemple
> > dans une plage de 5 valeurs, quelles sont les valeurs de cette plage qui
> > donnent une somme précise.
> >
> > Merci d'avance
> > Stéphane
>
> Oups je suis désolé, je crois que je n'ai pas été assez clair.
>
> Par exemple, j'ai des valeurs 12 15 17 20 56 et je voudrais savoir quelles
> sont les 2 valeurs qui me donnent en les ajoutant 32, ici en l'occurrence
12
> et 20.
>
> Merci pour votre aide
>
>

4 réponses

Avatar
Gafish
Bonjour,

En fait, ton problème ressemble au fameux problème
du "Compte est bon", sauf qu'il est par un côté moins
complexe (tu n'as que la somme) et par un côté plus
complexe (on peut avoir x opération).
D'un autre côté, le nombre maxi d'opérations est
déterminable facilement, c'est le nombre de chiffres que
tu as moins 1.
Il existe sur le net des algorythmes pour le compte est
bon (je m'étais interessé à ce problème il y a quelque
temps). Tu devrais pouvoir trouver cela et l'adapter à ton
problème. Il est probable qu'il existe en VB.

Arnaud

-----Message d'origine-----
Bonjour,


Merci à Piotr et anonymous de m'avoir répondu.
Je n'ai pas été assez clair par rapport à ma recherche.

En fait, j'ai 44 valeurs dans la plage de A1 à A44. En
B1, j'ai une valeur

totale. Je sais que la somme de 24 éléments de ma plage
donnent mon résultat

en B1.

Pour répondre à Piotr :

- As-tu toujours 44 valeurs ?
Non c'est variable comme la valeur totale le nombre
d'éléments.


-Les sommes ne doivent-elles se faire que par 2 valeurs
ou bien peut-il y en

avoir 3, 4, ... pour atteindre 32 (ou un autre nombre) ?
C'est variable. Ici, il m'en faut 24.

- Et si la valeur elle-même se trouve dans la liste (si
on a un 32 dans les

5 valeurs), faut-il l'indiquer ou l'exclure. ?
L'exclure.

-Quand il y a plusieurs solutions (dans ton exemple, il y
a également

15+17), y a-t-il une règle pour déterminer celle que l'on
doit conserver ?

Pour l'instant aucune.

-Sous quelle forme souhaites-tu le résultat ?
Par exemple, les valeurs qui constituent la somme en
rouge.


Je vais essayer de voir avec l'algo de Pierre, j'espérais
qu'il existait une

fonction d'excel tout faite ;o)))

A+
Steph



Dans les cas plus complexes, je pense qu'il faut une
fonction VB

spécifique... Mais je n'aurai pas le temps de te l'écrire
car je dois m'en

aller bientôt. Dans un cas général, je verrais bien une
fonction récursive

du genre (écrite plus en algo qu'en VB : il faudra
traduire) :

function TrouveSomme(Plage;Cible;n) as string
dim x as string
Si Plage.Count<n alors TrouveSomme=""
Si Plage(n)=Cible alors TrouveSomme=Plage(n)
Sinon si Page(n)>Cible alors TrouveSomme=TrouveSomme
(Plage,Cible,n+1)

Sinon si Plage(n)<Cible alors
x=TrouveSomme(Plage,Cible-Plage(n),n+1)
Si x="" alors TrouveSomme=TrouveSomme
(Plage,Cible,n+1)

Sinon TrouveSomme=Plage(n) & "+" & x
Fin.Si
Fin.Si
End Function
Plage est la liste de valeur, Cible la valeur à
rechercher par une somme, et

au début n vaut 1 (c'est le numéro d'ordre dans la liste).
En l'état, la fonction s'arrête dès qu'elle trouve une
solution. Il doit y

avoir possibilité de la faire continuer pour toutes les
trouver, mais il

faut étudier le moyen de stocker le résultat.

Je ne sais pas si Excel accepte bien les fonctions
récursives.

Et puis il y a peut-être moyen d'optimiser cela en triant
la liste de

données par ordre croissant.
A creuser.

J'espère que cela t'aidera.

Bon courage.
Pierre.

Bonjour,

Je me demandais s'il existait une fonction ou macro
pour trouver par



exemple
dans une plage de 5 valeurs, quelles sont les valeurs
de cette plage qui



donnent une somme précise.

Merci d'avance
Stéphane


Oups je suis désolé, je crois que je n'ai pas été assez
clair.



Par exemple, j'ai des valeurs 12 15 17 20 56 et je
voudrais savoir quelles


sont les 2 valeurs qui me donnent en les ajoutant 32,
ici en l'occurrence


12
et 20.

Merci pour votre aide







.





Avatar
La réponse que je t'ai envoyée fonctionne si tu mets le
chiffre en A1 et les autres en B1:Bxx et ça fonctionne, je
l'ai testée pour mon boulot.

donc les valeurs sont placées non pas en A1:Axx mais en
B1 !!!
Bye


-----Message d'origine-----
Bonjour,


Merci à Piotr et anonymous de m'avoir répondu.
Je n'ai pas été assez clair par rapport à ma recherche.

En fait, j'ai 44 valeurs dans la plage de A1 à A44. En
B1, j'ai une valeur

totale. Je sais que la somme de 24 éléments de ma plage
donnent mon résultat

en B1.

Pour répondre à Piotr :

- As-tu toujours 44 valeurs ?
Non c'est variable comme la valeur totale le nombre
d'éléments.


-Les sommes ne doivent-elles se faire que par 2 valeurs
ou bien peut-il y en

avoir 3, 4, ... pour atteindre 32 (ou un autre nombre) ?
C'est variable. Ici, il m'en faut 24.

- Et si la valeur elle-même se trouve dans la liste (si
on a un 32 dans les

5 valeurs), faut-il l'indiquer ou l'exclure. ?
L'exclure.

-Quand il y a plusieurs solutions (dans ton exemple, il y
a également

15+17), y a-t-il une règle pour déterminer celle que l'on
doit conserver ?

Pour l'instant aucune.

-Sous quelle forme souhaites-tu le résultat ?
Par exemple, les valeurs qui constituent la somme en
rouge.


Je vais essayer de voir avec l'algo de Pierre, j'espérais
qu'il existait une

fonction d'excel tout faite ;o)))

A+
Steph



Dans les cas plus complexes, je pense qu'il faut une
fonction VB

spécifique... Mais je n'aurai pas le temps de te l'écrire
car je dois m'en

aller bientôt. Dans un cas général, je verrais bien une
fonction récursive

du genre (écrite plus en algo qu'en VB : il faudra
traduire) :

function TrouveSomme(Plage;Cible;n) as string
dim x as string
Si Plage.Count<n alors TrouveSomme=""
Si Plage(n)=Cible alors TrouveSomme=Plage(n)
Sinon si Page(n)>Cible alors TrouveSomme=TrouveSomme
(Plage,Cible,n+1)

Sinon si Plage(n)<Cible alors
x=TrouveSomme(Plage,Cible-Plage(n),n+1)
Si x="" alors TrouveSomme=TrouveSomme
(Plage,Cible,n+1)

Sinon TrouveSomme=Plage(n) & "+" & x
Fin.Si
Fin.Si
End Function
Plage est la liste de valeur, Cible la valeur à
rechercher par une somme, et

au début n vaut 1 (c'est le numéro d'ordre dans la liste).
En l'état, la fonction s'arrête dès qu'elle trouve une
solution. Il doit y

avoir possibilité de la faire continuer pour toutes les
trouver, mais il

faut étudier le moyen de stocker le résultat.

Je ne sais pas si Excel accepte bien les fonctions
récursives.

Et puis il y a peut-être moyen d'optimiser cela en triant
la liste de

données par ordre croissant.
A creuser.

J'espère que cela t'aidera.

Bon courage.
Pierre.

Bonjour,

Je me demandais s'il existait une fonction ou macro
pour trouver par



exemple
dans une plage de 5 valeurs, quelles sont les valeurs
de cette plage qui



donnent une somme précise.

Merci d'avance
Stéphane


Oups je suis désolé, je crois que je n'ai pas été assez
clair.



Par exemple, j'ai des valeurs 12 15 17 20 56 et je
voudrais savoir quelles


sont les 2 valeurs qui me donnent en les ajoutant 32,
ici en l'occurrence


12
et 20.

Merci pour votre aide







.





Avatar
Angel Dust
"Gafish" a écrit dans le message news:
00a201c3bdab$cb755ef0$
Bonjour,

En fait, ton problème ressemble au fameux problème
du "Compte est bon", sauf qu'il est par un côté moins
complexe (tu n'as que la somme) et par un côté plus
complexe (on peut avoir x opération).
D'un autre côté, le nombre maxi d'opérations est
déterminable facilement, c'est le nombre de chiffres que
tu as moins 1.
Il existe sur le net des algorythmes pour le compte est
bon (je m'étais interessé à ce problème il y a quelque
temps). Tu devrais pouvoir trouver cela et l'adapter à ton
problème. Il est probable qu'il existe en VB.
Arnaud


Bonjour,

Oui c'est exactement cela, le compte est bon. Je vais le rechercher.
Merci
Avatar
Angel Dust
a écrit dans le message news:
fc7c01c3be25$a66c03f0$
La réponse que je t'ai envoyée fonctionne si tu mets le
chiffre en A1 et les autres en B1:Bxx et ça fonctionne, je
l'ai testée pour mon boulot.

donc les valeurs sont placées non pas en A1:Axx mais en
B1 !!!
Bye




Bonjour, oui merci.
J'ai vu qu'elle fonctionnait pour un nombre indéfini d'élements
"participant" à cette somme.
Il faut en fait que je puisse définir un nombre d'élements de la somme, pour
éviter de vite me retrouver en dépassement de capacité.
J'ai fait un test avec 44 valeurs et le fait qu'il y ait plus de 17 000
milliards de possibilités m'a tout scratché ;o)))
A+
Stéphane