Moteur de recherche aléatoire dans une liste en fonction d'une variable

Bonjour à tous,

J'ai récemment créé un fichier avec une liste de livre. Mais je n'arrive pas à créer une fonction qui me permettrai de sélectionner aléatoirement un titre de livre en fonction d'une variable (ici, la catégorie). Je voudrais pouvoir entrer le nom d'une catégorie (eg. Roman) dans une cellule, et qu'un titre aléatoire se trouvant dans cette catégorie apparaisse dans la cellule d'à côté.

Merci d'avance pour vos conseils,

Antoine

20liste-lecture.xlsx (9.86 Ko)

PS. C'est mon premier message sur ce forum. Si j'ai mal fait les choses, dite-le moi.

Bonjour,

proposition avec le détail du calcul, colonnes G H et I que tu peux masquer.

12liste-lecture.xlsx (11.63 Ko)

Hello, je voulais tester un truc en VBA, manière de m'exercer.
C'est un foirage total.

Même si je voulais copier temporairement les donnés enregistrées dans le tableau, en les transposant, ça ne fonctionne pas.

Help ?

Sub test()
Dim tablo()
Dim nb As Integer
nb = WorksheetFunction.CountIf(Range("Table2[Catégorie]"), [G1])
ReDim tablo(nb - 1, 1)
For i = 0 To WorksheetFunction.CountA(Range("Table2[Catégorie]"))
    If Range("C" & i + 2) = [G1] Then tablo(i, 1) = Range("A" & i + 2)
Next

Range("A11").Resize(UBound(tablo, 1), UBound(tablo, 1)) = tablo

Randomize
    nombre_aleatoire = Int(nb * Rnd) + 1
' ICI FOIRAGE
    [G2] = tablo(nombre_aleatoire, 1).Value ' l'idée aurait été de choisir une ligne aléatoire dans le tableau en mémoire...
End Sub

Bonjour à tous,

@JoyeuxNoel : Enlève le .Value sur ta dernière ligne

Hello,

J'avais essayé sans le .value avant mais, que je le mette ou non, ça me dit que l'indice n'appartient pas à la sélection.

J'avoue que je ne sais pas...

J'ai remplacé nb par 3 dans nombre_aleatoire = Int(nb * Rnd) + 1 -> plantage
Par contre que je remplace nb par 2 -> ça marche.

Je me demande si ce n'est pas un problème d'indexation

Exact, ça fait déjà avancer un peu, merci !

Je deviens fou, il ne me laisse même pas mettre Option base 1 pour voir ce que ça peut donner...

Arghhhhh

image

JoyeuxNoel, OptionBase1 se place en dehors d'une procédure ! Place-le devant ton Sub Test()

@ Antoine,

pendant que ces messieurs s'amusent, voici une solution plus intégrée sans colonne supplémentaire

=INDEX(Table2[Publication];ALEA.ENTRE.BORNES(EQUIV(F2;Table2[Catégorie];0);EQUIV(F2;Table2[Catégorie];1)))

Hey, merci beaucoup !!

J'allais abandonner, et puis voilà, ça fonctionne ...

Option Base 1
Sub test()

Dim tablo()
Dim nb
nb = WorksheetFunction.CountIf(Range("Table2[Catégorie]"), [G1])
ReDim tablo(nb, 1)
J = 1
For i = 2 To Range("Table2[Catégorie]").Rows.Count + 1
    If Range("C" & i) = [G1] Then tablo(J, 1) = Range("A" & i): J = J + 1
Next

Range("A11").Resize(UBound(tablo, 1), UBound(tablo, 1) + 1) = Application.Transpose(tablo)

Randomize
    nombre_aleatoire = Int(nb * Rnd) + 1
    [G2] = tablo(nombre_aleatoire, 1)
End Sub

Par contre, la partie qui colle le tableau en A11 ne donne pas ce que je veux. C'est décalé en colonne B, et les résultats m'échappent.

J'en ai marre de ne pas comprendre ce que je fais :D

bonjour,

remplace ceci

Range("A11").Resize(UBound(tablo, 1), UBound(tablo, 1) + 1) = Application.Transpose(tablo)

par

Range("A11").Resize(UBound(tablo), 1) = tablo

Ah super, merci beaucoup !

Bon, il y avait un ,1) en trop, mais ça a été vite réglé.

Ça fait un long moment que je bute sur ces tableaux. Je ne dois pas visualiser correctement comment cela s'articule et fonctionne. Ce n'est pourtant pas faute d'avoir parcouru l'article de silkyroad en long en large et en travers plusieurs fois...

Bon, il y avait un ,1) en trop, mais ça a été vite réglé.

correct !

Bonsoir à tous,

Merci beaucoup pour votre aide ! C'est fort sympathique.

Je n'avais pas encore explorer la solution VBA qui me paraissait inaccessible vu mon niveau actuel dans ce langage, mais je vais me pencher dessus, pour arriver à une version beaucoup plus avancée de mon fichier.

En attendant, je vais pouvoir bidouiller avec les fonctions INDEX et MATCH, que vous m'avez présentées.

Je vous remercie bien !

Tu peux donc clore le sujet en cliquant sur V

Rechercher des sujets similaires à "moteur recherche aleatoire liste fonction variable"