Fonction ALEA.ENTRE.BORNES sans doublons

Bonjour à tous,

J'ai un problème que je n'arrive pas à résoudre malgré les quelques heures que je viens de passer sur différents forums.

Je dois faire une table de randomisation dans le cadre des mes expériences (je travaille dans la recherche en bio). J'ai donc utilisé la fonction ALEA.ENTRE.BORNES entre 1 et 16 (le nombre de sujet de l'étude que je dois diviser en 2 groupes) mais des doublons apparaissent. Sur certains forums, ils parlent de faire une macro mais je ne suis pas une pro d'Excel et j'ai pas mal de difficultés à la mettre en place.

Quelqu'un pour m'aider ?

Merci d'avance !

bonsoir,

une proposition via une macro

540bioresearch.xlsm (16.35 Ko)

Bonjour,

Une fonction personnalisée :

Function TIRAGESELEC(n As Integer)
    Dim tabt(), tablo() As Integer, i%, m%, x%
    Application.Volatile False
    If n < 1 Then
        TIRAGESELEC = CVErr(xlErrNum)
        Exit Function
    End If
    m = Selection.Cells.Count
    ReDim tabt(1 To m)
    If m > n Then
        For i = n + 1 To m
            tabt(i) = CVErr(xlErrNA)
        Next i
        m = n
    End If
    ReDim tablo(n)
    For i = 1 To n
        tablo(i) = i
    Next i
    Randomize
    For i = 1 To n
        x = Int(n * Rnd + 1)
        tablo(0) = tablo(x)
        tablo(x) = tablo(i)
        tablo(i) = tablo(0)
    Next i
    tablo(0) = tablo(n)
    x = Int(n * Rnd + 1)
    For i = 1 To m
        tabt(i) = tablo((x - 1 + i) Mod n)
    Next i
    If Application.Caller.Rows.Count > 1 Then
        TIRAGESELEC = Application.Transpose(tabt)
    Else
        TIRAGESELEC = tabt
    End If
End Function

Les fonctions personnalisées s'utilisent comme les fonctions natives d'Excel. Cette fonction tire aléatoirement des valeurs numériques en nombre correspondant au nombre de cellules sélectionnées sur une ligne ou une colonne, parmi des nombres de 1 au nombre indiqué en argument de la fonction, sans doublon naturellement.

Par exemple : on sélectionne A5:D5 (4 cellules), on tape : =TIRAGESELEC(20), on valide par Ctrl+Maj+Entrée [la fonction est matricielle], 4 nombres différents parmi les nombres 1 à 20 apparaîtront en A5:D5.

Bien évidemment, si on sélectionne B2:B17 (16 cellules), on met =TIRAGESELEC(16), ce sont les nombres 1 à 16 qui seront répartis en B2:B17.

La fonction ne se recalcule pas lors des recalculs (contrairement aux fonctions ALEA... d'Excel). Plus grande stabilité mais cela ne vaut que pour la session, pour conserverles valeurs au-delà, il faudra écraser les formules.

Code de la fonction à placer dans un module Standard.

Cordialement.

edit : Salut h2so4 !

Rechercher des sujets similaires à "fonction alea entre bornes doublons"