Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté
les archives des forums et j'ai trouvé de nombreuses idées mais je n'ai
rien réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en
B1:B30 une liste de valeurs toutes différentes et choisies de manière
aléatoire.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JPMonnier
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000 -- Cordialement
"JulieH" a écrit dans le message de news:
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30 une liste de valeurs toutes différentes et choisies de manière aléatoire.
Cela peut-être avec macro ou avec formule.
Merci par avance pour vos réponses.
Julie
Bonjour,
En B1, tu entres cette formule
=ALEA.ENTRE.BORNES(1;1000)
tu tire ta formule jusqu'à B30
En faisant F9, tes chiffres vont changer
Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à
A 1000
--
Cordialement
jpmonnier-nospam@neuf.fr
"JulieH" <julieh@discussions.microsoft.com> a écrit dans le message de
news:uvWgqFaQKHA.4004@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les
archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien
réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30
une liste de valeurs toutes différentes et choisies de manière aléatoire.
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000 -- Cordialement
"JulieH" a écrit dans le message de news:
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30 une liste de valeurs toutes différentes et choisies de manière aléatoire.
Cela peut-être avec macro ou avec formule.
Merci par avance pour vos réponses.
Julie
Modeste
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour,
En B1, tu entres cette formule
=ALEA.ENTRE.BORNES(1;1000)
tu tire ta formule jusqu'à B30
En faisant F9, tes chiffres vont changer
Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer
de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro :
en colonne A :
tirer 1000 fois vers le bas la formule
=Alea()
en colonne B
tirer 30 fois vers le bas la formule
=Rang(A1;$A$1:$A$1000)
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Jacky
Bonjour,
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------ Voir ici http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
-- Salutations JJ
"JulieH" a écrit dans le message de news:
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30 une liste de valeurs toutes différentes et choisies de manière aléatoire.
Cela peut-être avec macro ou avec formule.
Merci par avance pour vos réponses.
Julie
Bonjour,
Une solution sans doublon en vba
'-----------------
Sub tirage()
Application.ScreenUpdating = False
Dim i As Integer
Randomize
For i = 1 To 30
Do
Cells(i, 2) = Int((1000 * Rnd) + 1)
Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1
Next i
End Sub
'------------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
--
Salutations
JJ
"JulieH" <julieh@discussions.microsoft.com> a écrit dans le message de news:
uvWgqFaQKHA.4004@TK2MSFTNGP04.phx.gbl...
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les
archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien
réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30
une liste de valeurs toutes différentes et choisies de manière aléatoire.
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------ Voir ici http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
-- Salutations JJ
"JulieH" a écrit dans le message de news:
Bonjour à toutes et tous,
Je souhaite réaliser des tirages aléatoires avec Excel, j'ai consulté les archives des forums et j'ai trouvé de nombreuses idées mais je n'ai rien réussi à mettre en oeuvre.
De A1 à A1000, j'ai des valeurs de 1 à 1000. Je souhaite obtenir en B1:B30 une liste de valeurs toutes différentes et choisies de manière aléatoire.
Cela peut-être avec macro ou avec formule.
Merci par avance pour vos réponses.
Julie
JulieH
Bonjour et merci à tous les 2 pour vos réponses,
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Bonjour et merci à tous les 2 pour vos réponses,
Pour la première solution, je confirme qu'il peut y avoir des doublons.
Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de
doublons mais la technique me paraît un peu "sauvage" car dès que l'on
modifie une cellule quelconque de la feuille, la liste change. Comment
expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je
suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour,
En B1, tu entres cette formule
=ALEA.ENTRE.BORNES(1;1000)
tu tire ta formule jusqu'à B30
En faisant F9, tes chiffres vont changer
Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer
de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro :
en colonne A :
tirer 1000 fois vers le bas la formule
=Alea()
en colonne B
tirer 30 fois vers le bas la formule
=Rang(A1;$A$1:$A$1000)
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Modeste
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x
End Sub
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba
'-----------------
Sub tirage()
Application.ScreenUpdating = False
Dim i As Integer
Randomize
For i = 1 To 30
Do
Cells(i, 2) = Int((1000 * Rnd) + 1)
Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1
Next i
End Sub
'------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale
pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage()
Dim i As Integer, x As Double
Dim tirages As Integer, population As Integer
Randomize
tirages = 30
population = 1000
'-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier
'[B1:B30].ClearContents
'population=tirage
x = 0
For i = 1 To tirages ' ---population >> tirages
Do
x = x + 1
Cells(i, 2) = Int((population * Rnd) + 1)
Cells(i, 3) = x
Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1
Next i
DoEvents
MsgBox "Nbr total de boucles : " & x
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x
End Sub
FS
Bonjour,
> Si quelqu'un a également une solution qui fonctionne avec Macro, je > suis intéressée.
Avec une autre approche que la proposition de Jacky, 2 procédures tirées de mes archives :
'======================== Sub Loto() 'd'après auteur inconnu Dim i, choice, balls(1000) For i = 1 To 1000 balls(i) = i Next Randomize Timer For i = 1 To 30 choice = 1 + Int((Rnd * (999 - i))) Range("B1").Offset(i - 1, 0).Value = balls(choice) balls(choice) = balls(1000 - i) Next End Sub
Sub Aléatoire() 'd'après L Longre
Dim Arr(1 To 1000, 1 To 1) As Integer Dim i As Integer, J As Integer, K As Integer For i = 1 To 1000 Arr(i, 1) = i Next i Randomize Timer For i = 1 To 30 J = Int(Rnd * (1001 - i)) + 1 K = Arr(i, 1) Arr(i, 1) = Arr(J, 1) Arr(J, 1) = K Next i [B1:B30] = Arr End Sub '======================== FS -- Frédéric SIGONNEAU Modules et modèles pour Excel : http://frederic.sigonneau.free.fr/
JulieH a écrit :
Bonjour et merci à tous les 2 pour vos réponses,
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Bonjour,
> Si quelqu'un a également une solution qui fonctionne avec Macro, je
> suis intéressée.
Avec une autre approche que la proposition de Jacky, 2 procédures tirées
de mes archives :
'======================== Sub Loto()
'd'après auteur inconnu
Dim i, choice, balls(1000)
For i = 1 To 1000
balls(i) = i
Next
Randomize Timer
For i = 1 To 30
choice = 1 + Int((Rnd * (999 - i)))
Range("B1").Offset(i - 1, 0).Value = balls(choice)
balls(choice) = balls(1000 - i)
Next
End Sub
Sub Aléatoire()
'd'après L Longre
Dim Arr(1 To 1000, 1 To 1) As Integer
Dim i As Integer, J As Integer, K As Integer
For i = 1 To 1000
Arr(i, 1) = i
Next i
Randomize Timer
For i = 1 To 30
J = Int(Rnd * (1001 - i)) + 1
K = Arr(i, 1)
Arr(i, 1) = Arr(J, 1)
Arr(J, 1) = K
Next i
[B1:B30] = Arr
End Sub
'========================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/
JulieH a écrit :
Bonjour et merci à tous les 2 pour vos réponses,
Pour la première solution, je confirme qu'il peut y avoir des doublons.
Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de
doublons mais la technique me paraît un peu "sauvage" car dès que l'on
modifie une cellule quelconque de la feuille, la liste change. Comment
expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je
suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour,
En B1, tu entres cette formule
=ALEA.ENTRE.BORNES(1;1000)
tu tire ta formule jusqu'à B30
En faisant F9, tes chiffres vont changer
Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer
de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro :
en colonne A :
tirer 1000 fois vers le bas la formule =Alea()
en colonne B
tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
> Si quelqu'un a également une solution qui fonctionne avec Macro, je > suis intéressée.
Avec une autre approche que la proposition de Jacky, 2 procédures tirées de mes archives :
'======================== Sub Loto() 'd'après auteur inconnu Dim i, choice, balls(1000) For i = 1 To 1000 balls(i) = i Next Randomize Timer For i = 1 To 30 choice = 1 + Int((Rnd * (999 - i))) Range("B1").Offset(i - 1, 0).Value = balls(choice) balls(choice) = balls(1000 - i) Next End Sub
Sub Aléatoire() 'd'après L Longre
Dim Arr(1 To 1000, 1 To 1) As Integer Dim i As Integer, J As Integer, K As Integer For i = 1 To 1000 Arr(i, 1) = i Next i Randomize Timer For i = 1 To 30 J = Int(Rnd * (1001 - i)) + 1 K = Arr(i, 1) Arr(i, 1) = Arr(J, 1) Arr(J, 1) = K Next i [B1:B30] = Arr End Sub '======================== FS -- Frédéric SIGONNEAU Modules et modèles pour Excel : http://frederic.sigonneau.free.fr/
JulieH a écrit :
Bonjour et merci à tous les 2 pour vos réponses,
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
Julie
Modeste a écrit :
Bonsour® JPMonnier avec ferveur ;o))) vous nous disiez :
Bonjour, En B1, tu entres cette formule =ALEA.ENTRE.BORNES(1;1000) tu tire ta formule jusqu'à B30 En faisant F9, tes chiffres vont changer Dans le cas ou tes chiffres sont de 1 à 1000, inutile de les rentrer de A1 à A 1000
cela n'évite pas les doublons !!!
autre solution sans macro : en colonne A : tirer 1000 fois vers le bas la formule =Alea()
en colonne B tirer 30 fois vers le bas la formule =Rang(A1;$A$1:$A$1000)
Modeste
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
;o))) cela est vrai ("sauvage") pour les deux methodes ... l'utilisation d'une fonction alea est tributaire du mode de recalcul il s'agit d'un option pouvant etre fixée via le menu Outil > options >onglet calcul il suffit de choisir calcul sur Ordre
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
si' l'on souhaite cependant garder le recalcul automatique , il faut necessairement utiliser une macro recopiant en valeur la plage B1:B30 vers une autre destination
Sub generation() Application.Calculation=xlmanual Range("B1:B30").Copy Range("C1").PasteSpecial Paste:=xlPasteValues Application.Calculation=xlautomatique End Sub
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :
Pour la première solution, je confirme qu'il peut y avoir des
doublons. Pour la seconde, cela me semble fonctionner et je n'ai
jamais vu de doublons mais la technique me paraît un peu "sauvage"
car dès que l'on modifie une cellule quelconque de la feuille, la
liste change. Comment expliquer cela ?
;o))) cela est vrai ("sauvage") pour les deux methodes ...
l'utilisation d'une fonction alea est tributaire du mode de recalcul
il s'agit d'un option pouvant etre fixée via le menu Outil > options >onglet calcul
il suffit de choisir calcul sur Ordre
Si quelqu'un a également une solution qui fonctionne avec Macro, je
suis intéressée.
si' l'on souhaite cependant garder le recalcul automatique ,
il faut necessairement utiliser une macro recopiant en valeur la plage B1:B30 vers une autre destination
Sub generation()
Application.Calculation=xlmanual
Range("B1:B30").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
Application.Calculation=xlautomatique
End Sub
Bonsour® JulieH avec ferveur ;o))) vous nous disiez :
Pour la première solution, je confirme qu'il peut y avoir des doublons. Pour la seconde, cela me semble fonctionner et je n'ai jamais vu de doublons mais la technique me paraît un peu "sauvage" car dès que l'on modifie une cellule quelconque de la feuille, la liste change. Comment expliquer cela ?
;o))) cela est vrai ("sauvage") pour les deux methodes ... l'utilisation d'une fonction alea est tributaire du mode de recalcul il s'agit d'un option pouvant etre fixée via le menu Outil > options >onglet calcul il suffit de choisir calcul sur Ordre
Si quelqu'un a également une solution qui fonctionne avec Macro, je suis intéressée.
si' l'on souhaite cependant garder le recalcul automatique , il faut necessairement utiliser une macro recopiant en valeur la plage B1:B30 vers une autre destination
Sub generation() Application.Calculation=xlmanual Range("B1:B30").Copy Range("C1").PasteSpecial Paste:=xlPasteValues Application.Calculation=xlautomatique End Sub
JulieH
Bonjour et merci également pour t'intéresser à ma question,
Je vais tester cela.
Bonne journée
Julie
Jacky a écrit :
Bonjour,
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------ Voir ici http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
Bonjour et merci également pour t'intéresser à ma question,
Je vais tester cela.
Bonne journée
Julie
Jacky a écrit :
Bonjour,
Une solution sans doublon en vba
'-----------------
Sub tirage()
Application.ScreenUpdating = False
Dim i As Integer
Randomize
For i = 1 To 30
Do
Cells(i, 2) = Int((1000 * Rnd) + 1)
Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1
Next i
End Sub
'------------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
Bonjour et merci également pour t'intéresser à ma question,
Je vais tester cela.
Bonne journée
Julie
Jacky a écrit :
Bonjour,
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------ Voir ici http://www.cijoint.fr/cjlink.php?file=cj200909/cijgscfUIs.xls
JulieH
Merci beaucoup pour toutes ces précisions.
Julie
Modeste a écrit :
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x
End Sub
Merci beaucoup pour toutes ces précisions.
Julie
Modeste a écrit :
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba
'-----------------
Sub tirage()
Application.ScreenUpdating = False
Dim i As Integer
Randomize
For i = 1 To 30
Do
Cells(i, 2) = Int((1000 * Rnd) + 1)
Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1
Next i
End Sub
'------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale
pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage()
Dim i As Integer, x As Double
Dim tirages As Integer, population As Integer
Randomize
tirages = 30
population = 1000
'-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier
'[B1:B30].ClearContents
'population=tirage
x = 0
For i = 1 To tirages ' ---population >> tirages
Do
x = x + 1
Cells(i, 2) = Int((population * Rnd) + 1)
Cells(i, 3) = x
Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1
Next i
DoEvents
MsgBox "Nbr total de boucles : " & x
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x
End Sub
Jacky
Bonjour Modeste
...il conviendrait également de purger préalablement la plage [B1:B30]
'--------- Loop Until Application.CountIf(Range("b1:b" & i), Cells(i, 2)) = 1 '--------- C'est cela que tu voulais dire ?? Bien qu'en modifiant ma boucle comme ceci La macro reste beaucoup moins rapide que celles que Fredéric a sorti de ses archives. Je remballe...snifff ;o))
Ps: Pourquoi "DoEvents" ??? -- Salutations JJ
"Modeste" a écrit dans le message de news:
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x
End Sub
Bonjour Modeste
...il conviendrait également de purger préalablement la plage [B1:B30]
'---------
Loop Until Application.CountIf(Range("b1:b" & i), Cells(i, 2)) = 1
'---------
C'est cela que tu voulais dire ??
Bien qu'en modifiant ma boucle comme ceci
La macro reste beaucoup moins rapide que celles que Fredéric a sorti de ses
archives.
Je remballe...snifff
;o))
Ps: Pourquoi "DoEvents" ???
--
Salutations
JJ
"Modeste" <GD@libre.fr> a écrit dans le message de news:
eepqThbQKHA.1236@TK2MSFTNGP05.phx.gbl...
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba
'-----------------
Sub tirage()
Application.ScreenUpdating = False
Dim i As Integer
Randomize
For i = 1 To 30
Do
Cells(i, 2) = Int((1000 * Rnd) + 1)
Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1
Next i
End Sub
'------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le
nombre de tirages est proche de la population totale
pour cette même raison il conviendrait également de purger préalablement la
plage [B1:B30]
Sub tirage()
Dim i As Integer, x As Double
Dim tirages As Integer, population As Integer
Randomize
tirages = 30
population = 1000
'-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour
verifier
'[B1:B30].ClearContents
'population=tirage
x = 0
For i = 1 To tirages ' ---population >> tirages
Do
x = x + 1
Cells(i, 2) = Int((population * Rnd) + 1)
Cells(i, 3) = x
Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1
Next i
DoEvents
MsgBox "Nbr total de boucles : " & x
...il conviendrait également de purger préalablement la plage [B1:B30]
'--------- Loop Until Application.CountIf(Range("b1:b" & i), Cells(i, 2)) = 1 '--------- C'est cela que tu voulais dire ?? Bien qu'en modifiant ma boucle comme ceci La macro reste beaucoup moins rapide que celles que Fredéric a sorti de ses archives. Je remballe...snifff ;o))
Ps: Pourquoi "DoEvents" ??? -- Salutations JJ
"Modeste" a écrit dans le message de news:
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :
Une solution sans doublon en vba '----------------- Sub tirage() Application.ScreenUpdating = False Dim i As Integer Randomize For i = 1 To 30 Do Cells(i, 2) = Int((1000 * Rnd) + 1) Loop Until Application.CountIf([b1:b30], Cells(i, 2)) = 1 Next i End Sub '------------------
à noter que cette methode devient gourmande en nbr de boucles lorsque le nombre de tirages est proche de la population totale pour cette même raison il conviendrait également de purger préalablement la plage [B1:B30]
Sub tirage() Dim i As Integer, x As Double Dim tirages As Integer, population As Integer Randomize tirages = 30 population = 1000 '-----;o)))-- oter les mises en commentaire des lignes ci-dessous pour verifier '[B1:B30].ClearContents 'population=tirage x = 0 For i = 1 To tirages ' ---population >> tirages Do x = x + 1 Cells(i, 2) = Int((population * Rnd) + 1) Cells(i, 3) = x Loop Until Application.CountIf([B1:B30], Cells(i, 2)) = 1 Next i DoEvents MsgBox "Nbr total de boucles : " & x