Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

  • Initiateur de la discussion Initiateur de la discussion alexbej
  • Date de début Date de début

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 !

alexbej

XLDnaute Nouveau
Bonjour,

Je cherche à générer une chaîne de chiffres semi-aléatoires, et plus précisément, à contrôler selon une variable la façon dont l'aléatoire est généré. Je m'explique: j'ai des histoires (dans la colonne A), qui appartiennent à 5 catégories différentes (a,b,c,d,e). Pour chaque catégorie, j'ai une quarantaine d'histoires. Je souhaiterai que l'ordre de l'ensemble des histoires (des 200 donc) soit aléatoire tout en évitant qu'il y ait une répétition de plus de 3 histoires d'une même catégorie (autrement dit je souhaite obtenir une chaîne comme a,d,e,a,c,c,b,e,d,e... et éviter une chaîne comme a,c,d,e,b,a,a,a,,e...).
Je suppose qu'il faut que j'associe à chaque histoire de la colonne A, une valeur aléatoire dans la colonne B qui me servira ensuite de tout trier. J'ai trouvé les fonctions =ALEA() et =ALEA.ENTRE.BORNES() , qui permettent de générer des chiffres aléatoires, mais aucun critère additionnel ne peut être établi. Est-ce possible de faire ça dans excel?? Une idée pour me permettre de respecter ce critère de non-répétition plus de 3 fois??

D'avance, merci beaucoup pour votre aide.
Alexandre
 
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Merci BrunoM45 de prendre le temps de me répondre.
Mais du coup, la formule =ALEA.ENTRE.BORNES() génère un chiffre aléatoire mais ne vas pas permettre d'éviter qu'il y ait une non-répétition d'une même catégorie. Peut-être mon précédent message n'était pas suffisamment clair. Ce que je cherche à faire, c'est classer mes 200 histoires de façon aléatoire mais en ÉVITANT d'avoir plus de 3 fois successivement une même catégorie. Si je les classe en utilisant la formule =ALEA.ENTRE.BORNES(), je vais potentiellement rencontrer ce problème...
 
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour Alex, Bruno

Une possibilité laborieuse dans le fichier joint. Mode d'emploi : appuyer sur le bouton, aller préparer un café, une réponse devrait être affichée en H1 au retour. Faire alors de suite un copier spécial valeur de la réponse autre part.

La macro associée au bouton ne fait que simuler l'appui sur la touche F9. Cette approche est possible car les conditions sont "raisonnables" (5 catégories, environ 40 éléments). Avec d'autre paramètres cette méthode risque de ne jamais aboutir.

Cordialement

KD.
 

Pièces jointes

Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour,

Regarde le fichier suivant : http://cjoint.com/?BFEvVjYQSFP

N.B. Comme l'ordre de tirage est aléatoire, il se peut fort bien que les 5 ou 10
derniers tirages, tu obtiennes une série d'une même catégorie. La fréquence
avec laquelle les catégories sortent au moment du tirage n'est pas régie.
La seule condition, c'est qu'il ne doit pas y avoir plus de 2 sorties consécutives
de la même catégorie...Que doit-il se passer si pour terminer 200 tirages, les 2 ou
10 dernières sorties appartiennent toutes à la même catégorie?

Si tu tiens avoir une fréquence de sortie comparable pour chacune des catégories,
tu fais 40 tirages de 5 éléments tous différents. Dans chaque tirage, chaque
catégorie est représentée au moins une fois.
 
Dernière édition:
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour le fil

Désolé, Alex je n'ai pas été assez explicite et toi pas assez curieux 😉

Dans mon fichier il y'a une macro qui génère un tirage de 20 histoires, il suffit de l'exécuter

A+
 
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour BrunoM45, MichD & KenDev,

Merci beaucoup pour vos réponses et le temps que vous prenez pour m'aider.

Tout d'abord, mes excuses BrunoM45 de ce manque de futilité!! C'est vrai que j'ai un peu manqué de curiosité sur ce coup là (et/ou négligé les compétences de mon interlocuteur!). Je viens donc d'essayer ta macro qui tourne sans problème mais dont je n'arrive pas à étayer la validité car je ne peux sélectionner le tirage pour le coller dans une colonne et voir s'il n'y a pas plus de 3 répétitions d'une même catégorie. Mes compétences d'écriture de macro étant très limitées, je n'arrive pas à coller le tirage dans une colonne annexe. Est-ce possible pour que je puisse ensuite trier mes données et vérifier que cela fonctionne bien?

