VBA chiffre aleatoire
Résolu
wave13960
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
wave13960 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
wave13960 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
beaucoup de post ont été posté à ce sujet, mais mon cas est plus particulier :
je souhaite avoir, par l'intermediare du VBA, un chiffre aléatoire, mais soit 2, soit 4, auriez vous des réponses ?
PS : je tourne sous excel 2010
beaucoup de post ont été posté à ce sujet, mais mon cas est plus particulier :
je souhaite avoir, par l'intermediare du VBA, un chiffre aléatoire, mais soit 2, soit 4, auriez vous des réponses ?
PS : je tourne sous excel 2010
6 réponses
-
-
Bonsoir, tu n'as pas du bien chercher.
J'ai répondu à ce type de question il n'y a pas bien longtemps.
Tu fais un tableau de 2 enregistrements 2 et 4.
Ensuite tu tires aléatoirement entre 0 et 1 qui sont les indices du tableau.
-
Bonsoir Wave, bonsoir le forum,
Peut-ête comme ça :
Sub Macro1() Dim CA As Byte Randomize Do CA = Int(3 * Rnd + 2) Loop Until CA <> 3 MsgBox CA End Sub
-
merci tout le monde, je viens de trouver une solution ; ) qui marche, j'ai maintenant un autre problème, je le poste sur ce sujet ou j'en créer un autre ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour tout le monde,
Mes meilleurs voeux.
La bonne réponse est celle de ThauThème que je salues.
J'ajouterai, juste pour être ch*ant, Timer après randomize.
Sub Macro1() Dim CA As Byte Randomize Timer Do CA = Int(3 * Rnd + 2) Loop Until CA <> 3 MsgBox CA End Sub
Pourquoi la solution de wave13960 ne fonctionne pas.
Pour deux raisons :
1- GoTo, en VBA n'est à utiliser que pour le traitement d'erreur.
Il peut être utilisé car il existe, mais, en cas de plusieurs utilisations, on se retrouve avec un code Spaghetti (nommé ainsi car l'entremêlement des lignes de codes fait penser à un tas de ces pâtes...). Pour preuve, les nouveaux "créateurs" de virus via macro utilisent un code composé essentiellement de Goto pour tromper leur monde.
Autant prendre de bonnes habitudes et l'éviter.
2- Le GoTo de wave13960 ne renvoie pas au bon endroit car il ne recalcule pas le chiffre aléatoire.Dim Nb As Integer Randomize Nb = Int(Rnd() * 3) + 2 Nombre_aléatoire: If Nb <> 3 Then Cells(Ligne, Colonne).Value = Nb Else GoTo Nombre_aléatoire
Il eut fallut utiliser :Dim Nb As Integer Randomize Nombre_aléatoire: Nb = Int(Rnd() * 3) + 2 If Nb <> 3 Then Cells(Ligne, Colonne).Value = Nb Else GoTo Nombre_aléatoire
-
Bonjour,
Comme promis hier à Whismeril, voici sa façon de faire mise en code VBA. Contrairement à ce que j'ai annoncé hier, c'est plus court et plus direct.
Dim Tabl(1) As Byte, Resulta As Byte Tabl(0) = 2 Tabl(1) = 4 Randomize Timer Resulta = Tabl(Round(Rnd()))
Ce qui nous amène, bien entendu, à une autre solution, avec Split :
Dim MesVal As String, Separ As String, Resulta As Byte MesVal = "2-4" Separ = "-" Randomize Timer Resulta = Split(Str, sep)(Round(Rnd()))
Les deux peuvent bien sur être "raccourci" pour les codeurs fainéants des doigts, comme moi. Exemple pour le second :
Dim Resulta As Byte Randomize Timer Resulta = Split("2-4", "-")(Round(Rnd()))
🎼 Cordialement,
Franck 🎶