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 !
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 FunctionLes 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 !