OVH Cloud OVH Cloud

Somme de cellules

14 réponses
Avatar
Gadget
Salut à tous.
Y a-t-il dans Excel un outil permettant de rechercher, dans une plage de
cellule, quelles sont les cellules dont la somme est égale à un nombre donné
? Ou un outil VBA disponible ?
Merci de vos réponses.


--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!

10 réponses

1 2
Avatar
Gadget
"Antonio" a écrit dans le message de
news:28ac01c37395$2ea2ac00$


A B C
1 2 4 5

2 2 5 4
3 5 4 2

Dans la matrice ci-dessus, plusieurs combinaisons
de cellules différentes peuvent donner la même somme...
a moins que tu ne recherche toutes les différentes
combinaisons???


Oui, ce serait idéal.
Il y a peut-être un outil déjà implémenté dans excel, ou dans la grosse
banque de macros créées par les utilisateurs, qqn qui s'est déjà penché sur
le problème?


Avatar
Paul V.
Bonjour,

Cette demande revient régulièrement sur le forum.

Il faudrait avant tout fixer les bases du calcul.
Quel serait le nombre total de cellules, le nombre total de cellules pouvant
composer le total, etc.

Sans des limites raisonables, le temps de calcul serait bien vite
innaceptable.

A+

Paul V

Gadget wrote:
"Antonio" a écrit dans le message de
news:28ac01c37395$2ea2ac00$


A B C
1 2 4 5

2 2 5 4
3 5 4 2

Dans la matrice ci-dessus, plusieurs combinaisons
de cellules différentes peuvent donner la même somme...
a moins que tu ne recherche toutes les différentes
combinaisons???


Oui, ce serait idéal.
Il y a peut-être un outil déjà implémenté dans excel, ou dans la
grosse banque de macros créées par les utilisateurs, qqn qui s'est
déjà penché sur le problème?




Avatar
Gadget
"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications, je
pourrais

te donner un exemple pouvant ête applicable à ta situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20 factures en
souffrance m'envoie un chèque qui corresponds à la somme de plusieurs
d'entre elles, sans me préciser lesquelles. J'ai dans une colonne les
montants des factures en souffrance pour ce client, et le montant du chèque
sous les yeux. Comment faire pour retrouver les cellules dont la somme
correspond à ce chèque?
Voilà voilà...

Avatar
Dédé
oupssss j'avais pas tout compris ...

Peu pas te pondre une formule comme ça ... Pas Dieu moi .... Mais je vais
voir ce que je peux faire pour toi ...

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"Gadget" a écrit dans le message de
news:3f588165$0$10750$


"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications, je
pourrais

te donner un exemple pouvant ête applicable à ta situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20 factures en
souffrance m'envoie un chèque qui corresponds à la somme de plusieurs
d'entre elles, sans me préciser lesquelles. J'ai dans une colonne les
montants des factures en souffrance pour ce client, et le montant du
chèque

sous les yeux. Comment faire pour retrouver les cellules dont la somme
correspond à ce chèque?
Voilà voilà...






Avatar
Gadget
Il y a une solution en VBA, en utilisant des boucles récursives sur le
tableau de cellules, je vois à peu près comment ça peut marcher, un peu
comme un tri récursif, mais je me demandais si qqn n'avait pas bossé sur le
pb avant moi...

--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Dédé" a écrit dans le message de
news:
oupssss j'avais pas tout compris ...

Peu pas te pondre une formule comme ça ... Pas Dieu moi .... Mais je vais
voir ce que je peux faire pour toi ...

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"Gadget" a écrit dans le message de
news:3f588165$0$10750$


"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications, je
pourrais

te donner un exemple pouvant ête applicable à ta situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20 factures
en


souffrance m'envoie un chèque qui corresponds à la somme de plusieurs
d'entre elles, sans me préciser lesquelles. J'ai dans une colonne les
montants des factures en souffrance pour ce client, et le montant du
chèque

sous les yeux. Comment faire pour retrouver les cellules dont la somme
correspond à ce chèque?
Voilà voilà...










Avatar
Paul V.
J'ai bossé sur ce problème il y a longtemps mais si tu ne prend pas la peine
de répondre aux questions, je crains de ne pouvoir t'aider ;-)

Plusieurs réponses ont dejà été postées sur ce forum. As-tu fais une
recherche?

A+

Paul V

Gadget wrote:
Il y a une solution en VBA, en utilisant des boucles récursives sur le
tableau de cellules, je vois à peu près comment ça peut marcher, un
peu comme un tri récursif, mais je me demandais si qqn n'avait pas
bossé sur le pb avant moi...

--
oupssss j'avais pas tout compris ...

Peu pas te pondre une formule comme ça ... Pas Dieu moi .... Mais je
vais voir ce que je peux faire pour toi ...

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"Gadget" a écrit dans le message de
news:3f588165$0$10750$


