Trouver une somme à partir d'une base de donnée

Bonjour,

Je cherche à trouver une somme spécifique à partir d'une série de données.

En l'occurrence, je cherche à trouver la somme en D45 en utilisant la série du dessus.

L'idée est de piocher dans la série et d'atteindre le résultat. On n'est pas obligé d'utiliser toutes les occurrences d'un même montant.

Est ce qu'il existe un outil dans Excel pour faire ça rapidement?

Merci par avance,

N.

85classeur1.xlsx (9.71 Ko)

Hello,

Si je comprend bien, tu cherche à trouver des combinaisons de ton montant cible à partir de ta base total, regarde dans la rubrique téléchargement du site, test l'outil MYRMIDON Lettrage 8) , c'est ce que tu cherche.

https://www.excel-pratique.com/fr/telechargements/outils-de-gestion/myrmidon-lettrage-no172.php

Tu trouvera des outils similaire sur le web ou sinon il y'a la fonction Solver dans Excel qui résous ce type d'équation, probablement à ressortir du volet option affichage.

Voila bon café

Bonjour,

Merci pour le post, cela semble bien être le logiciel qu'il me faut.

J'ai lu tout le manuel user, j'ai démarré le logiciel mais quand j'active les macros, j'ai le message d'erreur suivant et plusieurs fenêtres de Microsoft Visual Basic derrière.

D'ailleurs, est ce que les montants doivent être entrés un par un? En l'occurrence, dans les exemples montrés, ce sont des factures, mais en ce qui me concerne, presque tous les montants ont plusieurs occurrences, est ce qu'il y a une option pour "répéter" les montants?

Merci par avance!

Alors enfin du SAV :

Question 1.

T'est sur quel OS (vista, seven, 8.1), chez moi j'ai retéléchargé l'appli. sur mon OS vista (fichier v2) et sur mon OS 8.1 (version 8.1) ça se lance nickel, par contre je n'ai pas seven, donc je ne sais pas ?

(ta dézippé le dossier ? Ton problème vient des références VBA WebMail manquantes chez toi, la version 2.1 règle ce problème)

>Est-ce que tu peux appuyer dans le zip directement sur la version 2.1 et me dire si tu as un bug ?

>Ou dézipper et appuyer directement sur la version 2.1 et me dire si tu as un bug ?

Normalement il ne doit pas y avoir ce bug.

Question 2.

Non non, tu peux faire copier/coller, il n'y que la partie du formulaire qui est protégée.

