Lameche15
Messages postés156Date d'inscriptionmardi 9 septembre 2008StatutMembreDernière intervention15 septembre 2022
-
12 févr. 2013 à 09:39
Lameche15
Messages postés156Date d'inscriptionmardi 9 septembre 2008StatutMembreDernière intervention15 septembre 2022
-
19 févr. 2013 à 09:22
Bonjour
J'ai pas mal progressé depuis quelques temps que je réalise des macros excel mais j'ai à nouveau besoin de l'aide d'experts.
J'ai créé un tableau excel qui va me servir de base de données.
Dans ce tableau, 4 champs importants: adresse (5choix) - type d'opération (4choix) - priorité de l'opération (1,2 ou 3) - montant de l'opération.
Maintenant, je souhaiterais savoir s'il est envisageable en fonction d'un montant donné par type d'opération de retrouver les combinaisons (somme des opérations) qui se rapproche le plus du montant donné. Sachant qu'il faudrait au moins 1 opération par adresse et privilégier les priorités 1.
J'espère m'etre bien fait comprendre
En tout cas merci d'avance pour votre aide précieuse
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 févr. 2013 à 10:02
Salut
Le mieux serait quand même de nous donner un exemple chiffré, parce que là, c'est un peu vague.
Avec ta somme, connais-tu le nombre (imposé ?) d'opérations qui la compose ?
Il faudra y aller par tâtonnement, avec des boucles imbriquées.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 12 févr. 2013 à 11:58
Bonjour,
J'ai déjà eu l'occasion de répondre à une question similaire il n'y a pas si longtemps.
Une telle démarche ne saurait conduire à rien de certain comptablement parlant, y compris avec des totaux correspondant très exactement.
Ce type de "recherche" est soumis, en informatique, aux mêmes aléas et risques que manuellement et toute(s) combinaison(s) possible(s), y compris avec un total exact, ne sera qu'une "hypothèse" de "vraisemblabilité".
Pire : qu'il y ait simplement eu une erreur de saisie (ou d'écriture, si en manuel) et l'on risquera d'aboutir à des articles dont le total correspond à celui cherché, sans pour autant que ces articles soient ceux concernés par la recherche.
S'il s'agit d'un travail pour une société, je préconise vivement que tu demandes ce qu'il en pense à l'agent comptable responsable.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 févr. 2013 à 13:07
Oui, c'est vrai que ce n'est pas propre, mais bon, on est là pour parler programmation et c'est rigolo à faire.
Profitant de ma pause déjeuner, voilà le résultat de mon test sous Excel :
Sur une feuille, j'ai placé :
- 3 prix en B3, B4 et B5. J'ai donné les noms suivants aux cellules : Prix1, Prix2, Prix3
- 3 quantités en C3, C4 et C5, avec les noms de cellule Qté1, Qté2, Qté3
- En D3, D4 et D5, j'ai mis le résultat de la multiplication de chaque Prix x Qté
- En D7, j'ai mis la somme des D3 à D5
- En B9, j'ai mis la valeur cible à approcher.
- En B11 : L'écart minimum calculé
- En B12, 13 et 14 : les Qté1, 2 et 3 correspondant à cet écart mini
et le code qui permet de retrouver la meilleure combinaison :
Sub xxxx()
Dim ValeurCible As Single
Dim Ecart As Single
Dim EcartMini As Single
Dim r1 As Long
Dim r2 As Long
Dim r3 As Long
Dim bExactFound As Boolean
bExactFound = False
ValeurCible = Range("B9").Value
EcartMini = ValeurCible + 1
For r1 = 0 To (ValeurCible / Range("Prix1").Value)
Range("Qté1").Value = r1
Range("Qté2").Value = 0
Range("Qté3").Value = 0
DoEvents ' Calculs feuille
If Range("D7").Value > ValeurCible Then Exit For
For r2 = 0 To (ValeurCible / Range("Prix2").Value)
Range("Qté2").Value = r2
Range("Qté3").Value = 0
DoEvents
If Range("D7").Value > ValeurCible Then Exit For
For r3 = 0 To (ValeurCible / Range("Prix3").Value)
Range("Qté3").Value = r3
DoEvents ' calculs feuille
If Range("D7").Value > ValeurCible Then Exit For
Ecart = ValeurCible - Range("D7").Value
If Ecart >= 0 Then
If Ecart < EcartMini Then
EcartMini = Ecart
Range("B11").Value = EcartMini
Range("B12").Value = r1
Range("B13").Value = r2
Range("B14").Value = r3
End If
End If
If Ecart = 0 Then
bExactFound = True
Exit For
End If
Next r3
If bExactFound Then Exit For
Next r2
If bExactFound Then Exit For
Next r1
End Sub
Lameche15
Messages postés156Date d'inscriptionmardi 9 septembre 2008StatutMembreDernière intervention15 septembre 2022 19 févr. 2013 à 09:22
Et non, malheureusement on ne connait pas à l'avance la composition du tableau, ni le nombre d'opération ni la répartition par type d'opération.
Mais vous avez raison, un calcul manuel est préférable, je voulais juste faire un peu de zèle car il n'y a pas un gros enjeu. Mais je ne baisserai pas les bras je trouverai la solution meme si je dois faire 50 boucles imbriquées.
Merci à tous pour votre aide.
Ceux que ça interesse, je joins le tableau en question.
[C:\Guemeche\SUIVI BE DUCLOS\tableau suiv général.xls Tapez le texte de l'url ici.]