"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications,
je pourrais te donner un exemple pouvant ête applicable à ta
situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20
factures en souffrance m'envoie un chèque qui corresponds à la
somme de plusieurs d'entre elles, sans me préciser lesquelles. J'ai
dans une colonne les montants des factures en souffrance pour ce
client, et le montant du chèque sous les yeux. Comment faire pour
retrouver les cellules dont la somme correspond à ce chèque?
Voilà voilà...







Avatar
Gadget
J'ai bossé sur ce problème il y a longtemps mais si tu ne prend pas la
peine

de répondre aux questions, je crains de ne pouvoir t'aider ;-)


?
Dans ton post de 14h12, tu ne poses pas de question.

Plusieurs réponses ont dejà été postées sur ce forum. As-tu fais une
recherche?


Pas facile de déterminer les critères de recherche sur ce sujet... "Somme de
cellules", trop vague... "Permutations", trop spécifique à la solution
vba... Pas trouvé de fil correspondant. Désolé. Si tu as gardé trace de
cette discussion, je suis preneur...

Salutations.
Gadget.

Paul V

Gadget wrote:
Il y a une solution en VBA, en utilisant des boucles récursives sur le
tableau de cellules, je vois à peu près comment ça peut marcher, un
peu comme un tri récursif, mais je me demandais si qqn n'avait pas
bossé sur le pb avant moi...

--
oupssss j'avais pas tout compris ...

Peu pas te pondre une formule comme ça ... Pas Dieu moi .... Mais je
vais voir ce que je peux faire pour toi ...

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"Gadget" a écrit dans le message de
news:3f588165$0$10750$


"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications,
je pourrais te donner un exemple pouvant ête applicable à ta
situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20
factures en souffrance m'envoie un chèque qui corresponds à la
somme de plusieurs d'entre elles, sans me préciser lesquelles. J'ai
dans une colonne les montants des factures en souffrance pour ce
client, et le montant du chèque sous les yeux. Comment faire pour
retrouver les cellules dont la somme correspond à ce chèque?
Voilà voilà...











Avatar
Paul V.
Désolé, j'ai oublié le ?

Quel serait le nombre total de cellules, le nombre total de cellules pouvant
composer le total?

Voila, c'est réparé.

A+

Paul V

Gadget wrote:
J'ai bossé sur ce problème il y a longtemps mais si tu ne prend pas
la peine de répondre aux questions, je crains de ne pouvoir t'aider
;-)


?
Dans ton post de 14h12, tu ne poses pas de question.

Plusieurs réponses ont dejà été postées sur ce forum. As-tu fais une
recherche?


Pas facile de déterminer les critères de recherche sur ce sujet...
"Somme de cellules", trop vague... "Permutations", trop spécifique à
la solution vba... Pas trouvé de fil correspondant. Désolé. Si tu as
gardé trace de cette discussion, je suis preneur...

Salutations.
Gadget.

Paul V

Gadget wrote:
Il y a une solution en VBA, en utilisant des boucles récursives sur
le tableau de cellules, je vois à peu près comment ça peut marcher,
un peu comme un tri récursif, mais je me demandais si qqn n'avait
pas bossé sur le pb avant moi...

--
oupssss j'avais pas tout compris ...

Peu pas te pondre une formule comme ça ... Pas Dieu moi .... Mais
je vais voir ce que je peux faire pour toi ...

Salutations
Dédé

--
Pour répondre, enlever le NOSPAM
"Gadget" a écrit dans le message de
news:3f588165$0$10750$


"Dédé" a écrit dans le message de
news:
Salut Gadget !

Ben oui !!! simplement en utilisant la fonction Sommeprod !!!!!

Maintenant, si tu pouvais me donner de plus amples explications,
je pourrais te donner un exemple pouvant ête applicable à ta
situation ...


Salutations
Dédé


Bon alors voilà en pratique :
J'édite des factures à des clients. Un client qui a plus de 20
factures en souffrance m'envoie un chèque qui corresponds à la
somme de plusieurs d'entre elles, sans me préciser lesquelles.
J'ai dans une colonne les montants des factures en souffrance
pour ce client, et le montant du chèque sous les yeux. Comment
faire pour retrouver les cellules dont la somme correspond à ce
chèque?
Voilà voilà...











Avatar
Gadget
Je pense qu'une recherche sur une vingtaine de cellules, à raison d'une
somme sur 5 ou 6 est à peu près le cas le plus probable...

Désolé, j'ai oublié le ?

Quel serait le nombre total de cellules, le nombre total de cellules
pouvant

composer le total?

Voila, c'est réparé.

A+

Paul V


Avatar
Paul V.
Bonjour;

