XL 2021 Comment générer un tableau aléatoirement ?

landescape

XLDnaute Nouveau
Bonsoir,

j'aimerais créer un tableau de façon aléatoire sans aucunes valeurs numérique :

Exemple :

Colonne A > Colonne B - Colonne C - Colonne D
Point Vert > Alex > Pelle > gauche
Point Bleu > Morgan > truelle > droite
Point Violet > Max > Ciseaux > Avant

la fonction =alea() ne modifier pas tout le tableau entier.

merci de votre aide !
 

patricktoulon

XLDnaute Barbatruc
re
ben non ca ne l'est pas compliqué
@Dranreb a tendance a utiliser ces module classe a tout va puisqu'il les a fait
il ne va pas s'embêter a refaire un algo je peux comprendre
mais dans certains cas pas besoins de tout ca

donc
je vais le redire car on ne le redis jamais assez
la meilleure façon de faire du tirage aléatoire et d'avoir une matrice et de la melanger( deux items s'interchange) dans une boucle de item 1 a lastitem
avec ça tu est sur à 100% de ne jamais avoir de doublons
et plus il a des items moins tu a de chance de tirer la même combinaison

donc la encore une fois je montre
VB:
Sub TiragePatricktoulon()
    Dim TDon, lig&, C&, X&, temp
    TDon = Feuil1.[A1].CurrentRegion.Value
    For C = 1 To UBound(TDon, 2)
        For lig = 1 To UBound(TDon)
            X = 1 + (Rnd * (UBound(TDon) - 1))
            temp = TDon(lig, C): TDon(lig, C) = TDon(X, C): TDon(X, C) = temp
        Next
    Next
    Feuil1.[G1].Resize(UBound(TDon, 1), UBound(TDon, 2)).Value = TDon
End Sub
Terminée et tu n'a besoins d'absolument rien d'autre
demo.gif
 

landescape

XLDnaute Nouveau
re
ben non ca ne l'est pas compliqué
@Dranreb a tendance a utiliser ces module classe a tout va puisqu'il les a fait
il ne va pas s'embêter a refaire un algo je peux comprendre
mais dans certains cas pas besoins de tout ca

donc
je vais le redire car on ne le redis jamais assez
la meilleure façon de faire du tirage aléatoire et d'avoir une matrice et de la melanger( deux items s'interchange) dans une boucle de item 1 a lastitem
avec ça tu est sur à 100% de ne jamais avoir de doublons
et plus il a des items moins tu a de chance de tirer la même combinaison

donc la encore une fois je montre
VB:
Sub TiragePatricktoulon()
    Dim TDon, lig&, C&, X&, temp
    TDon = Feuil1.[A1].CurrentRegion.Value
    For C = 1 To UBound(TDon, 2)
        For lig = 1 To UBound(TDon)
            X = 1 + (Rnd * (UBound(TDon) - 1))
            temp = TDon(lig, C): TDon(lig, C) = TDon(X, C): TDon(X, C) = temp
        Next
    Next
    Feuil1.[G1].Resize(UBound(TDon, 1), UBound(TDon, 2)).Value = TDon
End Sub
Terminée et tu n'a besoins d'absolument rien d'autre
Regarde la pièce jointe 1187828
Je suis assez débutant, je n'ai jamais fait de codage, j'ai repris le tableau que Dranreb à fait, c'est plus simple. Par contre, dès que je rempli la colonne F, celà me duplique tout à chaque fois. Dois je modifier le code? Si oui, le quel? Merci !
 

Dranreb

XLDnaute Barbatruc
Actuellement ma macro prend en entrée la région contenant la cellule A1, c'est à dire la plage délimitée par la 1ère ligne vide et la 1ère colonne vide qui la suivent. Ne parlez pas de tableau si ce
n'en est pas un.
Joignez enfin un classeur si une adaptation ne fonctionne pas comme vous l'espériez.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous:) ,

Une solution via formules avec des colonnes auxiliaires. Le mode de calcul doit être en "manuel".
Les données de base sont en colonnes N à Q.

Le probabilité de doublons est epsilonesque. Mais si jamais il y en avait, la mention Doublons apparaitrait en M1 (dans ce cas, retapez sur la touche de fonction F9 pour un nouveau tirage).

N'oubliez pas que l'option calcul manuel est valable pour l'ensemble des classeurs ouverts dans l'instance d'Excel. Si vous refermez ce classeur alors que d’autres classeurs sont ouverts, ces derniers seront aussi en mode de calcul manuel. Il faudra repasser en mode de calcul automatique.
 

Pièces jointes

  • landescape- aleatoire- v1.xlsx
    15 KB · Affichages: 4
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Je suis assez débutant, je n'ai jamais fait de codage, j'ai repris le tableau que Dranreb à fait, c'est plus simple. Par contre, dès que je rempli la colonne F, celà me duplique tout à chaque fois. Dois je modifier le code? Si oui, le quel? Merci !
je te l'ai refait
code commenté
avec 6 lignes
et en plus les commentaires sont vocal en esperant que tu ai w10 ou 11
va y n'est pas peur met les watts
VB:
Option Explicit

