Recherche & référence Rand_Between_Nodouble

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
en attendant que je trouve l'astuce avec une formule excel de pouvoir faire une serie de nombre aléatoires sans doublons
j'ai créé la mienne dans une fonction perso
dans la video je montre comment je la met en application
Pour afficher ce contenu, nous aurons besoin de votre consentement pour définir des cookies tiers.
Pour plus d'informations, consultez notre page sur les cookies.

VB:
'------------------------------------------------------------------------------------------
'Created By patrickoulon
'------------------------------------------------------------------------------------------
'   FR:
'Fonction alea perso "AleaNotDouble" Created By patrickoulon qui ne génère pas de doulons
'selectionner  la plage de cellule ou vous voulez que la serie soit inscrite
'Attention le nombre de cellulles ne doit pas dépasser l'intervalle entre mini et maxi
'elle fonctionne sur  une selection horizontale (1 ligne et plusieurs colonnes) ou  (plusieurs lignes et 1 colonne)
'Exemple pour 10 cellules :formule ---> =AleaNoDouble(1:10)
'Exemple pour 10 cellules :formule ---> =AleaNoDouble(35;45)
'sur les version anterieures  à  2019 valider en matricielle (CTRL+MAJ+ENTER)
'------------------------------------------------------------------------------------------
'   US:
'Personal alea function "AleaNotDouble" Created By patrickoulon which does not generate pain
'select the cell range where you want the series to be entered
'be careful the number of cells must not exceed the interval between mini and maximum
'it works on a horizontal selection (1 line and several columns) or (several lines and 1 column)
'Example for 10 cells: formula ---> =AleaNoDouble(1:10)
'Example for 10 cells: formula ---> =AleaNoDouble(35;45)
'on versions prior to 2019 validate in matrix (CTRL+SHIFT+ENTER)
'------------------------------------------------------------------------------------------

Function Rand_Between_NoDouble(mini As Long, maxi As Long, Optional Dimension As Long = 1) As Variant
'variable utile
    Dim tbl, I&, X&, Temp, R As Range

    'FR: Gestion des erreurs eventuelles d'appel / US: 'Management of possible call errors
    If maxi < mini Then Rand_Between_NoDouble = "Err.min": Exit Function

    On Error Resume Next
    Set R = Application.Caller
    Err.Clear
    On Error GoTo 0
  
    If Not R Is Nothing Then
        If R.Cells.Count > 1 Then If (maxi - mini) > Application.Caller.Cells.Count Then Rand_Between_NoDouble = "Err.count": Exit Function
    End If
  
    'FR:creation du tableau (1 dimension)de nombres dans l'ordre avec evaluate transpose et ROW
    'US:creation of array (1 dimension) of numbers in order with evaluate transpose and ROW
    tbl = Evaluate("TRANSPOSE(ROW(" & mini & ":" & maxi & "))")

    'FR:boucle sur tout les items de la variable tableau(tbl)
    'US: loop over all the items of the table variable (tbl)
    For I = LBound(tbl) To UBound(tbl)

        'FR:on choisi un autre index au hasard / US: we choose another index at random
        X = LBound(tbl) + (Rnd * (UBound(tbl) - LBound(tbl)))

        'FR:on interverti l'item(i) avec l'item(x) / US: we invert item(i) with item(x)
        Temp = tbl(I): tbl(I) = tbl(X): tbl(X) = Temp
    Next

    'FR:si la fonction  a été appelée par une plage de cellules en formule matricielle
    'US:if the function was called by a range of cells in array formula

    'FR:si le caller est une colonne on transpose sinon il restera un tableau a 1 dimension
    'US: if the caller is a column we transpose otherwise it will remain a 1-dimensional table
    If TypeName(R) = "Range" Then If Application.Caller.Rows.Count > 1 Then tbl = Application.Transpose(tbl)
    
    'FR:si la fonction a été appelée en vba / US:if the function was called in vba
    If R Is Nothing Then If Dimension = 2 Then tbl = Application.Transpose(tbl)

    'FR:retour de la fonction / US:return of function
    Rand_Between_NoDouble = tbl
End Function

'----------------------------------------------------------------------------
Sub test1()
    'on obtiendra un tableau à 1 dimension
  X = Rand_Between_NoDouble(15, 25)
    MsgBox X(1)
End Sub

Sub test2()
   'on obtiendra un tableau à 2 dimensions
   X = Rand_Between_NoDouble(15, 25, 2)
    MsgBox X(1, 1)
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
569
Réponses
3
Affichages
449
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
482
Retour