Pseudo aléatoire sous conditions

Tout d'abord permettez-moi de me présenter, étant tout nouveau sur le forum.

Dans le cadre d'une étude, je veux faire de l'aléatoire pour deux conditions (condition "position dans le diapo" + "n° diapositive") (voir les deux colonnes centrales dans le fichier joint). Je précise que l'idée consiste faire correspondre pour un même numéro de diapositive les 4 positions (e.g., "diapo 58 : position 1;2;3;4).

Or, j'ai des doublons dans le fichier : pour un même numéro de diapositive, j'ai plusieurs fois la même position (e.g., "diapo 58 : position 1;1;4;1).

Pourriez-vous m'aider sur ce point ? Un grand merci par avance !

Bonjour,

une solution via une macro

Sub tirage()
    Dim n(512)
    Range(Cells(6, 17), Cells(517, 18)).ClearContents
    For i = 1 To 512
        n(i) = i
    Next i
    ni = 512
    For d = 1 To 128
        For p = 1 To 4
            q = Application.RandBetween(1, ni)
            nq = n(q)
            n(q) = n(ni)
            ni = ni - 1
            Cells(nq + 5, 17) = p
            Cells(nq + 5, 18) = d
        Next p
    Next d

End Sub

Je teste ça et te redis quoi tout à l'heure.

Super ! Ca fonctionne du feu de Dieu ! Peux-tu m'expliquer la logique de la macro histoire que je puisse "comprendre" pour éventuellement l'implémenter dans d'autres fichiers et sous d'autres formes.

Bonjour,

1) plutôt que de tirer au hasard un numéro de dia et une position, la macro met une image au hasard (parmi les images non encore utilisées) dans chaque position de chaque dia.

2) algorithme de tirage au sort

on crée une liste avec tous les numéros à tirer

on tire une position au hasard dans cette liste

on prend le numéro trouvé à cette position

on recopie le dernier élément de la liste à cette position

on diminue de 1 le nombre d'éléments dans la liste

3) explications dans les commentaires du code

Sub tirage()
    Dim n(512) 'n contient les numéros d'images non encore tirées
    Range(Cells(6, 17), Cells(517, 18)).ClearContents ' on efface le contenu des colonnes 17 et 18
    For i = 1 To 512 ' on charge les numéros d'images dans n
        n(i) = i
    Next i
    ni = 512 'ni = nombre d'images non encore tirées
    For d = 1 To 128 ' on prend chaque dia
        For p = 1 To 4 ' on prend chaque position
            q = Application.RandBetween(1, ni) ' q=  un numéro d'index d'une image disponible tiré au hasard
            nq = n(q) ' nq = numéro d'image trouvé à la position q
            n(q) = n(ni) ' on recopie le dernier numéro d'image en position q
            ni = ni - 1 ' on diminue de 1 le nombre d'images disponibles
            Cells(nq + 5, 17) = p ' on indique la position en regard de l'image tirée
            Cells(nq + 5, 18) = d ' on indique la dia en regard de l'image tirée
        Next p
    Next d

End Sub
Rechercher des sujets similaires à "pseudo aleatoire conditions"