Sub TiragePatricktoulon()
    Dim TDon, TDonprime, lig&, C&, X&, temp, Plage As Range    'déclaration des variable necessaires
    Set Plage = Feuil1.[A2:D6]                  'on determine la plage de cellule du tableau à mélanger
    TDon = Plage.Value                          'on le tranforme en variable tableau
    Application.Speech.Speak "on va  boucler sur les colonnes :1 ::!à :" & UBound(TDon, 2)    'commentaire vocal
    Application.Speech.Speak ":puis dans une boucle imbriquée on bouclera sur les lignes :!: 1" & ":!:à:!:" & UBound(TDon)    'commentaire vocal

    For C = 1 To UBound(TDon, 2)                'on boucle sur toute les colonnes
        Application.Speech.Speak (IIf(C = 1, "", "ensuite") & ":!:tour de boucle colonne ::!" & C)    'commentaire vocal


        For lig = 1 To UBound(TDon)             'on boucle sur toute les lignes


            X = 1 + (Rnd * (UBound(TDon) - 1))  'on choisi au hasard un index de ligne dans la colonne index C de la boucle

            Application.Speech.Speak "tour de boucle ::ligne :numero  ::!" & lig & ":dans la colonne:!:" & C    'commentaire vocal
            Application.Speech.Speak "on choisi au hasard une autre :ligne : ce sera la ligne :!:" & X & ":!: toujours dans la colonne:!:" & C    'commentaire vocal
            If lig = X Then Application.Speech.Speak ("haha ha :ici le hasard a voulu que ça soit :la même :ligne :c'est marrant ?non?")
            Application.Speech.Speak "on va donc intervertir tableau :ligne::!:" & lig & ":colonne::!:" & C & "::avec tableau ligne::!:" & X & ": colonne::!:" & C    'commentaire vocal

            'on a donc element  à  dispo <<TDon(lig,c) et TDon(x,c)>>
            ' et bien les  intervertis

            temp = TDon(lig, C): TDon(lig, C) = TDon(X, C): TDon(X, C) = temp
        Next                                    'on continue la boucle sur les lignes
    Next                                        'on continue la boucle sur les colonnes
    'on injecte la variable tableau(Tdon) la ou on veut
    Feuil1.[G2].Resize(UBound(TDon, 1), UBound(TDon, 2)).Value = TDon
    
    Application.Speech.Speak "voila c'est fini :!: je suis fatiqué j'ai beaucoup parlé  et :jai soif: je vais servir une bièrre et je reviens" 'commentaire vocal
End Sub
LOL
diabolo.gif

j'ai plus de sous pour faire des vraies videos, mon producteur m'a envoyé l'huissier
 

Pièces jointes

  • ListeAléatLandescape Vpatricktoulon.xlsm
    30.2 KB · Affichages: 4

Modeste geedee

XLDnaute Barbatruc
Le probabilité de doublons est epsilonesque.
Bonsour,
Si l'on s'en tient au résultat de la fonction Alea (Rnd en VBA) : un nombre entre 0 et 1 avec 15 décimales
la probabilité est de 1 sur
2 puissance 19937 moins 1

Chaque nombre retourné est dépendant du précédent (seed). L'algorithme utilisé par EXCEL depuis 2010 est le "MERSENNE TWISTER" (consulter la knowledge base de Microsoft a ce sujet : Alea)
Seule l'utilisation souvent imparfaite ,
que nous faisons de cette fonction pour des volumes de données finies (souvent inférieures au million d'éléments) est à mettre en cause.
J'ajouterais (comme patricktoulon) que la méthode infaillible est de sortir le nombre tiré des nombres restant à tirer
 

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour le fil, et meilleurs voeux à ceux-celles que je n'ai pas encore croisé(e)s
J'ajouterais (comme patricktoulon) que la méthode infaillible est de sortir le nombre tiré des nombres restant à tirer
J'aurai plutôt dit "une des méthodes infaillible"
Car, comme tu le précises, l'algorithme est utilisé depuis 2010, version également éligible à ????
Sous ce lien, µSoft "explique" (à sa manière...) l'utilisation de la fonction "List.Random" dans Power Query...
Notamment ce passage :

À propos​


Retourne une liste de nombres aléatoires entre 0 et 1, en fonction du nombre de valeurs à générer et d’une valeur de départ facultative.
  • count : nombre de valeurs aléatoires à générer.
  • seed: [Facultatif] valeur numérique utilisée pour amorcer le générateur de nombres aléatoires. Si cette valeur est omise, une liste unique de nombres aléatoires est générée chaque fois que vous appelez la fonction. Si vous spécifiez la valeur de départ avec un nombre, chaque appel à la fonction génère la même liste de nombres aléatoires.
C'était juste pour apporter une petite précision
Un exemple de notre regretté Hasco sous ce lien
Bon dimanche à tous
 

Modeste geedee

XLDnaute Barbatruc
Bonsoir,

j'aimerais créer un tableau de façon aléatoire sans aucunes valeurs numérique :

Exemple :

Colonne A > Colonne B - Colonne C - Colonne D
Point Vert > Alex > Pelle > gauche
Point Bleu > Morgan > truelle > droite
Point Violet > Max > Ciseaux > Avant

la fonction =alea() ne modifier pas tout le tableau entier.

merci de votre aide !
Bonsour®
sans VBA !!
1704735408564.png
 

Pièces jointes

  • Landscape.xlsx
    19.8 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 202
Membres
112 684
dernier inscrit
alarriere