OVH Cloud OVH Cloud

Extraction aléatoire

9 réponses
Avatar
Doswel
Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A, extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean

9 réponses

Avatar
Daniel
Bonjour.
En colonne B, en faace de chaque nom : =ALEA()
Trier les colonnes A et B et prendre les 100 premiers noms.
Cordialement.
Daniel
"Doswel" a écrit dans le message de news:

Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A,
extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean



Avatar
Doswel
Merci Daniel,
ça marche, trés malin...
MERCI
Jean


Bonjour.
En colonne B, en faace de chaque nom : =ALEA()
Trier les colonnes A et B et prendre les 100 premiers noms.
Cordialement.
Daniel
"Doswel" a écrit dans le message de news:

Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A,
extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean








Avatar
FILK
Bonjour,

OK. Mais comment traiter les doublons ?

Philippe.


Merci Daniel,
ça marche, trés malin...
MERCI
Jean


Bonjour.
En colonne B, en faace de chaque nom : =ALEA()
Trier les colonnes A et B et prendre les 100 premiers noms.
Cordialement.
Daniel
"Doswel" a écrit dans le message de news:

Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A,
extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean










Avatar
FxM
Bonsoir Philippe,

OK. Mais comment traiter les doublons ?


Les doublons ? Quels doublons ? Doswel a-t-il parlé de doublons ? Que
non point nenni, Monseigneur :o)

D'une part, le risque de doublon est très faible de part l'utilisation
d'alea() et d'autre part, vu que tu prends les 100 premiers, le fait
fait que tous tes aléas soient à la même valeur (cas débile, je sais)
n'empêcherait pas de prendre 100 valeurs différentes si toutes tes
valeurs sont différentes au départ.

:o)

@+
FxM




FILK wrote:
Bonjour,

OK. Mais comment traiter les doublons ?

Philippe.


Merci Daniel,
ça marche, trés malin...
MERCI
Jean


Bonjour.
En colonne B, en faace de chaque nom : =ALEA()
Trier les colonnes A et B et prendre les 100 premiers noms.
Cordialement.
Daniel
"Doswel" a écrit dans le message de news:

Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A,
extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean











Avatar
michdenis
Bonjour Filk,

AV a déjà proposé sur le sujet dans un fil de ce forum.

Les noms sont dans la plage B1:B1000
Le résultat du tirage dans la plage de A1:A100

'----------------------------
Sub zz_SansDoublon() 'av

B_Sup = 1000: B_Inf = 1
Application.EnableEvents = False
For i = 1 To 100
Cells(i, 1) = Range("B" & Evaluate("int(rand()*(" & B_Sup & "-" & B_Inf & ")+" & B_Inf & ")"))
If i > 1 Then
While Not Range(Cells(1, 1), Cells(i - 1, 1)).Find(Cells(i, 1)) Is Nothing
Cells(i, 1) = Range("B" & Evaluate("int(rand()*(" & B_Sup & "-" & B_Inf & ")+" & B_Inf & ")"))
Wend
End If
Next
Application.EnableEvents = False

End Sub
'----------------------------


Salutations!



"FILK" a écrit dans le message de news:
Bonjour,

OK. Mais comment traiter les doublons ?

Philippe.


Merci Daniel,
ça marche, trés malin...
MERCI
Jean


Bonjour.
En colonne B, en faace de chaque nom : =ALEA()
Trier les colonnes A et B et prendre les 100 premiers noms.
Cordialement.
Daniel
"Doswel" a écrit dans le message de news:

Bonjour, je souhaite à partir d'une liste de 1000 noms en colonne A,
extraire
aléatoirement 100 noms en colonne B.
Merci de vos conseils
Jean










Avatar
AV
Dans la macro rappelée par Denis, il est conseillé de supprimer les 2 lignes de
code "Application.EnableEvents = False" dont la présence reste très mystérieuse
mais qui ont surtout l'inconvénient de désactiver les procs évènementielles !

