Nombre aleatoire

Résolu
lispo Messages postés 49 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 1 septembre 2008 - 28 janv. 2007 à 19:58
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 1 févr. 2007 à 00:33
Bonjour,



Voilà j ‘essaye de faire une macro en vba



J’ai des noms qui se trouve dans  Range (" A5 :A15 ") je voudrais qu’il prenne un nom au hasard et qu’il le met dans un TextBox



Merci au volontaire



 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





 

10 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 févr. 2007 à 00:33
Une autre piste... en fait, je ne comprends pas vraiment ce que tu cherches à faire mais bon... Tu sembles vouloir récupérer les valeurs des cellules de A5 à A15 de façon aléatoire, donc 11 possibilités ( 1 à 11 - Min à Max)

Sub MaSub()
    Dim I As Integer, Valeur As String
   
    Randomize
   
    'On recherche 8 valeurs
    For I = 1 To 8
        'À chaque valeur aléatoire retournée par la fonction (ici 1 à 11),
        'on descend du nombre de lignes de cette valeur à partir de Range(A 4 )
        'puis on lit cette valeur qu'on accumule dans une String
        Valeur = Valeur & Range("A4").Offset(Hasard(1, 11), 0) & vbCrLf
    Next
   
    MsgBox Valeur         'Ici tu fais ce que tu veux avec ces 8 valeurs
End Sub

Function Hasard(Min As Integer, Max As Integer) As Integer

    Hasard = Int((Max * Rnd) + Min)

End Function

MPi
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 janv. 2007 à 20:00
Voir Randomize et Rnd dans ton aide en liggne
Reviens avec ton code d'essai si tu rencontres une difficulté d'application
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 janv. 2007 à 22:52
Un petit ajout au cas où...
Randomize devrait être mis en tout début de la procédure ou dans Initialize du UserForm, si c'est le cas.

Je précise parce que j'ai vu des gens qui mettait Randomize à l'intérieur d'une boucle, ce qui ne devrait pas...

MPi
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 janv. 2007 à 07:27
ce genre de choses ... :

Function GetRandomCell(ByRef voInRange As Range) As Range
Dim nRow As Long
Dim nCol As Long
    Randomize
   
    With voInRange
        If (.Column = .SpecialCells(xlCellTypeLastCell).Column) Then
            nCol = .Column
            nRow = .Row + Rnd * (.SpecialCells(xlCellTypeLastCell).Row - .Row)
        Else
            nRow = .Row
            nRow = .Column + Rnd * (.SpecialCells(xlCellTypeLastCell).Column - .Column)
        End If
        Set GetRandomCell = .Worksheet.Cells(nRow, nCol)
    End With
End Function


Sub test()
    MsgBox GetRandomCell(ActiveSheet.Range("A5:A15")).Text
End Sub

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lispo Messages postés 49 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 1 septembre 2008
29 janv. 2007 à 09:53
Re-Bonjour,
desoler vous allez un peux vite pour moi,
Voila je voudrez afficher le nom selectionner dans un msgbox
j'ai essayer comme cela mais il y a un hik
ex:
Private Sub lblp_Click()
msgbox = INDEX(A5:A15;ENT(ALEA()*(10-1)+1))
End Sub
merci d'avance
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 janv. 2007 à 11:28
Si je comprends bien, tu mélanges les formules Excel (dans les cellules) et la technique VBA (le code de Renfield, par exemple)

Si tu veux utiliser ta technique, il faudrait afficher ta formule dans une cellule quelconque au préalable.

'Changer Z1 pour une cellule de ton choix
Range("Z1").FormulaLocal = "=INDEX(A5:A15;ENT(ALEA()*(10-1)+1))"
msgbox Range("Z1").Value
Range("Z1") = ""

MPi
0
lispo Messages postés 49 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 1 septembre 2008
29 janv. 2007 à 18:51
Bonjour,

J’ai essayé mai il bloque sur la deuxième ligne et il affiche (Type mismatch)

 Est ce peut être à cause que ma liste contient du texte et non chiffres

Range("B17").FormulaLocal = "=INDEX(A5:A15;ENT(ALEA()*(10-1)+1))"
MsgBox (Range("B17").Value)
0
lispo Messages postés 49 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 1 septembre 2008
29 janv. 2007 à 19:57
En fait-je désire seulement choisir un nom au hasard dans ma liste et c’est tout



Si quelqu’un pouvait m’éclairer ça serais vraiment gentil a lui ou (a elle)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 janv. 2007 à 00:17
Essaie ceci
Dans la colonne A, sur 10 lignes, rentre les lettres a, b, c, d...
En B1, mets cette formule et copie-la sur les 10 lignes (à refaire plusieurs fois pour voir le changement)
=RECHERCHEV(   INDEX($A$1:$A$10;ENT(ALEA()*(10-1)+1));$A:$A;   1;   FAUX)

MPi
0
lispo Messages postés 49 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 1 septembre 2008
30 janv. 2007 à 15:32
Re_salut<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Vu que je m’étais mélanger les pinceaux, j’ai refait ça d’une autre manière





J’ai mis mon nombre aléatoire dans  un select case(function hasard) et ma select case associer a ma liste (Range " A5 :A15 ")





Et je l’appelle par une boucle





Le hic c’est qu’après deux instructions je bloque, je n’arrive pas a enchaîné les  6 autres instructions (il doit choisir 8 noms au total)





 





 
Function hasard()
Dim Nombre As Integer
Nombre = Rnd() * ((10 - 1) + 1)
Select Case Nombre
Case 0
 nom = Range("A5").Text
Case 1
nom = Range("A6").Text
Case 2
nom = Range("A7").Text
Case 3
nom = Range("A8").Text
Case 4
nom = Range("A9").Text
Case 5
nom = Range("A10").Text
Case 6
nom = Range("A11").Text
Case 7
nom = Range("A12").Text
Case 8
nom = Range("A13").Text
Case 9
nom = Range("A14").Text
Case 10
nom = Range("A15").Text
End Select
End Function
''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''
Dim liste(1 To 8) As String
Randomize

Do
 Call hasard
 Txb8_1.Text = nom
 liste(1) = Txb8_1.Text
 Call hasard
 Txb8_2.Text = nom
 liste(2) = Txb8_2.Text
 Loop While liste(1) = liste(2)





 





Si quelqu’un pouvait m’aider ça serais cool 
0
Rejoignez-nous