VBA chiffre aleatoire
Résolu/Fermé
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
-
20 janv. 2015 à 21:52
wave13960 Messages postés 25 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 21 mai 2015 - 1 avril 2015 à 20:31
wave13960 Messages postés 25 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 21 mai 2015 - 1 avril 2015 à 20:31
A voir également:
- VBA chiffre aleatoire
- Excel trier par ordre croissant chiffre - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Clavier iphone chiffre et lettre - Guide
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Vba attendre 1 seconde ✓ - Forum VB / VBA
6 réponses
PipoWIL
Messages postés
20
Date d'inscription
lundi 5 mai 2014
Statut
Membre
Dernière intervention
19 juin 2022
2
20 janv. 2015 à 22:01
20 janv. 2015 à 22:01
essaye ceci :
=2*(1+ROUND(RAND();0))
=2*(1+ROUND(RAND();0))
Utilisateur anonyme
20 janv. 2015 à 22:03
20 janv. 2015 à 22:03
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.
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.
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
20 janv. 2015 à 22:06
20 janv. 2015 à 22:06
Bonsoir Wave, bonsoir le forum,
Peut-ête comme ça :
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
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
21 janv. 2015 à 13:28
21 janv. 2015 à 13:28
c'est ce que j'ai fait à quelque chose près, merci !
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
21 janv. 2015 à 13:18
21 janv. 2015 à 13:18
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 ?
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
Modifié par pijaku le 21/01/2015 à 15:31
Modifié par pijaku le 21/01/2015 à 15:31
voici ma solution (pour les intéressés):
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
21 janv. 2015 à 15:26
21 janv. 2015 à 15:26
Bonjour,
Ce code, pour le cas ou tu tires 3, tourneras en boucle infinie.
Je te prépares une petite réponse un peu plus étoffée.
Ce code, pour le cas ou tu tires 3, tourneras en boucle infinie.
Je te prépares une petite réponse un peu plus étoffée.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
21 janv. 2015 à 15:35
21 janv. 2015 à 15:35
j'ai maintenant un autre problème, je le poste sur ce sujet ou j'en créer un autre ?
Si le problème est différent postez un nouveau sujet.
Si le problème est différent postez un nouveau sujet.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
21 janv. 2015 à 15:35
21 janv. 2015 à 15:35
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.
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.
Il eut fallut utiliser :
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
Utilisateur anonyme
21 janv. 2015 à 20:20
21 janv. 2015 à 20:20
Bien sur Whis, je ne parlais que des deux solutions en code présentées ici.
D'ailleurs, la tienne, je l'écrirais demain matin, poour compléter.
Bon, il est vrai qu'elle sera peut être un peu plus longue, VBA oblige, mais ce sera fait.
Bonne soirée.
A+
D'ailleurs, la tienne, je l'écrirais demain matin, poour compléter.
Bon, il est vrai qu'elle sera peut être un peu plus longue, VBA oblige, mais ce sera fait.
Bonne soirée.
A+
Utilisateur anonyme
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
21 janv. 2015 à 21:06
21 janv. 2015 à 21:06
Bonne soirée à toi aussi!
--
--
wave13960
Messages postés
25
Date d'inscription
samedi 12 juillet 2014
Statut
Membre
Dernière intervention
21 mai 2015
1 avril 2015 à 20:31
1 avril 2015 à 20:31
merci bcp ! (dsl pour le retard)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
Modifié par pijaku le 22/01/2015 à 07:56
Modifié par pijaku le 22/01/2015 à 07:56
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.
Ce qui nous amène, bien entendu, à une autre solution, avec Split :
Les deux peuvent bien sur être "raccourci" pour les codeurs fainéants des doigts, comme moi. Exemple pour le second :
🎼 Cordialement,
Franck 🎶
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 🎶