Comment faire: code VBA pour choix au hasard et a l'infini
PierreLucbert40
Messages postés3Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention 4 février 2008
-
1 févr. 2008 à 05:37
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010
-
4 févr. 2008 à 10:18
Bonjour,
Je travaille sur Excel, avec VBA. Je souhaite dans une case, choisir un nombre au hazard entre 0 et 50, attendre 3 ou 4 secondes (bref, un petit moment, peut importe entre 3 ou 4 ou 5) puis refaire automatiquement cette selection au hazard et ainsi de suite a l’infini.
Voila le code correct pour la selection au hazard: Range("A1").Select
ActiveCell.FormulaR1C1 = "=ROUND(RAND()*50,0)"
Je souhaiterai donc savoir comment faire pour repeter cette formule a l’infini avec qqs secondes d’attente entre chaque repetitions?
Ensuite comment faire pour que la macro se lance losque j’ouvre le fichier excel, quel code dois-je rentrer?
Je vous remercie d’avance,
pierre
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010 1 févr. 2008 à 13:51
Salut,
Tu ne pourra pas la répéter à l'infini vu qu'il n'existe pas !!! on ne peut pas l'atteindre donc informatiquement ça va te donner un joli plantage !!!
Sinon si tu veux te rapprocher de celui-ci, utilise un compteur avec une variable en Double pour une grosse capacité
Pour démarrer à l'ouverture du classeur utilise l'évènement Private Sub Workbook_Open() dans This workbook
si tu veux attendre quelques secondes, mets une tempo au début de ta macro, je connais pas la commande mais tu vas trouver ça dans l'aide.
voilà
PierreLucbert40
Messages postés3Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention 4 février 2008 4 févr. 2008 à 01:17
Sll,
G essayer vos recommandations. ca marche desormais mais au bout de 37 loops, ca beug!! le message suivant apparait: Run-time error'28': Out of stack space. Comment dois-je faire pour que cela marche bcp plus longtemps? J'ai refait l'experience sur une feuille vierge, juste place en A1 la formule suivante: =ROUND(RAND()*362,0) et replace la macro et c la meme chose: apres 37 loops, ca beug !! donc ce n'est pas un pb de place ou de gros fichier!!
Si vous pouviez m'aider, encore merci d'avance
pierre
Vous n’avez pas trouvé la réponse que vous recherchez ?
PierreLucbert40
Messages postés3Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention 4 février 2008 4 févr. 2008 à 01:22
Slt Frederick 45,
merci pour ta reponse mais je suis vraiment novice en programmation de macro donc je ne voit pas trop comment utiliser ton conseil. Pourrais tu me donner un exemple concret concernant mon cas stp? Ou dois-je placer ma formule: Range("A1").Select ActiveCell.FormulaR1C1 = "=ROUND(RAND()*50,0)" ?
merci d'avance
pierre
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 4 févr. 2008 à 03:03
Pour répondre à ta question et celle que tu m'as laissée en MP, voici le code que je viens d'essayer avant d'écrire ce message.
Sub OnRecommence()
Dim Var As Double
If Range("B1") = "OK" Then Exit Sub 'pour arrêter, écris OK en B1
Var = Timer
Do While Timer - Var < 3 'C'est le Timer, en quelque sorte...
DoEvents
Loop
Range("C1") = Range("C1") + 1 'sert de compteur
'inscrit une valeur aléatoire en A1
Range("A1").Value = WorksheetFunction.Round(Rnd() * 50, 0)
OnRecommence 'appel récursif
End Sub
J'ai rajouté un compteur en C1 pour voir jusqu'ou ça irait ou pour voir si ça créerait un dépassement de capacité comme tu sembles avoir ... et je me suis arrêté quand le compteur a atteint 700 (* 3 secondes...)
Donc, pour comprendre le pourquoi de ton erreur, il faudrait qu tu nous donnes le code que tu utilises. Autrement, je ne vois pas (?)
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010 4 févr. 2008 à 10:18
Bonjour à tous
Bonjour Pierre
Pour répondre à ta question et celle que tu m'as laissée en MP, voici le code que tu dois placer dans un module :
Sub tempo()
Range("a1").Value = Int((50 * Rnd))
If Range("b1").Value < 10 Then Application.OnTime Now + TimeValue("00:00:03"), "tempo"
Range("b1").Value = Range("b1").Value + 1
End Sub
J'ai ajouté :
- le compteur en B1
- un tempo de 3 secondes
- "If Range("b1").Value < 10 ...." pour stoper la macro
et un rnd de 0 à 50
Dans le cas présent, tu risques d'avoir des doublons.