VSB :ajouter le contenu d'une cellule à une autre

peter45

XLDnaute Nouveau
Bonjour,
je tente de simuler le lancer d'un dé à 6 faces et de comptabiliser les lancers en Visual Basic.
Je ne parviens pas à ajouter le contenu des cellules D1 à D6 respectivement dans les cellules A11 à A16.
Pour voir ce qui cloche, appuyez alternativement sur Envoi et Raz dans le fichier joint à ce message.
Le numéro sorti n'apparaît pas correctement dans le tableau des effectifs.
 

Pièces jointes

  • 1 dé_pb.xls
    34 KB · Affichages: 77

kjin

XLDnaute Barbatruc
Re : VSB :ajouter le contenu d'une cellule à une autre

Bonsoir,
Supprimme ta formule Alea en B1
Supprimme la plage D1: D6 qui ne servira plus
Ajoute la formule en A17 --> =SOMME(A11:A16) puis modifie ton code
Code:
Sub test()
    Range("B1") = Int(Rnd * 6 + 1)
    Set C = Range("E1:E6").Find(Range("B1").Value)
    Range("A" & C.Row + 10) = Range("A" & C.Row + 10) + C.Value
  End Sub

Sub raz()
    Range("A11").Value = 0
    Range("A12").Value = 0
    Range("A13").Value = 0
    Range("A14").Value = 0
    Range("A15").Value = 0
    Range("A16").Value = 0
End Sub
A+
kjin
 

skoobi

XLDnaute Barbatruc
Re : VSB :ajouter le contenu d'une cellule à une autre

Bonsoir,

Si tu lance la macro tu verras que les calculs se font bien mais comme la formule contient "ALEA" (fonction volatile), ce nombre change à la fin quand tu repasse le calcul en auto, ce qui t'induis en erreur ;).

Je te propose ce code, sans prendre en compte D1:E6.

Code:
Sub test()
[B1].FormulaR1C1 = "=INT(RAND()*6+1)"
[B1].Value = [B1].Value
Cells([B1].Value + 10, 1).Value = Cells([B1].Value + 10, 1).Value + 1

End Sub

Edit: suis à la bourre moi!, hello kjin :)
 

peter45

XLDnaute Nouveau
Re : VSB :ajouter le contenu d'une cellule à une autre

Si tu lance la macro tu verras que les calculs se font bien mais comme la formule contient "ALEA" (fonction volatile), ce nombre change à la fin quand tu repasse le calcul en auto, ce qui t'induis en erreur ;).
Merci pour votre aide à tous les deux qui m'apprend davantage sur ce langage ; j'ai supprimé le retour en mode calcul auto dans mon script (Application.Calculation = xlCalculationAutomatic) et ça fonctionne. :eek:
Je vais cependant utiliser vos propositions car je dois exploiter les résultats dans un graphique, ce qui nécessite le remettre le mode auto.
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : VSB :ajouter le contenu d'une cellule à une autre

Bonjour, bonjour skoobi,
Pour compléter le fichier en supprimant également la colonne E comme proposé par skoobi.
A+
kjin
 

Pièces jointes

  • 1 dé_pb-1_V2.zip
    9.3 KB · Affichages: 49

peter45

XLDnaute Nouveau
Re : VSB :ajouter le contenu d'une cellule à une autre

Bonjour et merci,
j'ai un petit problème avec la simulation de deux dés : la commande
Code:
Range("F1:F11").Find(Range("B2").Value)
pose problème lorsque B2 prend la valeur 2 ; en fait, il retourne la dernière occurrence trouvée dans la liste, c'est-à-dire la cellule F11 qui contient 12. Je crois comprendre que la fonction Find() fait une recherche sur les caractères contenus dans les cellules et ne teste pas la valeur inscrite dans cette cellule.
J'ai bien su contourner le problème mais la solution ne me satisfait pas à cause de son inélégance d'une part et surtout par le fait qu'elle ne sera plus viable pour une plage de cellules plus importante :
Code:
If (Range("B2").Value > 2) Then Set C = Range("F1:F11").Find(Range("B2").Value) Else Set C = Range("F1")
J'apprécie également dans ton code de pouvoir simplifier la fonction raz avec une boucle.
 

Pièces jointes

  • 2 dé_simple.xls
    31.5 KB · Affichages: 63
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : VSB :ajouter le contenu d'une cellule à une autre

Re bonjour peter45, kjin,

Je crois comprendre que la fonction Find() fait une recherche sur les caractères contenus dans les cellules et ne teste pas la valeur inscrite dans cette cellule.
Il faut faire une recherche sur tout le contenu de la cellule (par défaut, la recherche est partielle). En reprenant la condition, ça donne:
Code:
If (Range("B2").Value > 2) Then Set C = Range("F1:F11").Find(Range("B2").Value[COLOR=Blue][B], lookat:=xlwhole[/B][/COLOR]) Else Set C = Range("F1")
La ça devrait aller mieux.
 

peter45

XLDnaute Nouveau
Re : VSB :ajouter le contenu d'une cellule à une autre

Merci Lii,
je préfère que les scores s'ajoutent car j'ai créé un histogramme qui permet de visualiser les scores réels avec les scores théoriques.
Je retiens ce forum pour sa réactivité.
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 506
Messages
2 089 126
Membres
104 040
dernier inscrit
pb91