Aléa entre quatre bornes en vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

13GIBE59

XLDnaute Accro
Bonjour le forum. 🙂

Je cherche la syntaxe vba pour réaliser un tirage aléatoire de nombres entiers situés entre quatre bornes.
Je m'explique :
Entre deux bornes, c'est facile : pour les bornes a et b (avec a > b) :

=Int ((a-b+1)*Rnd + b)

Je souhaite réaliser un tirage aléatoire de nombres entiers entre les bornes a et b et/ou les bornes c et d (avec bien sûr c > d et c # b+1, sinon ça serait trop simple...)

Est-ce possible ?
Merci d'avance.

Si je ne m'abuse, ça c'est un problème pour Roger2327, mon mathématicien préféré...😀
 
Re : Aléa entre quatre bornes en vba

Bonjour Gilbert et pierrejean. 😛

Gilbert, ta fonction ne marche pas chez moi, peut-être parce qu'elle est en anglais. En tout état de cause, je cherche la solution par vba.
Merci quand même.

Pierrejean, tu y es presque. Mais ta syntaxe me crée un tableau, et c'est normal. En fait je veux juste une valeur aléatoire comprise entre les valeurs 33 et 47 et 58 et 63, qui sont les codes ascii des caractères spéciaux qui m'intéressent. (C'est pour créer un générateur de code secret).
Peut-on modifier ton code ?
Re-merci.
 
Re : Aléa entre quatre bornes en vba

Bonjour à tous,

Pas beaucoup de math dans cette solution :

Code:
Private Sub CommandButton1_Click()
Dim mini As Double, maxi As Double, alea As Double
[A2] = Application.Min(Int(Abs([A2])), Int(Abs([B2])))
[B2] = Application.Max(Int(Abs([A2])), Int(Abs([B2])))
[A4] = Application.Min(Int(Abs([A4])), Int(Abs([B4])))
[B4] = Application.Max(Int(Abs([A4])), Int(Abs([B4])))
mini = Application.Min([A2], [B2], [A4], [B4])
maxi = Application.Max([A2], [B2], [A4], [B4])
1 alea = Int((maxi - mini + 1) * Rnd + mini)
If Not (alea >= [A2] And alea <= [B2] Or alea >= [A4] And alea <= [B4]) Then GoTo 1
[B6] = alea
End Sub

A+
 

Pièces jointes

Re : Aléa entre quatre bornes en vba

Bonjour Job.

Comme d'hab (de mémoire ce n'est pas la première fois que je te dis ça) :
good job ! 😀

Merci beaucoup à toi et à tous ceux qui se sont penchés sur mon problème (pierrejean, gilbert).

Bon après-midi à tous (pluvieux chez moi).
 
Re : Aléa entre quatre bornes en vba

Re

Salut Job

@ Jean-Bernard

Ma fonction ne sort pas un tableau mais bien un nombre (le nieme du tablo)
Pour t'en convaincre j'ai créé un sub tirage actionnée par le bouton du même nom
tu verras elle ne sort qu'un nombre

@ Job

Si je peux me permettre il faudrait peut-etre specifier que les cellules A2 B2 B2 B4 sont sollicitées et donc plus disponibles
Pourquoi ne pas avoir utilisé des Variables ?
 

Pièces jointes

Dernière édition:
Re : Aléa entre quatre bornes en vba

Re

Salut Job

@ Jean-Bernard

Ma fonction ne sort pas un tableau mais bien un nombre (le nieme du tablo)
Pour t'en convaincre j'ai créé un sub tirage actionnée par le bouton du même nom
tu verras elle ne sort qu'un nombre

c'est juste PierreJean et salutations au passage

mais c'est ce qui arrive quand on veut quelque chose et que l'on ne donne pas plus d'explications sur ce que l'on désire
 
Re : Aléa entre quatre bornes en vba

Re,

Ma macro n'était pas parfaite 😉

Code:
Private Sub CommandButton1_Click()
Dim mini As Double, maxi As Double, alea As Double
mini = Application.Min(Int(Abs([A2])), Int(Abs([B2])))
maxi = Application.Max(Int(Abs([A2])), Int(Abs([B2])))
[A2] = mini
[B2] = maxi
mini = Application.Min(Int(Abs([A4])), Int(Abs([B4])))
maxi = Application.Max(Int(Abs([A4])), Int(Abs([B4])))
[A4] = mini
[B4] = maxi
mini = Application.Min([A2], [A4])
maxi = Application.Max([[B2], [B4])
1 alea = Int((maxi - mini + 1) * Rnd + mini)
If Not (alea >= [A2] And alea <= [B2] Or alea >= [A4] And alea <= [B4]) Then GoTo 1
[B6] = alea
End Sub

A+
 

Pièces jointes

Dernière édition:
Re : Aléa entre quatre bornes en vba

Bonjour à tous
Juste pour le plaisir :
Code:
[COLOR="DarkSlateGray"][B]Function carSpec(a, b, c, d)
   Application.Volatile
   carSpec = Chr(a + Int((2 + b + d - a - c) * Rnd) - (c - b - 1) * (Int((2 + b + d - a - c) * Rnd(0)) > (b - a)))
End Function[/B][/COLOR]
Code:
[COLOR="DarkSlateGray"][B]=codeSpec(33;47;58;63)[/B][/COLOR]
renvoie l'un des caractères
! " # $ % & ' ( ) * + , - . / : ; < = > ?
Code:
[COLOR="DarkSlateGray"][B]Function codeSpec(a, b, c, d)
   Application.Volatile
   codeSpec = a + Int((2 + b + d - a - c) * Rnd) - (c - b - 1) * (Int((2 + b + d - a - c) * Rnd(0)) > (b - a))
End Function[/B][/COLOR]
Code:
[COLOR="DarkSlateGray"][B]=carSpec(33;47;58;63)[/B][/COLOR]
renvoie l'un des nombres
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 58 59 60 61 62 63
ROGER2327
#2065
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
661
Réponses
34
Affichages
2 K
E
Réponses
2
Affichages
1 K
Edouard :)
E
Retour