Juste histoire de...
Avec les noms (doublons possibles) en A1:A1000 et extraction de 100 noms (sans
doublons) en B1:B100, ça fait :

Sub zz_Extract_SansDoublon()
Application.ScreenUpdating = False
B_Sup = 1000: B_Inf = 1
For i = 1 To 100
Cells(i, 2) = Range("A" & Evaluate("int(rand()*(" & B_Sup & "-" & B_Inf &
")+" & B_Inf & ")"))
If i > 1 Then
While Not Range(Cells(1, 2), Cells(i - 1, 2)).Find(Cells(i, 2)) Is
Nothing
Cells(i, 2) = Range("A" & Evaluate("int(rand()*(" & B_Sup & "-" &
B_Inf & ")+" & B_Inf & ")"))
Wend
End If
Next
End Sub

AV
Avatar
michdenis
Bonjour AV,

Effectivement, la deuxième ligne aurait dû se lire ainsi :
Application.EnableEvents = true
Le fameux copier-coller qui joue encore des tours !

Mais pourquoi ne pas désactiver les procédures événementielles
durant le traitement ? La rapidité d'exécution peut être grandement
affecté en présence de procédures événementielles. Est-ce qu'il y
a quelque chose dans la dite procédure qui renverrait un résultat
erroné à cause de la désactivation des procédures événementielles
durant le processus?

Dans l'affrmation, j'aimerais bien connaître tes raisons...

Merci de ta participation.


Salutations!



"AV" a écrit dans le message de news: %
Dans la macro rappelée par Denis, il est conseillé de supprimer les 2 lignes de
code "Application.EnableEvents = False" dont la présence reste très mystérieuse
mais qui ont surtout l'inconvénient de désactiver les procs évènementielles !

Juste histoire de...
Avec les noms (doublons possibles) en A1:A1000 et extraction de 100 noms (sans
doublons) en B1:B100, ça fait :

Sub zz_Extract_SansDoublon()
Application.ScreenUpdating = False
B_Sup = 1000: B_Inf = 1
For i = 1 To 100
Cells(i, 2) = Range("A" & Evaluate("int(rand()*(" & B_Sup & "-" & B_Inf &
")+" & B_Inf & ")"))
If i > 1 Then
While Not Range(Cells(1, 2), Cells(i - 1, 2)).Find(Cells(i, 2)) Is
Nothing
Cells(i, 2) = Range("A" & Evaluate("int(rand()*(" & B_Sup & "-" &
B_Inf & ")+" & B_Inf & ")"))
Wend
End If
Next
End Sub

AV
Avatar
AV
| Mais pourquoi ne pas désactiver les procédures événementielles
| durant le traitement ? La rapidité d'exécution peut être grandement
| affecté en présence de procédures événementielles.

Je suis tout à fait d'accord...
Simplement pour quelqu'un qui maitrise pas trop, un plantage en cours
d'exécution entraine évidemment des proc. évèn. qui...n'en sont plus et un
arrachage de cheveux qui suit !
Donc en répondant à minima, je ne mettrais pas cette ligne de code pas plus que
la désactivation des calculs, c'est la raison pour laquelle je trouvais
"mystérieuse" la présence de ces 2 lignes ;-)

On est de toute façon d'accord sur le fond ...

AV
Avatar
michdenis
Ok.


Salutations!

"AV" a écrit dans le message de news:
| Mais pourquoi ne pas désactiver les procédures événementielles
| durant le traitement ? La rapidité d'exécution peut être grandement
| affecté en présence de procédures événementielles.

Je suis tout à fait d'accord...
Simplement pour quelqu'un qui maitrise pas trop, un plantage en cours
d'exécution entraine évidemment des proc. évèn. qui...n'en sont plus et un
arrachage de cheveux qui suit !
Donc en répondant à minima, je ne mettrais pas cette ligne de code pas plus que
la désactivation des calculs, c'est la raison pour laquelle je trouvais
"mystérieuse" la présence de ces 2 lignes ;-)

On est de toute façon d'accord sur le fond ...

AV