OVH Cloud OVH Cloud

hasard dans excel

17 réponses
Avatar
HARPER BEN
bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400 série
de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?

10 réponses

1 2
Avatar
Philippe.R
Bonjour,
Ceci peut être, à télécharger :

http://disciplus.simplex.free.fr/classeursxl/gdybpr-lotos.zip
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"HARPER BEN" a écrit dans le message de news:
bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400 série
de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?



Avatar
Nicolas B.
Salut,

La macro suivante remplit les 7 colonnes de 400 lignes de la feuille sans
qu'il y ait deux fois le même nombre sur la même ligne :
Sub Loto()
Randomize
For i = 1 To 400
Cells(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Cells(i, k).Value Then a = Int(50 * Rnd): k = 0
Next
Cells(i, j) = a
Next
Next
End Sub


A+
--
Nicolas B.


bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400
série de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?


Avatar
docm
Boujour Nicolas.
Int(50 * Rnd) va donner un nombre entre 0 et 49.
Pour avoir un nombre entre 1 et 49, il faudrait utiliser Int(49 * Rnd) + 1.

Amicalement
Gérard

"Nicolas B." wrote in message
news:
Salut,

La macro suivante remplit les 7 colonnes de 400 lignes de la feuille sans
qu'il y ait deux fois le même nombre sur la même ligne :
Sub Loto()
Randomize
For i = 1 To 400
Cells(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Cells(i, k).Value Then a = Int(50 * Rnd): k = 0
Next
Cells(i, j) = a
Next
Next
End Sub


A+
--
Nicolas B.


bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400
série de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?






Avatar
Nicolas B.
Merci pour la correction :-)


A+
--
Nicolas B.


Boujour Nicolas.
Int(50 * Rnd) va donner un nombre entre 0 et 49.
Pour avoir un nombre entre 1 et 49, il faudrait utiliser Int(49 *
Rnd) + 1.

Amicalement
Gérard

"Nicolas B." wrote in message
news:
Salut,

La macro suivante remplit les 7 colonnes de 400 lignes de la feuille
sans qu'il y ait deux fois le même nombre sur la même ligne :
Sub Loto()
Randomize
For i = 1 To 400
Cells(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Cells(i, k).Value Then a = Int(50 * Rnd): k = 0
Next
Cells(i, j) = a
Next
Next
End Sub


A+
--
Nicolas B.


bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400
série de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?






Avatar
HARPER BEN
Merci beaucoup à tout les 2 pr ces infos : ca marche super bien. Si je
pouvais juste demander un dernir p'tits truc.. comment faire pour ranger les
nombres de chaque ligne par ordre croissant ? Avec outils trier c'est
quasi-impossible : il faut le faire ligne par ligne.
Merci encore
Avatar
michdenis
Bonjour HARPER BEN,


Essaie ceci : Tu n'as qu'à appeler la macro Loto, et le tour est joué !


'------------------------------------------
Sub Loto()

Dim i As Integer, j As Integer, k As Integer

Randomize
Application.ScreenUpdating = False
For i = 1 To 400
Cells(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Cells(i, k).Value Then a = Int(49 * Rnd) + 1: k = 0
Next
Cells(i, j) = a
Next
Next
Trier Range(Cells(1, 1), Cells(400, 7))

End Sub
'------------------------------------------
Sub Trier(rg As Range)

Set rg = Range("A1:G400")
For Each r In rg.Rows
With r
.Sort Key1:=r, Order1:=xlAscending, Header:úlse _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End With
Next
Set rg = Nothing
End Sub
'------------------------------------------


Salutations!




"HARPER BEN" a écrit dans le message de news:40941c14$0$27679$
Merci beaucoup à tout les 2 pr ces infos : ca marche super bien. Si je
pouvais juste demander un dernir p'tits truc.. comment faire pour ranger les
nombres de chaque ligne par ordre croissant ? Avec outils trier c'est
quasi-impossible : il faut le faire ligne par ligne.
Merci encore
Avatar
michdenis
Bonjour HARPER BEN


Voici la même procédure .... mais plus rapide dans l'exécution ...

'-------------------------------------------
Sub Loto()

Dim i As Integer, j As Integer, k As Integer
Dim Tblo(), Rg As Range
ReDim Tblo(1 To 400, 1 To 7)
Randomize
Application.ScreenUpdating = False
For i = 1 To UBound(Tblo, 1)
Tblo(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Tblo(i, k) Then a = Int(49 * Rnd) + 1: k = 0
Next
Tblo(i, j) = a
Next
Next

With Worksheets("Feuil1")
Set Rg = .Range("A1").Resize(UBound(Tblo, 1), UBound(Tblo, 2))
End With
Rg = Tblo
Trier Rg
Set Rg = Nothing

End Sub
'-------------------------------------------
Sub Trier(Rg As Range)

Dim R As Range
Set Rg = Range("A1:G400")
For Each R In Rg.Rows
With R
.Sort Key1:=R, Order1:=xlAscending, Header:úlse _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End With
Next
Set R = Nothing: Set Rg = Nothing
End Sub
'-------------------------------------------


Salutations!




"michdenis" a écrit dans le message de news:%23kC$
Bonjour HARPER BEN,


Essaie ceci : Tu n'as qu'à appeler la macro Loto, et le tour est joué !


'------------------------------------------
Sub Loto()

Dim i As Integer, j As Integer, k As Integer

Randomize
Application.ScreenUpdating = False
For i = 1 To 400
Cells(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Cells(i, k).Value Then a = Int(49 * Rnd) + 1: k = 0
Next
Cells(i, j) = a
Next
Next
Trier Range(Cells(1, 1), Cells(400, 7))

End Sub
'------------------------------------------
Sub Trier(rg As Range)

Set rg = Range("A1:G400")
For Each r In rg.Rows
With r
.Sort Key1:=r, Order1:=xlAscending, Header:úlse _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End With
Next
Set rg = Nothing
End Sub
'------------------------------------------


Salutations!




"HARPER BEN" a écrit dans le message de news:40941c14$0$27679$
Merci beaucoup à tout les 2 pr ces infos : ca marche super bien. Si je
pouvais juste demander un dernir p'tits truc.. comment faire pour ranger les
nombres de chaque ligne par ordre croissant ? Avec outils trier c'est
quasi-impossible : il faut le faire ligne par ligne.
Merci encore
Avatar
GD
Bonsoir,
une autre approche ;-)))
peut-etre plus rapide !!!

Sub Tirages7_49_400()
Application.ScreenUpdating = False
Worksheets.Add
'-------Plage de génération-----------
Range("A1").Select
ActiveCell.FormulaR1C1 = "=RAND()"
Selection.AutoFill Destination:=Range("A1:A49"), Type:=xlFillDefault
'-------Plage de tirage---------------
Range("B1").Select
ActiveCell.FormulaR1C1 = "=RANK(RC[-1],R1C1:R49C1)"
Selection.AutoFill Destination:=Range("B1:B7"), Type:=xlFillDefault
'-------Plage de résultats -----------
Dim Resultat!, Tirage!
Randomize
Application.Calculation = xlCalculationManual
With ActiveSheet
For Resultat = 1 To 400
'-------recopie la plage de tirage dans la plage de résultat-----
For Tirage = 1 To 7
.Cells(Resultat, 3 + Tirage).Value = .Cells(Tirage, 2).Value
Next
'-------nouvelle génération-----------
Application.Calculate
Next
End With
Application.Calculation = xlCalculationAutomatic
[D1].CurrentRegion.Columns.AutoFit
Application.ScreenUpdating = True
End Sub

;-)))
@+
"HARPER BEN" a écrit dans le message de news:

bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400 série
de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?



Avatar
michdenis
Désolé, mais il s'est glissé une petite erreur dans les procédures précédentes.


Si tu veux avoir le choix où tes données seront copiées dans le classeur, modifie dans la ligne de code suivante le nom
de la feuille et l'adresse de la cellule ...dans la première procédure :


With Worksheets("Feuil2")
Set Rg = .Range("h10").Resize(UBound(Tblo, 1), UBound(Tblo, 2))
End With



'-------------------------------------------------
Sub Loto()

Dim i As Integer, j As Integer, k As Integer
Dim Tblo(), Rg As Range
ReDim Tblo(1 To 400, 1 To 7)
Randomize
Application.ScreenUpdating = False
For i = 1 To UBound(Tblo, 1)
Tblo(i, 1) = Int(50 * Rnd)
For j = 2 To 7
a = Int(50 * Rnd)
For k = 1 To j - 1
If a = Tblo(i, k) Then a = Int(49 * Rnd) + 1: k = 0
Next
Tblo(i, j) = a
Next
Next

With Worksheets("Feuil2")
Set Rg = .Range("h10").Resize(UBound(Tblo, 1), UBound(Tblo, 2))
End With
Rg = Tblo
Trier Rg
Set Rg = Nothing

End Sub
'-------------------------------------------------
Sub Trier(Rg As Range)

Dim R As Range
For Each R In Rg.Rows
With R
a = a + 1
.Sort Key1:=Rg(a, 1), Order1:=xlAscending, Header:úlse _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End With
Next
Set R = Nothing: Set Rg = Nothing
End Sub
'-------------------------------------------------


Salutations!
Avatar
michdenis
Bonjour GD,

C'est bien, mais il manque un peu de vitesse si je compare à mon dernier message !!!

;-)))

P.S. n'oublie pas, il faut les trier !!!


Salutations!


"GD" a écrit dans le message de news:%
Bonsoir,
une autre approche ;-)))
peut-etre plus rapide !!!

Sub Tirages7_49_400()
Application.ScreenUpdating = False
Worksheets.Add
'-------Plage de génération-----------
Range("A1").Select
ActiveCell.FormulaR1C1 = "=RAND()"
Selection.AutoFill Destination:=Range("A1:A49"), Type:=xlFillDefault
'-------Plage de tirage---------------
Range("B1").Select
ActiveCell.FormulaR1C1 = "=RANK(RC[-1],R1C1:R49C1)"
Selection.AutoFill Destination:=Range("B1:B7"), Type:=xlFillDefault
'-------Plage de résultats -----------
Dim Resultat!, Tirage!
Randomize
Application.Calculation = xlCalculationManual
With ActiveSheet
For Resultat = 1 To 400
'-------recopie la plage de tirage dans la plage de résultat-----
For Tirage = 1 To 7
.Cells(Resultat, 3 + Tirage).Value = .Cells(Tirage, 2).Value
Next
'-------nouvelle génération-----------
Application.Calculate
Next
End With
Application.Calculation = xlCalculationAutomatic
[D1].CurrentRegion.Columns.AutoFit
Application.ScreenUpdating = True
End Sub

;-)))
@+
"HARPER BEN" a écrit dans le message de news:

bonjour,
Je connnais tres mal Excel et je voudrais créer un mini "programme"
capable de me donner 400 jeux de loto. C'est à dire me donner 400 série
de 7 nombre différents compris entre 1 et 49.
J'ai pensé a =alea(1:49) mais ca peut tres bien me donner 2x le meme
nombre parmis les sept et avoir 2X ou plus la meme combinaison.
Quelqu'un a-t-il une idée ou une piste ?



1 2