Comparaison de valeurs aléatoires d'une cellule à l'autre
Bonjour à tous,
J'ai un petit soucis, si certains personnes ont le temps de m'aider ce serait vraiment génial, je vous explique mon problème :
En gros j'ai un tableau avec : désignation / Quantité / Prix unitaire / Prix totall (tout ce qu'il y a de plus classique)
Je dois en plus rajouter un ligne de prix unitaire qui augmente de façon àléatoire borné (par exemple, je souhaite augmenter une ligne de prix bornée entre 5 et 10 %) !! + un nouveau prix total.
Jusque la pas de problème.
CEPENDANT, certains produits de même gamme (exemple voiture ; une DS3, DS3 + options ...), vous êtes d'accord que la DS3 avec option ne peut pas être moins chère que la DS3 sans option. Voici donc mon problème.=> En créant une nouvelle liste de prix unitaires variant aléatoirement, certains produits peuvent devenir moins chère que d'autres, et celà je ne le veux pas !!!
Je pense donc passé par un programme en VBA.
Je vous montre en gros ce que j'ai fais :
- Pour avoir des nouveaux prix aléatoire j'ai utilisé : ALEA.ENTRE.BORNES(C6+K6*C6;C6+L6*C6) (c'est un exemple, on posera par exemple K6 = 10% et L6=15%, notre nouveau prix sera donc augmenter d'une valeur aléatoire comprise entre +10% du prix initial et +15% du prix initial.
Pour le code VBA, je début, j'ai écrit cela :
sub boucle_do_while()
Dim val As Integer
Set val = Range("E6") // La case précédente que je dois absolument dépasser
Dim val2 As Integer
Set val2 = Range("E7") // La case sur laquelle ce code agit. E7 DOIT ETRE SUPERIEUR A E6
Do Until val2 <= val
val12 = ALEA.ENTRE.BORNES("C7" + "K7" * "C7", "C7" + "L7" * "C7")
Loop
End Sub
Au final, un autre problème devra être traité, le totalBIS devra être à x% du total initial ^^
Chaud chaud chaud )
Cela ne compile pas, et je doute que cela puisse fonctionner, je débute sérieusement en la matière )
Je vous remercie d'avance si vous avez des solutions à me proposer.Fichiers joints
Bonsoir,
Essaies cette formule en lieu et place en E5 et recopie en dessous.
Cdlt
=ALEA.ENTRE.BORNES(C5*(1+K5);C5*(1+L5))Bonjour,
Dim val As Integer
Set val = Range("E6")
on met Set lorsque c'est l'objet qu'on veut (le range), or tu l'as déclaré en integer. Set à enlever
tu déclares val2 et plus loin tu utilises val12 (d’où l'intérêt de mettre Option Explicit au début de chaque feuille. Paramétrable dans les options pour que ce soit automatique)
val12 = ALEA.ENTRE.BORNES("C7" + "K7" * "C7", "C7" + "L7" * "C7")
Si tu fais référence à des cellules c'est [C7] ou range("C7")
Et pour utiliser ALEA.ENTRE.BORNES j'imagine mieux :
val12 = Evaluate("ALEA.ENTRE.BORNES(5, 8)")
Et ça ne marchait pas tu dis ? Hé bé, étrange...
Il reste peut-être des erreurs, je n'ai rien testé.
eric
Merci pour ces renseignements, malheuresement ca ne fonctionne pas, je pense que je dois mal écrire ma lignre de code.
La voici :
Sub aleatcontrol()
Dim val As Integer
val = Range("E6")
Dim val2 As Integer
val2 = Range("E7")
Do Until val2 < val
val2 = Evaluate("ALEA.ENTRE.BORNES([C7]+[K7]*[C7];[C7]+[L7]*[C7])")
Loop
End Sub
La ca ne compile plus ^^.
Autre problème, le nouveau total est donc la somme de valeur aléatoire, cependant je veux qu'il fasse par exemple 12% de plus que le total de base.
Je souhaite donc savoir qu'elle serait la méthode, cela impliquerait un recalcul des valeurs aléatoires pour que la somme de ces valeur (le nouveau total donc) soit également = à la valeur total augmentée de 12¨%
Pas évident évident :p
Bonjour,
Dans Evaluate() il faut fournir les fonctions en anglais.
Comme en plus alea.entre.bornes() fait partie de l'utilitaire d'analyse sur 2003 tu multiplies les difficultés.
Calcule toi même en utilisant rnd() :
lig=7
val2 = INT((Rnd()*((cells(lig,"L")+1)-cells(lig,"K"))+cells(lig,"K")))
J'ai mis int() pour retourner un entier comme alea.entre.borne() mais vu que dans K7=0.1 et L7=0.6 tu n'obtiendras que 0 ou 1...
Mais plutôt que de faire une usine à gaz tu ne peux pas organiser tes données autrement ?
Avoir des lignes pour tous les articles et options, et des lignes pour des packs : Art1+Option1+Option2.
Ca sera beaucoup plus simple à gérer, même plus besoin de vba.
eric