KenDev, ta macro fonctionne bien dans le sens où elle génère correctement ce que je souhaite. Par contre sa mise en application me semble un peu compliqué. MichD, je ne sais pourquoi, mais je n'arrive pas à faire tourner la macro que tu m'as envoyée: je remplis la colonne A de a,b,c,d,e (qu'il compte correctement dans la colonne D), mais quand je lance la macro, il me dit qu'il y a une erreur de compilation (Projet ou bibliothèque introuvable).

Pour rendre ma demande plus claire et pour que votre aide puisse m'être la plus pratique possible, je vous mets en pj un fichier exemple. Ce qui serait super, c'est une macro qui me permette de générer dans la colonne E cette chaine de chiffres semi-aléatoires. Si, c'est possible, j'aimerai pouvoir définir en D2 le nombre maximal de répétition d'une même catégorie et dans la colonne C mes différentes catégories dont je ne souhaite pas la répétition successive plus d'un certain nombre de fois (nombre de fois, définis donc dans le colonne D2). Dans la colonne B, il y aurait la catégorie de chaque histoire. En fait, il n'est pas impossible que j'ai plus de 5 catégories et aussi que je n'ai pas le même nombre d'histoires (colonne A) dans chacune d'entre elles. Peut-être ça en rajoute à la difficulté...

A nouveau, merci pour votre aide et le temps que vous m'accorder.
Cordialement,

alexandre
 

Pièces jointes

Dernière édition:
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

mais quand je lance la macro, il me dit qu'il y a une erreur de compilation (Projet ou bibliothèque introuvable)


Tu ouvres l'éditeur de code (Alt + F11)
barre des menus / outils / références / et décoche tous les items marqués "Manquantes"
 
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour à tous,

@Alexandre : C'est toujours un peu désagréable, après avoir répondu correctement à une question, de s'entendre dire 'ah oui c'est bien mais en fait ma vrai question n'était pas celle là'.

Ceci dit ci joint un classeur répondant au nouvel énoncé (sauf erreur). Je me suis basé sur le classeur fournit et non sur sa description (les deux ne correspondent pas quand il s'agit de définir ou doit on lire le nombre de répétition maximal , où l'on doit écrire)

J'ai mis 6 catégories avec 6 quantités différentes à titre d'exemple.

Cordialement

KD
 

Pièces jointes

Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Bonjour,

Merci KevDev et désolé d'avoir suscité ton courroux de par ma maladresse. Je me suis sûrement mal expliqué dans mon premier message et j'ai voulu remédier à ça dans mon dernier message en donnant une feuille exemple. Ta macro marche impeccablement et correspond tout à fait à ce que je voulais. Je te remercie donc beaucoup.

Pour info MichD, j'ai réussi à lancer ta macro. Il y a un léger problème dans le sens ou tout est bien comme il faut jusqu'aux dernières lignes ou il y a à chaque fois une répétition d'une même catégorie (je suppose que c'est la catégorie, qui par le fait du hasard, a été sous représentée dans le début-milieu de la chaine).

Merci encore à vous trois et bon dimanche.
Alexandre
 
Re : Générer chiffres pseudo-aléatoire (aléatoire avec un critère)

Re,

Attention, un coquille : la ligne
Code:
Refaire:
est mal placée, la déplacer après la ligne
Code:
If r < 3 Then Exit Sub

Cordialement

KD

VB:
Option Explicit

Sub AJA()
Dim a&, Tc&(), r&, i&, Th$(), b&, Tr$(), c&, d As Boolean, Rg As Range, e%, Rep&
    Rep = Cells(2, 3)
    r = Cells(Rows.Count, 2).End(xlUp).Row
    If r < 3 Then Exit Sub
Refaire:
    ReDim Tc(1 To 1): a = 1: Tc(a) = 1: ReDim Th(1 To 2, 1 To r - 1): Th(1, 1) = Cells(2, 1): Th(2, 1) = Cells(2, 2)
    For i = 3 To r
        If Cells(i, 2) <> Cells(i - 1, 2) Then
            a = a + 1: ReDim Preserve Tc(1 To a): Tc(a) = 1
        Else
            Tc(a) = Tc(a) + 1
        End If
        Th(1, i - 1) = Cells(i, 1): Th(2, i - 1) = Cells(i, 2)
    Next i
    Randomize
    Do
        e = 0
        Do
            e = e + 1
            b = Int(UBound(Th, 2) * Rnd) + 1
            If c >= 2 Then
                d = False
                For i = 0 To Rep - 2
                    If Th(2, b) <> Tr(2, c - i) Then d = True: Exit For
                Next i
            End If
            If e > r Then GoTo Refaire
        Loop Until c < Rep Or d
        c = c + 1: ReDim Preserve Tr(1 To 2, 1 To c)
        Tr(1, c) = Th(1, b): Tr(2, c) = Th(2, b)
        If c = r - 1 Then Exit Do
        For i = b To UBound(Th, 2) - 1
            Th(1, i) = Th(1, i + 1): Th(2, i) = Th(2, i + 1)
        Next i
        ReDim Preserve Th(1 To 2, 1 To UBound(Th, 2) - 1)
        a = 0
        For i = 1 To UBound(Tc)
            If b > Tc(i) + a Then a = a + Tc(i) Else Tc(i) = Tc(i) - 1: Exit For
        Next i
    Loop Until c = r - 1
    For i = 1 To UBound(Tr, 2)
        Cells(i + 1, 4) = Tr(1, i)
    Next i
End Sub
 
- 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
6
Affichages
1 K
Réponses
10
Affichages
675
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…