Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel


Réponse
 
LinkBack Outils de la discussion
Vieux 19/05/2005, 01h46   #1 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2005
Messages: 5
Par défaut Nombre aléatoire UNIQUE

Bonsoir,

j'aimerai créer un tableau contenant 200 valeurs aléatoires de 0 à 199.
Quand une valeur est utilisée, elle ne doit plus ressortir, ce qui revient à dire que mon tableau doit contenir tous les nombres de 0 à 199 mais pas dans l'ordre...

J'ai essayé la fonction ALEA.ENTRE.BORNES(0;199), mais évidement, j'ai des doublons...

Si quelqu'un pouvait m'éclairer.
Tochiro est déconnecté   Réponse avec citation
ANNONCES
Vieux 19/05/2005, 02h57   #2 (permalink)
XLDnaute Barbatruc
 
Avatar de Robert
 
Date d'inscription: février 2005
Localisation: Sète
Version Excel : Excel 2003 (PC)
Messages: 2 903
Par défaut Re:Nombre aléatoire UNIQUE

Bonsoir Tochiro, bonsoir le forum,

la macro ci-dessous écris aléatoirement dans la plage A1:A201 des nombres de 0 à 200 sans doublons.

Citation:
Option Explicit 'oblige à déclarer toutes les variables

Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim ad As String 'déclare la variable ad
Dim c As Range 'déclare la variable c
Randomize 'lance la fonction aléatoire
For x = 1 To 200 'boucle sur 199 cellule
If Cells(1, 1) = '' Then 'condition1 : si la cellule A1 est vide, alors
Cells(1, 1) = Int(200 * Rnd) 'A1 = aléatoire ente 0 et 199
Else 'sinon
Cells(x, 1) = Int(200 * Rnd) 'la cellule A_x = aléatoire entre 0 et 99
With Range('A1:A' & x) 'avec la plage A1:A_x
Set c = .Find(Cells(x, 1).Value, , , xlWhole) 'définit la variable c = chercher la première valeur de A_x
If Not c Is Nothing Then 'condition2 : si recherche non infructueuse
ad = c.Address 'définit la variable ad (adresse de la première valeur trouvée = A_x)
Set c = .FindNext(c) 'redéfinit la variable c = prochaine valeur A_x recherché
If Not c Is Nothing And c.Address <> ad Then 'condition3 : si recherche non infructeueuse et adresse différente de la premiere valeur trouvée
x = x - 1 'redéfinit la variable x
End If 'fin condition3
End If 'fin condition2
End With 'fin avec plage A1:A_x
End If 'fin condition1
Next x 'prochaine cellule de la boucle
Cells(Int(201 * Rnd), 1).Select 'sélectione aleatoirement une cellule dans la plage (A1:A200)
Selection.Insert Shift:=xlDown 'insère en décalant vers le bas
Selection.Value = 200 'place la dernière valeur = 200
End Sub
__________________
À plus

Robert
Robert est déconnecté   Réponse avec citation
Vieux 19/05/2005, 04h01   #3 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2005
Messages: 5
Par défaut Re:Nombre aléatoire UNIQUE

Merci beaucoup..
Tochiro est déconnecté   Réponse avec citation
Vieux 19/05/2005, 10h30   #4 (permalink)
XLDnaute Barbatruc
 
Avatar de Robert
 
Date d'inscription: février 2005
Localisation: Sète
Version Excel : Excel 2003 (PC)
Messages: 2 903
Par défaut Re:Nombre aléatoire UNIQUE

Bonjour Tochiro, bonjour le forum,

Le code que je t'ai donné contient une petite erreur qui risque de provoquer un bug si un zero est tiré au sort lors de la sélection aléatoire d'une cellule (Cells(0,1).Select=bug). Remplace l'avant avant dernière ligne par celle-ci :
Citation:
Cells(Int(201 * Rnd) + 1, 1).Select 'sélectione aléatoirement une cellule dans la plage (A1:A200)
__________________
À plus

Robert
Robert est déconnecté   Réponse avec citation
Vieux 19/05/2005, 13h12   #5 (permalink)
XLDnaute Barbatruc
 
Avatar de Hervé
 
Date d'inscription: février 2005
Localisation: Saint-Etienne
Version Excel : Excel XP (PC)
Messages: 4 453
Par défaut Re:Nombre aléatoire UNIQUE

Bonjour tochiro, salut robert

Une petit variation, sur le meme thème :

Citation:
OptionExplicit
Sub Bouton2_QuandClic()
Dim i As Byte, num As Byte, j AsByte
Dim tablo(1 To 199)

For i = 1 To 199
debut:
&nbsp; &nbsp; num = Int(200 * Rnd)
&nbsp; &nbsp;
For j = 1 To UBound(tablo, 1)
&nbsp; &nbsp; &nbsp; &nbsp;
If num = tablo(j) ThenGoTo debut
&nbsp; &nbsp;
Next j
tablo(i) = num
Range('c' & i) = num
Next i

EndSub
J'en profite pout tester la macro complémentaire de sylvain.

Par contre robert comment tu fais pour sortir un 0 en aléatoire, je n'y suis pas arrivé ???

Salut
Hervé est déconnecté   Réponse avec citation
Vieux 19/05/2005, 13h33   #6 (permalink)
XLDnaute Occasionel
 