J'ai retrouvé le début de réponse. Je ne garanti rien car je n'ai pas testé
à fond.
Cela fonctionne assez bien (semble-t-il) pour toutes les combinaisons
jusqu'à trois nombres. Il faudrait complèter pour monter ce nombre mais le
temps de traitement sera sérieusement augmenté. En effet c'est du calcul
brut sans aucune optimisation.
Il y a un certaine nombre de contraintes de départ et il faudra adapter la
procédure si ces contraintes changes.

- Les valeurs sont situées en A1, A2 et suivantes. Si ce n'est pas le cas,
il faut adapter.
- Elles sont classées par ordre décroissant pour optimiser un minimum mais
on pourrait adapter pour éviter de classer.
- le total à chercher se compose actuellement de 3 nombres au maximum.

Les cellules résultats sont mises en rouge.

C'est un vieux truc et pas du tout optimisé.
Donc toutes améliorations sont les bienvenues.

Sub testrecherche()
'Paul V - 20020122
Dim c, c1 As Object
Dim valcherc As Long
Dim reponse As Long, reponsei As Long, reponsei2 As Long, reponsei3 As Long
Dim total As Long
Dim x As Long, x1 As Long
Dim i As Long, i2 As Long, i3 As Long
Dim comp As Long
valcherc = InputBox("Valeur cherchée", "Recherche de total")
Range("a1:a1").Select
Selection.Interior.ColorIndex = 2
suite:
x = ActiveCell.CurrentRegion.Cells.Count - x1
ActiveCell.Interior.ColorIndex = 2
If ActiveCell.Value = valcherc Then
ActiveCell.Interior.ColorIndex = 3
GoTo fin
ElseIf ActiveCell.Value < valcherc Then
For i = 1 To x
reponse = valcherc - ActiveCell.Value 'calcul du solde avec 1
ActiveCell.Offset(i - 1, 0).Interior.ColorIndex = 2
If reponse = ActiveCell.Offset(i, 0).Value Then
ActiveCell.Interior.ColorIndex = 3
ActiveCell.Offset(i, 0).Interior.ColorIndex = 3
GoTo fin
ElseIf reponse >= ActiveCell.Offset(i, 0).Value Then
reponsei = reponse - ActiveCell.Offset(i, 0).Value
total = ActiveCell.Value + ActiveCell.Offset(i, 0).Value
If total > valcherc Then Exit For
For i2 = 1 To x - i
ActiveCell.Offset(i2 + i - 1, 0).Interior.ColorIndex = 2
If reponsei = ActiveCell.Offset(i2 + i, 0).Value Then
ActiveCell.Interior.ColorIndex = 3
ActiveCell.Offset(i, 0).Interior.ColorIndex = 3
ActiveCell.Offset(i2 + i, 0).Interior.ColorIndex = 3
GoTo fin
ElseIf reponsei >= ActiveCell.Offset(i2 + i, 0).Value Then
reponsei2 = reponsei - ActiveCell.Offset(i2 + 1,
0).Value
total = total + ActiveCell.Offset(i2 + i, 0).Value
If total > valcherc Then Exit For
For i3 = 1 To x - i2
ActiveCell.Offset(i3 + i2 + i - 1,
0).Interior.ColorIndex = 2
If reponsei2 = ActiveCell.Offset(i3 + i2 + i,
0).Value Then
ActiveCell.Interior.ColorIndex = 3
ActiveCell.Offset(i, 0).Interior.ColorIndex
= 3
ActiveCell.Offset(i2 + i,
0).Interior.ColorIndex = 3
ActiveCell.Offset(i3 + i2 + i,
0).Interior.ColorIndex = 3
GoTo fin
ElseIf reponsei2 >= ActiveCell.Offset(i3 + i2 +
i, 0).Value Then
reponsei3 = reponsei2 -
ActiveCell.Offset(i3, 0).Value
total = total + ActiveCell.Offset(i3 + i2 +
i, 0).Value
comp = comp + 1
If total > valcherc Then Exit For
End If
Next
End If
Next
End If
Next i
End If
deplacement:
ActiveCell.Offset(1, 0).Select
If IsEmpty(ActiveCell.Value) Then
MsgBox "fin de traitement"
Exit Sub
End If
x1 = x1 + 1
GoTo suite
Exit Sub
fin:
MsgBox "trouvé"
End Sub


Attention au coupure de lignes éventuelles dues à la transmission.


--
HTH

Paul V.


Paul V. wrote:
Pour ce nombre limité, un système de boucles imbriquées doit faire
l'affaire.

J'avais crée un truc en son temps suite à une question ici mais
j'ignore si je l'ai sauvé sur mon disque ou écrit en direct.
Je vérifie et je reviens.

A+

Paul V


Gadget wrote:
Je pense qu'une recherche sur une vingtaine de cellules, à raison
d'une somme sur 5 ou 6 est à peu près le cas le plus probable...

Désolé, j'ai oublié le ?

Quel serait le nombre total de cellules, le nombre total de cellules
pouvant composer le total?

Voila, c'est réparé.

A+

Paul V






1 2