Renvoi de la valeur d'une cellule aléatoire

Bonjour,

Dans mon classeur j'ai 4 feuilles. Dans la colonne A de ces 4 feuilles j'ai des valeurs et dans la colonne B j'ai des noms. Le nombre de lignes varie selon la feuille (dans ma première feuille j'ai 100 lignes, dans la seconde 500, etc...)

Dans une 5ème feuille je souhaiterais qu'en A1, une valeur sélectionnée aléatoirement parmi la première colonne de mes 4 feuilles soit renvoyée, qu'en B2 s'inscrive le nom qui lui est associé dans la seconde colonne, et qu'enfin en C2 s'inscrive le nom de la feuille d'où cette valeur a été extraite.

Je précise que je souhaiterais que chaque cellule soit équiprobable. C'est à dire que si, comme dans mon exemple, la Feuille1 comporte 100 lignes et la Feuille2 500 lignes, il y aura 5 fois plus de chance que ma cellule soit sélectionnée dans la Feuille2 que dans la Feuille1.

Comment faire?

Merci!

Bonjour,

Une solution :

Sub test()
Dim i1%, i2%, i3%, i4%, a, b, c, d, r, iTT%, iAlea%, Ws%
i1 = Feuil1.Range("A65000").End(3).Row
a = Feuil1.Range("A1:B" & i1)
i2 = Feuil2.Range("A65000").End(3).Row
b = Feuil2.Range("A1:B" & i2)
i3 = Feuil3.Range("A65000").End(3).Row
c = Feuil3.Range("A1:B" & i3)
i4 = Feuil4.Range("A65000").End(3).Row
d = Feuil4.Range("A1:B" & i4)
iTT = i1 + i2 + i3 + i4
iAlea = Int((iTT * Rnd) + 1)
Select Case iAlea
Case Is <= i1: r = a: Ws = 1
Case Is <= i1 + i2: r = b: iAlea = iAlea - i1: Ws = 2
Case Is <= i1 + i2 + i3: r = c: iAlea = iAlea - (i1 + i2): Ws = 3
Case Else: r = d: iAlea = iAlea - (i1 + i2 + i3): Ws = 4
End Select
Feuil5.Range("A1") = r(iAlea, 1)
Feuil5.Range("B1") = r(iAlea, 2)
Feuil5.Range("C1") = Worksheets(Ws).Name
End Sub

Nota : Comme il n'y a pas de classeur joint j'ai utilisé les 5 premières feuilles d'un classeur standard (version française)

A+

Merci beaucoup galopin!!

Dans mon message original j'ai simplifié mon problème de manière à le rendre plus lisible, ce que je n'aurai pas du faire car je n'arrive pas à faire fonctionner le code... J'ai joint mon classeur à ce message.

En réalité, j'ai 10 feuilles. Mes données à sélectionner aléatoirement sont en colonne C de chaque feuille (la colonne "Odds").

Les valeurs a afficher en B1 de la feuille de resultats (la feuille SimB de mon classeur) sont en colonne C ("Stake") de chaque feuille.

Pour tester le code sur les 4 premières feuilles uniquement, car je ne sais pas comment rajouter les autres, j'ai donc effectué les modification suivantes par rapport au code posté:

    Sub test()
    Dim i1%, i2%, i3%, i4%, a, b, c, d, r, iTT%, iAlea%, Ws%
    i1 = Beatle.Range("D65000").End(3).Row
    a = Beatle.Range("D1:C" & i1)
    i2 = Auber.Range("D65000").End(3).Row
    b = Auber.Range("D1:C" & i2)
    i3 = Coin.Range("D65000").End(3).Row
    c = Coin.Range("D1:C" & i3)
    i4 = Snake.Range("D650").End(3).Row
    d = Snake.Range("D1:C" & i4)
    iTT = i1 + i2 + i3 + i4
    iAlea = Int((iTT * Rnd) + 1)
    Select Case iAlea
    Case Is <= i1: r = a: Ws = 1
    Case Is <= i1 + i2: r = b: iAlea = iAlea - i1: Ws = 2
    Case Is <= i1 + i2 + i3: r = c: iAlea = iAlea - (i1 + i2): Ws = 3
    Case Else: r = d: iAlea = iAlea - (i1 + i2 + i3): Ws = 4
    End Select
    SimB.Range("A1") = r(iAlea, 1)
    SimB.Range("B1") = r(iAlea, 2)
    SimB.Range("C1") = Worksheets(Ws).Name
    End Sub

Or j'obtiens le message d'erreur suivant:

Erreur d'execution '424'. Objet requis.

Qu'est-ce qui ne va pas? Puis comment ajouter les autres feuilles? Enfin comment faire pour que ce code tourne en boucle un nombre x de fois et inscrive chaque nouveau résultat dans une nouvelle ligne le la feuille SimB

16simulmcf.xlsm (265.67 Ko)

bonjour,

Voir en pièce jointe.

Dans la macro il n'est pas tenu compte du nom des feuilles.

La feuille résultat (SimB) doit impérativement être la dernière dans l'ordre des onglets.

A+

30simulmcf-vg.xlsm (273.68 Ko)

Vraiment trop cool. Je te remercie infiniment pour ton aide

Seul petit soucis la valeur renvoyée est parfois l'en-tête des colonnes car apparemment la première ligne de chaque feuille n'est pas exclue de la sélection aléatoire.

Bonsoir,

Effectivement, initialement il n'était pas question d'en-tête de colonnes...

La solution en pièce jointe.

PS : Compter une vingtaine de secondes pour 10 000 tirages...

A+

32simulmcf-vg2.xlsm (274.08 Ko)
Rechercher des sujets similaires à "renvoi valeur aleatoire"