La recherche de combinaison se fait par défaut sur la colonne montant, par contre dans le formulaire en appuyant sur rechercher, tu peux modifier la plage à rechercher (il suffit d'indiquer la 1er cellule et la dernière cellule de ta colonne à rechercher).

Concernant tes occurrences, tu me dirais si tu pouvais les filtrer > je te dirais en manuel, avec le filtre excel et le sa fonction tri...

Mais là je ne comprends pas, par répéter les montants, si c'est reporter les montants faisant partie de la solution, il existe une macro identique d'eriiic :

http://www.commentcamarche.net/forum/affich-25212601-combinaison-de-sommes-egales-a-valeur-cible

Est ce que c'est ça que tu cherche ??

En attendant ton retour

Ha je crois que j'ai du raté un truc dans la gestion des références WebMail dans la 8.1, est-ce que tu peux dégager tout les messages d'erreurs, puis :

allez dans le module développeur VBA > Outils > Références > Parcourir > Et sélectionner les 2 Dll du dossiers 7. Copies .Dll WIN8 > Puis OK > Puis enregistrer

Normalement les messages d'erreurs disparaissent.

Re,

Je suis sous W7 ^^

Je vais décrire toutes les possibilités :

*Dézippant :

  • En ouvrant le v2.1 version Note Book W8
  • En ouvrant le v2.1 version Notebook, je peux entrant, mais en activant les macros, j'ai le même message d'erreur montré dans le post du-dessus.
  • En ouvrant les deux autres fichiers v2 (un où y a marqué raccourci à la fin et l'autre non), même message d'erreur montré dans le post du-dessus.

*à l'intérieur du fichier zippé:

  • le fichier v2 avec marqué raccourci, est un fichier .ink, donc ouvrable mais ça donne une fenêtre ink (avec des symboles)
  • le fichier v2.1 version Notebook Win8 est aussi un fichier ink, message d'erreur montré ci-dessus (voir l'image)
  • Les deux autres fichiers (la v2 normale et la v2.1 version Notebook) donnent le même message d'erreur montré dans le post du-dessus.

Pour la question 2 :

Oui, j'ai pu faire des copier/coller mais dans mon tableau initial, j'ai une colonne "nombre" du coup j'ai une ligne pour un montant.

Ici dans le logiciel, pour faire apparaître toutes les occurrences, il faut que je les mette ligne par ligne dans la colonne montant? (il y a quand même en tous 751 occurrences).

Je me place ici dans l'entrée de données et pas dans l'identification des combinaisons.

Merci!

Question 1.

Argh le seul cas que j'ai pas pu couvrir, Seven... Si ma solution du 3e post, marche dis moi.

Et il y'a un autre pb apparemment merci pour ton screen.

Question 2.

haaaa ok je vois à quoi sert la colonne nombre, c'est des données que tu as sortie brut en sous total ? Tu ne peux pas les sortir brut brut, genre avoir tes "16" 4 ligne a ligne ?

J'ai du sommeil à récupérer, je suis en train de tomber,

Je t'ai codé un truc rapide pour dégrouper tes données plus rapidement, bon il y'a un peu de boulot à faire en manu, mais ça devrait te faire gagner du temps (à moins que qqn veuille bien écrire les variables et le code de lecture itératif du tableur avant, pour que tout soi en auto ?).

Voilà le code :

 Sub deploichiffrecolonne()
Dim i As Integer
  'La variable i va successivement prendre les valeurs A1 à A10
  For i = 1 To 10
   'Ecrit le libellé COUCOU successivement dans les cellules A1:A10
   Cells(i, 1) = "COUCOU !!!"
  Next i

End Sub

A chaque ligne à dégrouper tu va dans le module developpeur VBA et tu change ça :

Dans For i = 1 to 10, tu remplace 10 par le nombre de chiffre ici 16

Tu remplace coucou !!! par le chiffre que tu veux dégrouper par exemple 4

T’appuies sur le bouton et ça dégroupe, y'a plus qu'a copier/coller

Par contre une fois dégroupé et ta recherche prête a être lancée, s'il est 22h, compte bien 4>10Heures de calculs(J'ai fais un calcul de cette taille une fois il m'a fallut une nuit de calcul, la macro va 3 fois plus vite, 12/3=4h quand même), la macro d'Eriiic commence son calcul par le bas (1er solutions), elle ira un peu plus vite... Mais songe pas à toucher Excel avant la fin...

Pense à changer le format Date des colonnes "Date" en format standard si tu veux les utilisées.

44classeur1-1.xlsm (17.92 Ko)

Attends j'allais me coucher, mais faire un boulot à moitié, ça m'empêche de dormir, voilà ton fichier avec les variables gérés, t'aura pas a aller dans le module de dev. VBA pour faire les changements, t'a juste à modifier les valeurs de 2 cellules.

Bon y'a quand même 40 copier/coller a faire, mais ce n'est pas le plus gros pb.

Sub deploichiffrecolonne()
Dim i As Integer
  'La variable i va successivement prendre les valeurs A1 à A10
  For i = 1 To Range("E1").Value
   'Ecrit le libellé COUCOU successivement dans les cellules A1:A10
   Cells(i, 1) = Range("C1").Value
  Next i

End Sub

Bonne nuit

42classeur1-1.xlsm (18.99 Ko)

Merci beaucoup

Ca fait plaisir de voir que la communauté est active (ou du moins, toi t'es actif )

Je vais checker ça demain, bonne nuit

Hello Hello,

Je sais pas si tu en as encore besoin, au pire ça te servira si tu veux dégrouper un autre tableur une autre fois.

Voilà ton tableur, avec une macro pour dégrouper en auto, ça dégroupe tes valeurs dans la colonne A, bon y'a plus qu'a coller tes valeurs à combiner dans une macro de recherche de combinaisons, ça va prendre énormément de temps .

Sub essaiautodeploiement()

finligne = ActiveSheet.UsedRange.Rows.Count 'définition de fin de ligne, en définissant de faire une sélection des lignes utilisés globalement
numeroligne = 3 'commence le job de lecture du tableau a degrouper à la ligne 2 du tableau

    'Expression conditionnel Tant Que ou While... Wend

    '1. Lecture du tableur a dégrouper
    While numeroligne <= finligne 'commence le job de la ligne 2 jusqu'à au moins la dernière ligne utilisé du tableur

    '1.bis Controle en boucle sur chaque ligne du tableur, pour arrêt de la macro, si cellule colonne B contient le terme "total"
    If Range("B" & numeroligne).Value = "Total" Then
    Range("F" & numeroligne).Value = "ok code arrêt a la ligne total"
    Exit Sub
        End If

    'Boucle For To pour dégrouper les valeurs
      '2. La variable i va successivement prendre les valeurs du 1er nombre au dernier 'variable maxi en colonne C'
  For i = 1 To Range("C" & numeroligne).Value

   '2.a. test de dispatching du dégroupage en colonne A, 1er test pour être sur de commencer en A1 puis ensuite bien aller en bas de tableau A au fur et a mesure
If Range("A1").Value = "" Then
Range("A1").Select 'sélectionner la 1er cellule de la colonne à aditionner
FinligneA = Range("A1").Count 'variable prend le nombre ligne afin de faire l'adressage
Range("A" & FinligneA).Value = Range("B" & numeroligne).Value 'colle le chiffre

Else 'puis au delà du 1er chiffre deploit auto
FinligneA = FinligneA + 1 'indique à la formule de se déplacer de 1 à chaque cellule afin de placer le nombre dans la cellule non utilisé
Range("A" & FinligneA).Value = Range("B" & numeroligne).Value 'colle le chiffre à degrouper
End If

  Next i

 '1.ter. Compteur ligne > bien mettre le compteur sinon boucle sans fin, +1 pour dire d'aller à la prochaine ligne utilisé si vide arrêt
    numeroligne = numeroligne + 1

Wend

End Sub

Bon maintenant va falloir que je trouve une solution pour faire marcher ma macro de lettrage de façon nickel sans à faire faire trop manip aux users.

a+

39classeur1-1-1.xlsm (30.08 Ko)

Merci pour le travail. Je dois avouer que je m'y connais rien en macro...

Mais cela ne résout pas le problème d'accès au logiciel.

Je crois bien que le développeur ait oublié w7 dans les compatibilité :

2 versions de l'application :

  • v2 compatible avec Windows Vista / Xp
  • v2.1 Notebook compatible avec Windows 8.1

Hello,

Non non il a pas oublié, d'après ce que je sais il n'avait pas seven, du coup il a pas testé, mais il bosse sur un correctif .

Essaye la macro d'Eriiic, normalement ça doit marcher chez toi, lien en bas.

Si tu cherche bien 1924€, fais ces paramétrages, sa te fera gagner du temps (nbtermesmini = 211 / Maxi = 320 / Nb solution = 1)

Tri du plus petit au plus grand, ça aidera à la vitesse de recherche de la macro.

Si tu cherche une combi en dessous des 211 plus fortes valeurs, tu ne trouve pas 1924 (1920.11)

Et si tu cherche au dessus des 320 plus petites valeurs tu ne trouve pas 1924 (1926.50)

Si tu cherche une seule solution, sa te fera gagner plusieurs heures de recherche ou jours en fonction de ta machine (garde en tête que si ça se trouve il n'y a pas de combinaison pour cette somme ).

Après le pb du vba, c'est qu'il ne peut faire qu'un traitement à la fois, donc quoi qu'il arrive Excel ce sera toujours plus lent, qu'un logiciel dans un autre langage, qui pourra lancer plusieurs traitements dans tous les sens.

Bon je crois que j'ai apporté toute la science que j'avais, bonne chance pour ton pb

Ok, je vais ressayer ce soir Merci

T'a réussis a lancer la macro d'Eriiic ?

Pour le fun ce matin, j'ai essayé de lancer ta recherche sur ma macro Myrmidon, ainsi que sur celle d'Eriiic, Jimmy L. Day, recurs, Euromatic, autant dire que j'en ai fait pas mal, Excel a planté, recherche trop grosse...... pile insuffisante

J'ai lancé l'appli. .Net, pas de problème elle se lance, sauf qu'il y'a une erreur de codage dans le mouvement de recherche... autant dire qu'elle ne sert à rien.....

Par contre va donc comprendre pourquoi, mais la macro de Ti, lance bien la recherche, est-ce qui fera bien la recherche correctement ? Normalement oui, mais bon, l'appli. .Net semblait être fonctionnelle quand je l'avais testée.

Je t'ai modifié la macro Ti pour qu'il ne fasse qu'un tour de boucle de solutions.

De mémoire son codage stocke par 2 les solutions trouvées, je n'ai aucune idée pour comment faire pour qu'il n'en fasse qu'une et non 2.

Par contre ça arrêtera la macro au moins dès qu'il aura fait ce tour, il t'affichera la solution, sinon c'est qu'il n'y en avais pas, essaye vite fait de trouver par exemple 12, tu verra comment ça marche.

Bon bah moi j'ai du boulot, si je veux que mon projet d'application soit opérationnel...

>> Tu pourras me dire si t'a trouvé la solution de ta recherche, sa m’intéresse pour mon appli. .Net. <<

Merci.

Hey,

Merci pour les info. J'ai téléchargé la macro d'eriiic.

J'ai lancé le truc, il va falloir attendre je pense. La somme à trouver a changé, on est maintenant à 1804,22.

J'ai laissé tourné le macro d'eriic toute la nuit dernière. Ce matin, ça tournait encore. Et en fin de journée, quand je suis rentré, ça tournait encore. Je sais pas si Excel n'a pas en fait planté tout court.

En attendant, j'ai au final trouvé une solution à la mano dans la journée...

Yep , moi aussi ça tourne, j'ai 2 macro qui tourne, celle de Ti et une autre en .net, toujours pas de résultat, mais d'après le gestionnaire des taches ça tourne toujours (le processeur et la ram fonctionne bien, donc je ne pense pas que ça a planter, ça à freezer).

Après faut pas croire, en théorie c'est un boulot de super ordinateur à ce niveau de taille .

Ton résultat faisait pile le montant de 1924.22 ? ta solution comporte combien de montants ?

Moi je laisse encore tourner jusqu'à demain 12h ou soir pour mes tests, de toute façon en théorie ce genre de travaux ça ne peux se résoudre que par décentralisation de calcul à la Seti@Home, si on veut un truc super rapide...

En fait, comme je l'ai mis dans un post précédent, la somme que je veux trouver a changé : c'est devenu 1804,22. Je sais plus quel est le nombre de montants, mais je crois que j'ai pris le tableau des montants, je pris tous les montants en remontant vers le bas, j'ai pu éliminer les ,22 à la fin avec une certaine somme, il me restait du coup je crois 266, après avec les 5 et les 5.5 je suis arrivé à 260, et en ajoutant un 6 donc voilà. Ca a pris moins de 5 minutes lol.

ok merci je vais tester alors

cool j'ai aussi retrouvé la somme de 1804.22, j'ai trouvé 222 éléments, cette fois ci l'utilité de la macro a fonctionné, j'avais un écart de 13.60€ bam, matché.

Bon bah du coup cerveau humain 1 - Macro VBA 0

ha ha toute une aventure

Rechercher des sujets similaires à "trouver somme partir base donnee"