Amélioration d'un fichier Excel grace à VBA
Bonsoir à tous,
Il y a quelques temps, sur ce forum, un membre m'a aidé pour réaliser un code VBA pour générer automatiquement des chiffres compris entre 2 et 3 (et je l'en remercie encore).
Le lien est celui-ci : https://forum.excel-pratique.com/post188050.html?hilit=iching#p188050
Après quelques temps, je souhaiterais faire évoluer ce fichier excel, mais je ne connais pas plus le VBA qu'à l'époque.
J'ai donc mis le fichier en pièce jointe pour celui ou celle qui voudrait bien m'aider (je pense trouver la bonne personne sur ce forum). J'ai également fait un screenshot pour une explication beaucoup plus simple car je pense que ce qui suit ne sera pas forcément clair, alors que je pense que la solution peut être simple.
Voici donc ma problématique (je vais essayer de ne pas faire long tout en donnant un max d'info).
Le fichier excel permet de faire un tirage de iching et d'en connaitre l'interprétation. Le tirage disponible (grâce à l'un des membres), génère aléatoirement trois cellules soit avec un chiffre 2 soit avec un chiffre 3. Pour un bon tirage de iching, il faut faire le calcul de ces trois cellules, le tout à 6 reprises (soit 6 lignes). En Iching, un total de 6 ou de 9 se dit "mutant" et un total de 7 ou de 8 se dit "non mutant". En iching toujours, il existe plusieurs types de tirage : d'abord celui que je viens de vous citer où l'on peut avoir plusieurs "mutant" (total de 6 ou 9) et un autre tirage où l'on ne peut avoir qu'un seul "mutant".
Est-il possible d'avoir une fonction qui permet de choisir entre ces deux tirages ? Et si oui, est-il possible pour le second type de tirage d'avoir la possibilité de calculer aléatoirement 3 cellules et si un 6 ou un 9 est déjà calculer précédement, qu'il refasse la génération d'un 2 ou d'un 3 jusqu'à temps d'avoir qu'un résultat de 7 ou de 8 ?
C'est un peu compliqué ce que j'explique, surtout quand on ne connait pas le iching, j'en suis conscient. Si quelqu'un est d'accord pour m'aider mais ne comprends pas tout, je suis disponible sur skype.
En tout cas, merci pour votre aide
Bonjour,
si j'ai bien compris :
Sub Tirage()
Dim Ligne As Long, fini As Boolean
Dim I As Integer
Randomize
'Set Sh = ActiveSheet.Shapes(Application.Caller)
Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Do While Not fini
For I = 2 To 4
' Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Cells(Ligne, I) = Int((3 - 2 + 1) * Rnd + 2)
Next I
If Ligne > 10 Then
If Cells(Ligne - 1, "E") Mod 3 = 0 Then fini = Cells(Ligne, "E") Mod 3 <> 0 Else fini = True
Else
fini = True
End If
Loop
End Suberic
Bonjour,
Merci beaucoup pour ta réponse.
Je ne te cache ne pas bien comprendre le code que tu m'as fourni.
Que dois-je faire pour l'intégrer au fichier excel ?
ou
Peux-tu l'intégrer dans le fichier excel et le mettre en pièce jointe ?
Je te remercie pour ton aide
Ca y est, j'ai trouvé où le code se mettait.
Merci énormément pour ton aide, ça fonctionne !!!!!!!!!
Bonjour,
Je me permet de relancer ce sujet, car après quelques test plus approfondi, il apparaît que si la ligne 1 a un 6 ou 9, alors la ligne suivant ne pourra avoir qu'un 7 ou un 8. Donc ça c'est parfait.
Le problème étant que les lignes suivantes également doivent prendre la valeur 7 ou 8. Hors dans mon test, si la ligne 1 a un 6 ou 9, la deuxième ne pourra pas avoir ces valeurs mais les lignes suivantes peuvent l'avoir hors il ne faut pas.
Auriez-vous une idée ?
Merci pour votre aide.
Bonjour,
Uniquement si présent sur ligne 1 ou n'importe où ?
Par exemple si tu as un 6 en ligne 3, il n'en faut pas sur ligne 4 ou bien plus du tout pour toutes les lignes ?
Ca me fait penser que je n'ai pas pas mis de case à cocher pour le mode, il en faut une ?
eric
Bonjour Eriiic,
Merci pour ton aide.
N'importe oùUniquement si présent sur ligne 1 ou n'importe où ?
Si j'ai un 6 en ligne 3, il ne faut plus de 6 ou 9 aux lignes suivantes (ligne 4, ligne 5 et ligne 6). Autre exemple, si j'ai un 6 ou un 9 sur la ligne 1, alors il ne faut plus de 6 ou 9 sur les lignes suivantes (ligne 2, ligne 3, ligne 4, ligne 5, ligne 6)Par exemple si tu as un 6 en ligne 3, il n'en faut pas sur ligne 4 ou bien plus du tout pour toutes les lignes ?
En fait, j'ai fait plus simple, un classeur par mode, et j'ai créé un menu.Ca me fait penser que je n'ai pas pas mis de case à cocher pour le mode, il en faut une ?
Je te remercie encore pour ton aide précieuse
Bonjour,
Est-ce que quelqu'un aurait une idée ?
Je vous remercie par avance.
Bonjour,
un MP n'accélère pas les choses, j'ai une vie à coté tu sais...
Par contre soigner ses explications en étant clair et précis permet d'avoir la bonne réponse tout de suite lorsqu'on est pressé.
Je te rappelle ta demande :
Le bouton "4ème jeté" génère aléatoirement un 2 ou un 3 dans les cellules B13; C13 et D13. Hors, si l'on active l'option "Tirage mutant unique",et si E12 est égal à 6 ou 9, alors on regénère automatiquement les cellules B13; C13 et D13 jusqu'à temps que le total soit égal à 7 ou 8
Tu ne faisais référence qu'à la cellule précédente, pas à l'ensemble des tirages il me semble...
A tester :
Sub Tirage()
Dim Ligne As Long, fini As Boolean, lig As Long, mutant As Boolean
Dim I As Integer
Randomize
Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
' mutant ?
For lig = 10 To 15
If Cells(lig, "E") <> "" Then
mutant = Cells(lig, "E") Mod 3 = 0
If mutant Then Exit For
End If
Next lig
' tirage
Do While Not fini
For I = 2 To 4
Cells(Ligne, I) = Int(2 * Rnd + 2)
Next I
If mutant Then
fini = Cells(Ligne, "E") Mod 3 <> 0
Else
fini = True
End If
Loop
End Suberic
Bonjour Eriiic,
Je vous remercie pour votre réponse. Ça fonctionne. Merci beaucoup. C'est très gentil de votre part.
Pour être franc avec vous, je me suis permis d'envoyer un MP, non pas pour accélérer les choses car il s'agit d'un forum et vous n'avez aucune obligation de me répondre. Je pensais juste que vous n'aviez pas d'idée et je voulais m'en assurer.
Mais effectivement, vous avez trouver la solution et je ne voulais surtout pas vous déranger avec mon problème. Je vous présente donc mes excuses et vous remercie encore pour votre aide précieuse.