Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recalcul de nombres aléatoires différents

6 réponses
Avatar
Pouks
J'utilise la fonction alea() afin de générer une liste de nombres (Ex:
1-100). Est-ce que quelqu'un connait un moyen pour que la page de calcul me
retourne seulement des résultats différents ? J'avais pensé la jumeler à une
fonction si() et donner comme consigne un recalcul si 2 résultats sont
identiques, mais je doute qu'une commande puisse ordonner un recalcul...

Toute aide sera grandement appréciée.

6 réponses

Avatar
Philippe.R
Bonjour,
La fonction si() ne provoquera effectivement pas le recalcul ; une piste
peut être avec :
http://www.excelabo.net/excel/comparerdiv.php#valeursuniques
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Pouks" a écrit dans le message de
news:
J'utilise la fonction alea() afin de générer une liste de nombres (Ex:
1-100). Est-ce que quelqu'un connait un moyen pour que la page de calcul
me
retourne seulement des résultats différents ? J'avais pensé la jumeler à
une
fonction si() et donner comme consigne un recalcul si 2 résultats sont
identiques, mais je doute qu'une commande puisse ordonner un recalcul...

Toute aide sera grandement appréciée.


Avatar
Francois L
Pouks a écrit :

Bonjour,

Il me semble que la macro suivante fait ce que tu veux...
'----------------------------
Sub alea_sans_doublons()
Dim ValMax As Long, DerCel As Long, ValBase As Long, MyVal As Long
ValMax = 100 ' Valeur Max (+1)
DerCel = 75 ' Nb de cellules
' Test de cohérence
If DerCel >= ValMax Then
MsgBox "Erreur de parametres," & Chr(13) & _
"Le nombre de cellules demandées est supérieur au nombre de valeurs
distinctes possibles"
Exit Sub
End If
' Ecriture de la première cellule (A1)
ValBase = Int(Rnd() * ValMax)
Range("A1") = ValBase
' Ecriture des cellules suivantes avec test
For i = 2 To DerCel
Calcul:
MyVal = Int(Rnd() * ValMax)
Range("A" & i) = MyVal
If Application.WorksheetFunction.CountIf(Range("A1:A" & i), MyVal) > 1 Then
GoTo Calcul
Else
End If
Next
End Sub
'-----------------------------------

François L


J'utilise la fonction alea() afin de générer une liste de nombres (Ex:
1-100). Est-ce que quelqu'un connait un moyen pour que la page de calcul me
retourne seulement des résultats différents ? J'avais pensé la jumeler à une
fonction si() et donner comme consigne un recalcul si 2 résultats sont
identiques, mais je doute qu'une commande puisse ordonner un recalcul...

Toute aide sera grandement appréciée.


Avatar
LE TROLL
Bonjour,

Est-ce que ça, ça marche, c'est du VB ?

NOMBRE PSEUDO ALEATOIRES génération de nombres
aléatoires
Nombre entier entre 1 et 100 avec un pas de 1

Dim hasard As long
Randomize
hasard = Int((maxi - mini + 1) * Rnd + mini)
Pas de 1

Si ça ne fonctionne pas, suffit pour faire un
nombre aléatoire, de prendre les secondes en les
multipliant par les minutes, puis en délimitant le
bornages du résultat... ou un truc de ce genre....


Pour ne pas avoir deux fois le même nombre, tu
peux par exemple faire une structure avec liste
(plus simple qu'avec variable indicé):

list1.clear
dim hasard as long
dim i as long
bis:
hasard = génération_nombre_pseudo_aléatoire
for i = 0 to list1.listcount-1
if list1.list(i) = hasard hten goto bis
next i
list1.additem hasard
list1.refresh
' suite de ton code
---
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------





"Pouks" a écrit
dans le message de news:

| J'utilise la fonction alea() afin de générer une
liste de nombres (Ex:
| 1-100). Est-ce que quelqu'un connait un moyen
pour que la page de calcul me
| retourne seulement des résultats différents ?
J'avais pensé la jumeler à une
| fonction si() et donner comme consigne un
recalcul si 2 résultats sont
| identiques, mais je doute qu'une commande puisse
ordonner un recalcul...
|
| Toute aide sera grandement appréciée.
Avatar
Modeste
Bonsour® Pouks avec ferveur ;o))) vous nous disiez :

J'utilise la fonction alea() afin de générer une liste de nombres (Ex:
1-100). Est-ce que quelqu'un connait un moyen pour que la page de
calcul me retourne seulement des résultats différents ? J'avais pensé
la jumeler à une fonction si() et donner comme consigne un recalcul
si 2 résultats sont identiques, mais je doute qu'une commande puisse
ordonner un recalcul...

Toute aide sera grandement appréciée.



A1= Alea()
B1=rang(A1;$A$1:$A$100)
recopier jusqu'en ligne 100

--
--
@+
;o)))
Avatar
Pouks
Merci du coup de main tout le monde. Je prends en note toutes ces
suggestions, je vais pouvoir en apprendre plus à propos des macros etc, mais
compte tenu de mes connaissances actuelles, les méthodes les plus simples
sont les meilleures. J'adopte donc la solution de "Modeste" qui fonctionne à
merveille.

Merci encore.
Avatar
Francois L
Pouks a écrit :
Merci du coup de main tout le monde. Je prends en note toutes ces
suggestions, je vais pouvoir en apprendre plus à propos des macros etc, mais
compte tenu de mes connaissances actuelles, les méthodes les plus simples
sont les meilleures. J'adopte donc la solution de "Modeste" qui fonctionne à
merveille.

Merci encore.



Re,

Eh oui, modeste et génial, comme d'hab

--
François L