Nombre aleatoire sans doublons

Bonjour,

Je vous envois-ci joint un projet que je suis entrain de faire pour les cours.

Dans la procédure POPULATION_INITIALE (la seconde) j'essaie à chaque ligne de mon tableau POPULATION_SEQUENCES de générer des nombres aléatoires sans doublons compris entre 1 et 5 ( la valeur 5 est dans la variable produits).

Cependant j'ai beau avoir regardé plusieurs forums, je ne sais vraiment pas comment faire. Est ce que quelqu'un pourrait m'aider dessus?

Merci d'avance!!

IBWALA Tuma-Nkisial

Petite précision : je fais un code VBA!!

Bonjour ibwalatuma,

Voici une fonction qui retourne un tableau de nbr éléments tirés au hasard (sans doublons) dans la suite des nombres consécutifs qui débute à deb et se termine à fin : Function NbAlea(deb As Long, fin As Long, nbr As Long)

NbAlea(1, 9, 5) retourne un tableau de 5 éléments entre 1 et 9 (sans doublons)

Le code est:

Function NbAlea(deb As Long, fin As Long, nbr As Long)
Dim i&, k&, n&, aux, t
   If nbr > (fin - deb + 1) Then NbAlea = CVErr(xlErrNA): Exit Function
   Randomize
   ReDim t(1 To (fin - deb + 1))
   For i = 1 To (fin - deb + 1): t(i) = deb + i - 1: Next
   For k = 1 To 3
      For i = 1 To (fin - deb + 1)
         n = 1 + Int(Rnd * (fin - deb + 1))
         aux = t(i): t(i) = t(n): t(n) = aux
      Next i
   Next k
   ReDim Preserve t(1 To nbr)
   NbAlea = t
End Function

La macro test montre comment utiliser la fonction.

Bonjour Mapoire

Merci pour l'aide !!

Mais comment je fais pour insérer ce code dans ma procédure, sachant que j'ai déjà le tableau POPULATION_INITIALE et que c'est lui que je veux utiliser ?

Merci de votre réponse !

Re,

Mais comment je fais pour insérer ce code dans ma procédure, sachant que j'ai déjà le tableau POPULATION_INITIALE et que c'est lui que je veux utiliser ?

En fournissant un fichier fonctionnel pour qu'on puisse travailler dessus.

Il n'est pas fonctionnel celui que j'ai envoyé ?

Qu'est ce qui ne va pas ?

Salut ibwalatuma,

Salut Ma Poire,

Sub population_initiale()
'CREATION DE LA POPULATION INITIALE
Dim tRnd(5), x%, y%, iIdx%
'
'AFFICHAGE DE L'ORDRE
For x = 0 To [E2]
    Cells(16, x + 2).Value = x
Next
'creation population initiale et chromosomes avec nombres aleatoires sans doublons
For x = 0 To maximum Step 5
    Erase tRnd
    For y = 0 To [E2]
        Do
            Randomize
            iIdx = WorksheetFunction.RandBetween(0, 5)
        Loop Until tRnd(iIdx) = 0
        tRnd(iIdx) = 1
        Cells(x + 17, y + 2) = iIdx
    Next
Next
'
End Sub

A+

Merci beaucoup curulis57

Cependant est ce que vous pouvez m'expliquer un peu pcq je suis un peu perdu XD

Ça représente quoi trnd(5), x%, y%, iIdx%? C'est quoi comme type de variable ? Que représente [E2]? Comment il est initialisé ?

Pourquoi il n'y a plus le tableau POPULATION_SEQUENCE alors que j'en ai besoin pour le remplir ?

Merci davance !!

Re ibwalatuma , bonjour curulis57

Pour ma part utiliser le code suivant à insérer dans votre module:

Sub population_initiale()
Dim x&
produits = [e2]: sequences = produits + 1: maximum = sequences * 5
'création population initiale et chromosomes avec nombres aleatoires sans doublons
   For x = 0 To sequences: Range("b17").Offset(5 * x).Resize(, 6) = NbAlea(0, 5, 6): Next
End Sub

Function NbAlea(deb As Long, fin As Long, nbr As Long)
Dim i&, k&, n&, aux, t
   If nbr > (fin - deb + 1) Then NbAlea = CVErr(xlErrNA): Exit Function
   Randomize
   ReDim t(1 To (fin - deb + 1))
   For i = 1 To (fin - deb + 1): t(i) = deb + i - 1: Next
   For k = 1 To 3
      For i = 1 To (fin - deb + 1)
         n = 1 + Int(Rnd * (fin - deb + 1))
         aux = t(i): t(i) = t(n): t(n) = aux
      Next i
   Next k
   ReDim Preserve t(1 To nbr)
   NbAlea = t
End Function

Quand on déclare une variable comme étant de type Integer, on écrit: Dim xx as Integer

VBA autorise un raccourci qui est %, on peut donc écrire: Dim xx%

[E2] demande à Excel de retourner l'évaluation de la cellule E2. Ici [E2] représente donc la valeur de la cellule E2.

On vous fournit des exemples de codes. A vous de mettre les mains dans le cambouis pour les adapter à vos souhaits.

Je vous avais dit que votre fichier n'est pas opérationnel:

  • Quand on lance la procédure Main(), elle ne trouve pas le classeur "sans_decomposition_3.xlsm" dans l'instruction Workbooks("sans_decomposition_3.xlsm").Activate
  • Quand on lance directement population_initiale(), les variables ne sont pas initialisées, donc on a adapté pour les tests. J'ai initialisé directement les variables produits, sequences et maximum
60ibwalatuma-v2.xlsm (37.65 Ko)
Rechercher des sujets similaires à "nombre aleatoire doublons"