OVH Cloud OVH Cloud

nombre aléatoire

7 réponses
Avatar
yan
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un numéro de 1 a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n dans la 1er
cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe pas dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si c'est le cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que les goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick

7 réponses

Avatar
Pierre CFI [mvp]
bonjour
tu peux faire un exit for, pour sortir de la boucle ou un exit sub, pour finir

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"yan" a écrit dans le message de news:41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un numéro de 1 a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n dans la 1er
cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe pas dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si c'est le cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que les goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick




Avatar
yan
Je note le "exit for" que je ne connaissais pas.
Si j'ai bien compris exit for interromps ma boucle et me fais sortir après
next
Mais moi je sort et je remonte a boucle:
ma façon de faire nuit-elle a mon programme
Merci a toi
A+
yannick


"Pierre CFI [mvp]" a écrit dans le message de
news:
bonjour
tu peux faire un exit for, pour sortir de la boucle ou un exit sub, pour
finir

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"yan" a écrit dans le message de
news:41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un numéro de 1
a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n dans la 1er
cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe pas
dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si c'est le
cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que les
goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick








Avatar
Clément Marcotte
Bonjour,

Si j'ai bien compris exit for interromps ma boucle et me fais sortir
après

next


Exact. C'est également vrai pour les autres "Exit", sauf exit sub.

Mais moi je sort et je remonte a boucle:
ma façon de faire nuit-elle a mon programme.


Les puristes ont pris "goto" en grippe, surtout parce qu'avant
l'arrivée des programmes qui facilitaient la programmation structurée,
les programmes devenaient vite une sorte d'assiette de spaghettis; à
cause, justement, des goto. Mais ils n'avaient rien d'autre.

Avec les langages d'aujourdh'hui, il est tout à fait possible de
programmer sans goto, et, dans l'ensemble, c'est très positif. Ne
serait-ce que pour la facilité de lecture et de mise à jour; surtout
quand le programmeur a oublié quelle "belle passe" qu'un certain goto
8000 placé à ligne 3500 lui a permis de faire, ou que pire encore,
quelqu'un qui ignore tout de la "belle passe" en question doit
modifier le programme.

Pour un petit programme comme celui-ci, le goto ne cause pas grand
mal.

D'un autre côté, tu peux utiliser un tableau en mémoire dans une
boucle conditionnelle, pour tirer tes x nombres, et ensuite transférer
le tableau dans la feuille de calcul. Il y a sans doute des exemples
dans Excelabo.

Sinon, j'avais déjà écris jetire() que tu peux retrouver là. (Il y a
peut-être de meilleurs programmes ailleurs, je ne prétend pas détenir
la vérité):

http://groups.google.com/groups?q=+%22sub+jetire%22+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&c2coff=1&selmì6JWLVnCHA.2420%40TK2MSFTNGP12&rnum=1







"yan" a écrit dans le message de
news:41b34d93$0$9038$
Je note le "exit for" que je ne connaissais pas.
Merci a toi
A+
yannick


"Pierre CFI [mvp]" a écrit dans le
message de

news:
bonjour
tu peux faire un exit for, pour sortir de la boucle ou un exit
sub, pour


finir

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"yan" a écrit dans le message de
news:41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un
numéro de 1



a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n
dans la 1er



cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe
pas



dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si
c'est le



cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que
les



goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick












Avatar
yan
Merci clément pour tes explications et ce lien
Bonne soirée
A+
yannick



"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Si j'ai bien compris exit for interromps ma boucle et me fais sortir
après

next


Exact. C'est également vrai pour les autres "Exit", sauf exit sub.

Mais moi je sort et je remonte a boucle:
ma façon de faire nuit-elle a mon programme.


Les puristes ont pris "goto" en grippe, surtout parce qu'avant
l'arrivée des programmes qui facilitaient la programmation structurée,
les programmes devenaient vite une sorte d'assiette de spaghettis; à
cause, justement, des goto. Mais ils n'avaient rien d'autre.

Avec les langages d'aujourdh'hui, il est tout à fait possible de
programmer sans goto, et, dans l'ensemble, c'est très positif. Ne
serait-ce que pour la facilité de lecture et de mise à jour; surtout
quand le programmeur a oublié quelle "belle passe" qu'un certain goto
8000 placé à ligne 3500 lui a permis de faire, ou que pire encore,
quelqu'un qui ignore tout de la "belle passe" en question doit
modifier le programme.

Pour un petit programme comme celui-ci, le goto ne cause pas grand
mal.

D'un autre côté, tu peux utiliser un tableau en mémoire dans une
boucle conditionnelle, pour tirer tes x nombres, et ensuite transférer
le tableau dans la feuille de calcul. Il y a sans doute des exemples
dans Excelabo.

Sinon, j'avais déjà écris jetire() que tu peux retrouver là. (Il y a
peut-être de meilleurs programmes ailleurs, je ne prétend pas détenir
la vérité):

http://groups.google.com/groups?q=+%22sub+jetire%22+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&c2coff=1&selmì6JWLVnCHA.2420%40TK2MSFTNGP12&rnum=1







"yan" a écrit dans le message de
news:41b34d93$0$9038$
Je note le "exit for" que je ne connaissais pas.
Merci a toi
A+
yannick


"Pierre CFI [mvp]" a écrit dans le
message de

news:
bonjour
tu peux faire un exit for, pour sortir de la boucle ou un exit
sub, pour


finir

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"yan" a écrit dans le message de
news:41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un
numéro de 1



a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n
dans la 1er



cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe
pas



dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si
c'est le



cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que
les



goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick















Avatar
Clément Marcotte
Bonjour,

Une autre version là:

http://groups.google.com/groups?q=+%22petite+passe%22+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&c2coff=1&selm=OpWBjLsRBHA.1788%40tkmsftngp05&rnum=1



"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

Si j'ai bien compris exit for interromps ma boucle et me fais
sortir


après
next


Exact. C'est également vrai pour les autres "Exit", sauf exit sub.

Mais moi je sort et je remonte a boucle:
ma façon de faire nuit-elle a mon programme.


Les puristes ont pris "goto" en grippe, surtout parce qu'avant
l'arrivée des programmes qui facilitaient la programmation
structurée,

les programmes devenaient vite une sorte d'assiette de spaghettis; à
cause, justement, des goto. Mais ils n'avaient rien d'autre.

Avec les langages d'aujourdh'hui, il est tout à fait possible de
programmer sans goto, et, dans l'ensemble, c'est très positif. Ne
serait-ce que pour la facilité de lecture et de mise à jour; surtout
quand le programmeur a oublié quelle "belle passe" qu'un certain
goto

8000 placé à ligne 3500 lui a permis de faire, ou que pire encore,
quelqu'un qui ignore tout de la "belle passe" en question doit
modifier le programme.

Pour un petit programme comme celui-ci, le goto ne cause pas grand
mal.

D'un autre côté, tu peux utiliser un tableau en mémoire dans une
boucle conditionnelle, pour tirer tes x nombres, et ensuite
transférer

le tableau dans la feuille de calcul. Il y a sans doute des exemples
dans Excelabo.

Sinon, j'avais déjà écris jetire() que tu peux retrouver là. (Il y a
peut-être de meilleurs programmes ailleurs, je ne prétend pas
détenir

la vérité):


http://groups.google.com/groups?q=+%22sub+jetire%22+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&c2coff=1&selmì6JWLVnCHA.2420%40TK2MSFTNGP12&rnum=1








"yan" a écrit dans le message de
news:41b34d93$0$9038$
Je note le "exit for" que je ne connaissais pas.
Merci a toi
A+
yannick


"Pierre CFI [mvp]" a écrit dans le
message de

news:
bonjour
tu peux faire un exit for, pour sortir de la boucle ou un exit
sub, pour


finir

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"yan" a écrit dans le message de
news:41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un
numéro de 1



a
n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n
dans la 1er



cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v
n'existe




pas
dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si
c'est le



cas
je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu
que




les
goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick















Avatar
LE TROLL
Bonsoir,

Tu as plusieurs solutions
ton goto
un "exit for" et codage après la boucle
embarquer le code dans la boucle
de faire une procédure et de l'appeler Call ma_procedure

Soit dit en passant, je n'ai pas mémorisé ton code, mais si tu répètes
deux fois 2 lignes, c'est dans l'absolu plus rationnelle que de faire une
procédure qui fera 4 lignes...
Idem, le goto est utilisé, notamment pour remonter, il n'y a guère d'autre
solution, sauf à faire comme en C, 50 lignes de code pour éviter un goto,
jugé de mauvais goût, car jadis trop utilisé en Basic par les débutants;
non, quand tu as besoin d'un goto, vas y... lol
:o)
-------

"yan" a écrit dans le message de news:
41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un numéro de 1
a n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n dans la 1er
cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe pas dans
les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si c'est le
cas je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que les goto
étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick




Avatar
yan
Bonjour
Merci de ton conseil
Bonne journée
A+
yannick

"LE TROLL" <le a écrit dans le message de news:
eOP%
Bonsoir,

Tu as plusieurs solutions
ton goto
un "exit for" et codage après la boucle
embarquer le code dans la boucle
de faire une procédure et de l'appeler Call ma_procedure

Soit dit en passant, je n'ai pas mémorisé ton code, mais si tu répètes
deux fois 2 lignes, c'est dans l'absolu plus rationnelle que de faire une
procédure qui fera 4 lignes...
Idem, le goto est utilisé, notamment pour remonter, il n'y a guère d'autre
solution, sauf à faire comme en C, 50 lignes de code pour éviter un goto,
jugé de mauvais goût, car jadis trop utilisé en Basic par les débutants;
non, quand tu as besoin d'un goto, vas y... lol
:o)
-------

"yan" a écrit dans le message de news:
41b33a28$0$3411$
bonsoir a toutes et tous
J'ai a partir de B2 jusqu'a Bn une liste de personne.
J'ai fait ce bout de code pour affecter en face chaque nom un numéro de 1
a n (sans doublons) de façon aléatoire
Sub toto()
n = [B65536].End(3).Row - 1 'nombre de personnes
Randomize
Cells(2, 1) = Int(n * Rnd) + 1 'nombre aléatoire entre 1 et n dans la 1er
cellule(B2)

For x = 3 To n + 1
boucle:
v = Int(n * Rnd) + 1 'créer un nombre aléatoire entre 1 et n

For t = 2 To x
If Cells(t, 1).Value = v Then GoTo boucle 'vérifie que v n'existe pas
dans les cellules précédentes si oui goto
Next

Cells(x, 1) = v ' rentre la valeur dans la cellule suivante
Next
End Sub
Ce code marche fort bien j'ai ma liste sans doublons mais:
A l'aide d'un if je test si le numéro a déjà été attribué et si c'est le
cas je sort et par un goto(!)
Cette façon de faire me semble peut orthodoxe et j'ai déjà lu que les
goto étaient a éviter, mais je vois pas comment faire autrement
Vos avis et commentaire me seraient précieux
Merci
A+
yannick