nombre aleatoire via macro

drisou

XLDnaute Occasionnel
bonjour le forum, j ai tableau contenant 7 colonnes et une quarantaine de lignes , dans chaque colonne j ai 32 cellules vides dans lesquels je dois entrer des nombres de 1 a 32 sans qu il y est 2 fois le meme nombre dans la meme colonne , le reste des cellules sont deja rempli par des x. pour cela j ai une macro qui me rempli les cellules vides par les nombres, mais il me les rempli tj dans le meme ordre c est a dire de 1 a 32 et ce que je souhaiterais c est qu il me rempli les cellules par des nombres aleatoire compris entre 1 et 32.
voici ma macro.


Sub Verif()
'Déclaration des variables
Dim Cel As Range, Reponse As Integer, i As Integer
'ici on initialise un tableau (array) dans la mémoire de l'ordi
Dim MesSv(1 To 32)

'On scanne les 40 cellules dans la colonne où se trouve le curseur
'Exemple de B2 à B41, la ligne 1 est occupée avec les entêtes de notre tableau
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
'ici on remplit notre array avec des true ou des false
For i = 1 To 32
'Si la cellule contient la valeur de i
If Cel = i Then
'on place à true
MesSv(i) = True
End If
Next
Next

'Après traitement mettre les Sv en place
For i = 1 To 32
If MesSv(i) = False Then
Reponse = MsgBox('Le Sv ' & i & ' n'est pas attribué, Voulez-vous le distribuer', vbYesNo, 'SERVICES SEMAINE')
'si la réponse est oui
If Reponse = 6 Then
'pour trouver la première cellule vide de la colonne
For Each Cel In Range(Cells(7, Selection.Column), Cells(70, Selection.Column))
Cel.Select 'pas nécessaire mais cela permet de visualiser où l'on se trouve
If Cel = '' Then
Cel = i
'ici si on vient de remplir la cellule on doit quitter la boucle for each
GoTo Poursuite
End If
Next
ElseIf Reponse = 7 Then
'idem si on repond non, on quitte la boucle
GoTo Poursuite
End If
End If
'point de repère pour le Goto
Poursuite:
Next
End Sub

merci pour votre aide.
 
B

bebere

Guest
bonsoir Drisou
ds la pièce jointe tu trouveras plusieurs exemples
à bientôt [file name=TirageLoto.zip size=3252]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TirageLoto.zip[/file]
 

Pièces jointes

  • TirageLoto.zip
    3.2 KB · Affichages: 32

drisou

XLDnaute Occasionnel
merci bebere , les methodes sont superbes , mais le prob c est que moi je souhaite qu il me mette des nombres uniquement dans les cellules vides, or la il met des nombres meme dans les cellules ou j ai manuellement mis de valeurs et par consequent ce que j ai mis manuellemnt est effacé. merci
 
B

bebere

Guest
bonsoir

j'ai essayé le code suivant

Sub Aleatoire(NbTirés, Parmi, outArr())
'Denis Michon mpfe
Dim i As Integer, j As Integer
ReDim outArr(1 To NbTirés)
Do
i = Int(Rnd() * Parmi + 1)
If IsError(Application.Match(i, outArr, 0)) Then
j = j + 1
outArr(j) = i
End If
Loop Until j = NbTirés
End Sub

'exemple d'utilisation
Sub test()
dim l As Integer,cel as range
Dim Arr()
NbTirés = 32
Parmi = 32
Aleatoire NbTirés, Parmi, Arr
'Sheets.Add
'içi teste si cellule vide et met un item de arr
For Each Cel In Range('B2:B70')
If Cel = '' Then
l = l + 1
Cel.Value = Arr(l)
End If
Next Cel
End Sub
à bientôt
 

drisou

XLDnaute Occasionnel
re bonsoir, je vais etre un plus precis parce que c est vrai que je manque de precision; bebere la macro que tu ma donné marche ,si j enleve option explicite , donc je souhaite que la macro remplisse les cellules vides de la colonne b mais dans cette colonne il ya des cellules ou figure des valeurs numerique entré manuellement car ce sont des donnees precises . dans cette colonne doivent etre compris les valeurs entre 1 et 32 donc comme j entre certaines de ces valeurs manuellement lorsque je lance la macro il me met des nombres que j ai deja entré manuellement, ce que j aurais voulu c est que la macro me mette des nombres entre 1 et 32 mais en tenant compte des nombres qui sont deja dans les cellules de facon a ne pas avoir de doublons entre ceux mis par la macro et ceux entré manuellement.
merci
 

Hervé

XLDnaute Barbatruc
Bonsoir drisou, bebere, le forum

Drisou, si j'ai bien compris, une proposition en pièce jointe.

salut
[file name=Classeur2_20050917001112.zip size=8739]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur2_20050917001112.zip[/file]
 

Pièces jointes

  • Classeur2_20050917001112.zip
    8.5 KB · Affichages: 14

drisou

XLDnaute Occasionnel
salut herve , merci c tt a fait ca j ai recopier ton code et je l ai collé dans un module , mais il ne veut pas se lancer il me met 'erreur d execution 6' depassement de capacité.
cette ligne est en jaune dans vb: tablo(i - 1) = Cells(i, 2)

merci.
 

Hervé

XLDnaute Barbatruc
re tout le monde

Drisou, j'ai quelques difficultés à comprendre ton systeme.

Tu voudrais placer 32 chiffres àléatoires, mais tu n'a comme implacement de libre (entre les lignes 7 et 70 ) que 27 cellules dispo. :eek:

donc en pièce jointe, j'ai limité à 27 le nombre d'aléatoires.

salut
 

Hervé

XLDnaute Barbatruc
re

bon, nouvelle tentative planning.zip

salut

Edition : ouf
[file name=planning_20050917143440.zip size=33832]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/planning_20050917143440.zip[/file]

Message édité par: Hervé, à: 17/09/2005 14:34
 

Pièces jointes

  • planning_20050917143440.zip
    33 KB · Affichages: 23

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 232
Membres
103 497
dernier inscrit
JP9231