Simulation de Marché VBA

Bonjour à toutes et à tous,

Je suis semi-débutant en VBA excel, je comprends la logique du systême et j’ai fait quelques expériences en dehors de mes cours (gestion de base de données notamment), et je souhaiterais créer une sorte de jeu de simulation via VBA. Par plaisir/curiosité et en vue de développer mes compétences Excel. Je souhaiterais y aller progressivement donc je ne me lance pas dans des histoires d’IA, car cela serait dans un stade plus évolué du projet. J’ai souvent bien été aidé par ce forum donc je décide enfin de poster car j’ai quelque chose de très spécifique en tête mais surtout qui mélange beaucoup de choses. Je vais donc essayer de détailler un maximum, j’ai déjà créé l’interface donc n’hésitez pas à le mettre en parallèle : (pas de jugements sur les détails svp...)

On démarrerait le jeu avec une somme d’argent (en cellule A2). Une série de produits (5), seraient disponible à la vente. On pourrait donc acheter une quantité de produits, limitée bien sûr par le montant de fonds disponibles. On pourrait ensuite créer de nouveaux produits grâce à ces produits (cf liste des combinaison). Ces derniers pouvant être revendus et ainsi faire une boucle d’achats/vente.

Aucun intérêt réel jusque-là !

La partie intéressante du code et du jeu serait de faire en sorte que les prix varient selon les jours. On cliquerait sur le bouton « Actualiser le Marché » chaque jour pour que les prix soient différents et donc corser le jeu un minimum. En mieux, on pourrait actualiser le marché toutes les 15/30minutes pour ainsi rendre le jeu moins monotone.

Je vais maintenant essayer de décrire les fonctions de chaque bouton, même si je me doute que ça peut paraitre logique pour certains étant donné la simplicité du concept (simplicité relative) :

Acheter : rentrer le nombre de produits qu’on souhaite acheter, envoyer chaque valeur dans la colonne inventaire correspondante, et sauvegarder cette valeur pour qu’elle puisse s’additionner lors d’un nouvel achat. Chaque valeur serait aussi multipliée par le prix correspondant de la colonne prix, le tout additionné et soustrait à la case des fonds disponibles. Si le montant est supérieur à la case fond alors un message s’affiche pour dire « fonds insuffisant ».

Revendre : effet inverse d’au-dessus, on choisit le nombre d’objets qu’on veut revendre. Le nombre choisit est déduit de l’inventaire pour chaque objet, et chaque nombre multiplié par son prix de revente (pour l’instant le prix d’achat, mais on peut imaginer une colonne prix de revente qui pourrait aussi varier chaque intervalle de temps), pour être ensuite additionné et ajouté à la case fond.

Démarrer production : en se référant à la charte de production, choisir combien d’unité on veut produire pour chaque nouvel objet, et si le nombre d’objet est insuffisant un message s’affiche (pas forcément besoin d’être un message spécifique à l’objet manquant, juste dire « composants manquants »). Si toutes les conditions sont remplies pour chaque objet, le montant désiré est envoyé dans la case "Stock" correspondante.

Vendre production : comme pour l’autre bouton revendre, en se referrant à la deuxième charte de prix.

Maintenant les changements de prix du marché, voilà comment je vois les choses :

On dit que pour chaque jour+1, une valeur au hasard est choisie pour chaque produit. Cette valeur serait choisie au hasard dans un intervalle précis, l’écart variant selon les produits. Le prix de la bière serait entre 0.80 et 3.99 alors que celui de la vodka entre 9.99 et 40. Idem pour les combinaisons d’objets, sauf que l’intervalle serait une addition de chaque extrême prix des objets concernés, histoire de rester logique un minimum.

Je suis tombé sur un code sur ce forum qui choisit un nombre au hasard automatiquement toutes les 45 secondes, ça aurait été parfait mais ça plantait en disant que mon fichier ne prenait pas en compte les macros (le fichier ci joint).

Pour l’instant je trouve le truc assez complexe comme ça, mais dans le futur j’aimerais bien faire une IA avec 1 ou 2 autres acteurs économiques, faire varier les prix du marché en fonction des actions de chacun etc… (eh oui il faut bien se mettre des défis)

Pour le code, j’ai quelques idées sur l’ensemble, à base de Si imbriqués, de lancer de dés et des messagebox super fun, mais je calle sur quelques trucs comme la sauvegarde de la valeur dans les cases pour additionner les produits achetés, sans parler de l’actualisation du marché ni de la multiplication entre la valeur rentrée dans le Userform et la valeur d’une cellule du tableau.

Je vous envoie le fichier au niveau 0 pour que chacun laisse libre cours à son talent, je fais mes expériences de mon côté !

Un grand merci d’avance à ceux qui ont déjà pris le temps de lire le pavé et à ceux qui souhaiteraient s’impliquer dans le projet ! D’ailleurs toute idée d’amélioration sera accueillie par un bon café et un grand sourire, sans oublier ma reconnaissance éternelle !

Cordialement,

Gabriel

Salut à tous et à toutes!

Le projet ci-dessus avance plutot bien. J'ai joint le fichier, qui est assez bordélique je vous l'accorde, mais marche pour la plupart des fonctions. En gros chaque formulaire renvoie à des nouvelles feuilles pour pouvoir traiter individuellement chaque donnée, puis jouer sur des formules pour le reste. Pour le sommaire ca donne:

Macro:Interface

Sheet1:Quantité produits acheté

Sheet2:Quantité produits vendus

Sheet3:historique des variations de prix

Sheet4: production de molotov

Sheet5:Conditions d'applications de productions de nouveaux produits

Sheet6:Production de Vomi

Sheet7: Production de chiffons en feu

Sheet8: Revente de nouvelle production

Maintenant, il me manque la dernière étape mais la plus importante: faire intéragir les prix avec les quantités.

Donc pendant un intervalle de temps x on acheterait et revendrait des produits aux mêmes prix. Le problème est qu'on ne peut pas faire total des prix* total des quantités, parce que chaque ligne d'achat ne correspond pas à une ligne de prix unique, autrement dit on pourrait avoir 10 lignes d'achat pour une même ligne de prix. J'aimerais arriver à isoler ces lignes de prix pour qu'elles s'appliquent uniquement aux achats effectués pendant l'intervalle x, et recommencer l'opération à chaque pression du bouton "Actualiser le marché."

"edit" j ai ajouté le bouton annulé, en cas de non validation des conditions en Sheet5, qui permet d'annuler la demande précédente

J'ai commencé en essayant qu'à chaque pression du bouton, le total des fonds sur un intervalle de prix (benefices net, donc achats-ventes) soit comptabilisé dans une nouvelle feuille pour ensuite faire une belle grosse somme en B1.

Des idées?

Un grand merci d'avance encore pour vos réponses, et pour le forum en général qui m'a bien aidé !

Gabriel

Rechercher des sujets similaires à "simulation marche vba"