Date d'inscription: mai 2005
Messages: 220
Par défaut Re:Nombre aléatoire UNIQUE

Bonjour le forum,

Bravo et merci à Robert pour les commentaires sur chaque ligne de code.
jepi67 est déconnecté   Réponse avec citation
Vieux 19/05/2005, 18h01   #7 (permalink)
PhiBou
Guest
 
Messages: n/a
Par défaut Re:Nombre aléatoire UNIQUE

Bonjour Jepi67, Hervé, Robert, le Forum

Sans macro sur 3 colonnes

Colonne A (de 1 à 200) = Alea()
Colonne B (de 1 à 200) les nombres de 0 à 199

Cellule C1 :
=RECHERCHEV(PETITE.VALEUR($A$1:$A$200;LIGNE());$A$ 1:$B$200;2;0)

et recopie incrémentée de C1 à C200

F9 pour nouveau tirage

Bonne journée

PhiBou
  Réponse avec citation
Vieux 19/05/2005, 22h10   #8 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2005
Messages: 5
Par défaut Re:Nombre aléatoire UNIQUE

merci à tous...

si je reviens sur la macro de Robert, en fait je veux faire un certain nombre de colonnes contenant les 200 aléatoires (c'est pour appeler une colonne à partir d'un prog en VB pour un découpage/recollage de fichier avant de balancer dans un algorithme de cryptage).

Donc, il faudrait que je puisse sélectionner une cellule de tête (ex C1) en cliquant dessus, et qu'en lançant la macro, ça se déroule dedans. Pour l'instant je ne veux pas la solution, j'aimerai juste connaître la fonction qui permet de renvoyer le nom de la cellule active car je ne la trouve pas. Exemple, si je sélectionne B1 avec le mulot, quelle fonction me renverra B1 dans la macro ?
Tochiro est déconnecté   Réponse avec citation
Vieux 20/05/2005, 01h32   #9 (permalink)
XLDnaute Barbatruc
 
Avatar de Robert
 
Date d'inscription: février 2005
Localisation: Sète
Version Excel : Excel 2003 (PC)
Messages: 2 903
Par défaut Re:Nombre aléatoire UNIQUE

Bonsoir le Fil, Tochiro, le forum,

Pour répondre à ton dernier post la même macro (de 0 à 199 cette fois) mais tu cliques sur une cellule avant pour déterminer la colonne :


Citation:
Option Explicit 'oblige à déclarer toutes les variables

Sub Macro1()
Dim x As Byte 'déclare la variable x
Dim ad As String 'déclare la variable ad
Dim c As Range 'déclare la variable c
Dim col As Integer 'déclare la variable col
col = ActiveCell.Column 'définit la variable col
Randomize 'lance la fonction aléatoire
For x = 1 To 199 'boucle sur 199 cellule
If Cells(1, col) = '' Then 'condition1 : si la cellule A1 est vide, alors
Cells(1, col) = Int(199 * Rnd) 'A1 = aléatoire ente 0 et 199
Else 'sinon
Cells(x, col) = Int(199 * Rnd) 'la cellule A_x = aléatoire entre 0 et 99
With Range(Cells(1, col), Cells(x, col)) 'avec la plage A1:A_x
Set c = .Find(Cells(x, col).Value, , , xlWhole) 'définit la variable c = chercher la première valeur de A_x
If Not c Is Nothing Then 'condition2 : si recherche non infructueuse
ad = c.Address 'définit la variable ad (adresse de la première valeur trouvée = A_x)
Set c = .FindNext(c) 'redéfinit la variable c = prochaine valeur A_x recherché
If Not c Is Nothing And c.Address <> ad Then 'condition3 : si recherche non infructeueuse et adresse différente de la premiere valeur trouvée
x = x - 1 'redéfinit la variable x
End If 'fin condition3
End If 'fin condition2
End With 'fin avec plage A1:A_x
End If 'fin condition1
Next x 'prochaine cellule de la boucle
Cells(Int(200 * Rnd) + 1, col).Select 'sélectione aleatoirement une cellule dans la plage (1:200)
Selection.Insert Shift:=xlDown 'insère en décalant vers le bas
Selection.Value = 199 'place la dernière valeur = 199
Cells(1, col).Select 'sélectionne la première cellule
End Sub
__________________
À plus

Robert
Robert est déconnecté   Réponse avec citation
Vieux 20/05/2005, 02h04   #10 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2005
Messages: 5
Par défaut Re:Nombre aléatoire UNIQUE

arf, jvoulais que la fonction sans la solution pour faire travailler ma ptite cervelle et comprendre... mais c'est si bien expliqué, merci beaucoup (j'avais corrigé un peu car ça remplissait de la ligne 1 à 201 inclus).

encore merci.
Tochiro est déconnecté   Réponse avec citation
Vieux 11/02/2006, 20h19   #11 (permalink)
bears
Guest
 
Messages: n/a
Par défaut Re:Nombre aléatoire UNIQUE

slt

je voulais savoir si on pouvais faire en sorte que cellule où il y a ecrit:

=RECHERCHEV(PETITE.VALEUR($A$1:$A$200;LIGNE());$A$ 1:$B$200;2;0)

ne change pas lorsque l'on fait entrer, ou que l'on change une cellule?

merci
  Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +2. Il est actuellement 17h21.


(C) 2006 Excel Downloads