Code VBA pour mélanger pas bon

Bonjour

Dans le fichier ci-joint j'ai un code pour mélanger les lignes 2 à lignes 16 sans doublons dans les colonnes

le code que j'ai mis ne fonctionne pas

Merci pour votre aide

13classeur1.xlsm (19.73 Ko)

Salut @Joco,

C'est parce que tu traites une array/tableau 2D comme une array 1D.

En utilisant l'explorateur de variables on voit que :

image

L'array "values" a 2 dimensions : Variant/Variant(1 to 28, 1 to 1). En fait c'est un "faux" tableau 2D car il n'a qu'une seule colonne.

Pour comprendre, quand tu récupères les données d'une Range, Excel renvoie toujours un tableau 2D, même si c'est une ligne/colonne unique. Alors quand il s'agit d'une ligne, utiliser Application.Transpose comme tu l'as fait permet effectivement de le transformer en tableau 1D. MAIS quand il s'agit d'une COLONNE (ce qui est ton cas), alors il faut transposer 2x. Soit :

Application.Transpose(Application.Transpose(rng.Value))

C'est la 1e solution.


La 2e c'est simplement d'ajouter la 2e dimension à tes coordonnées :

        ' Mélanger les valeurs
        For j = UBound(values) To LBound(values) + 1 Step -1
            Dim k As Long
            k = Int((j - LBound(values) + 1) * Rnd + LBound(values))
            temp = values(j, 1)
            values(j, 1) = values(k, 1)
            values(k, 1) = temp
        Next j

Au choix !

Bonne journée

Bonjour saboh12617

Merci pour ton aide

pour régler le problème j'ai opté pour la deuxième solution.

Je te remet le fichier car j'ai un autre soucis les explications sont dans le fichier

14classeur1.xlsm (21.15 Ko)

Salut @Joco,

Je n'ai pas bien compris ta question…

Enfin pour les doublons dans les colonnes j'ai à peu près compris le problème mais je ne sais pas trop comment le corriger. Quant aux pistes je n'ai pas compris.

Dans tous les cas, soit on fait un mélange vraiment "aléatoire" = ce que tu as fait, et donc de fait parfois il y a des doublons.

Soit on cherche une combinaison qui vérifie certains critères, mais auquel cas 2 points : il est possible qu'elle n'existe pas, et surtout elle risque d'être difficile à trouver. Bref tout sauf aléatoire.

Dans ce second cas je pense qu'utiliser le solver est une bonne idée. Si @BsAlv passe par là…

Bonjour,

Personnellement pour un tirage aléatoire sans doublon, je charge un objets de type collection de toutes les valeurs en compétition.

Je fais un tirage aléatoire sur cette collection puis je retire les nominés de la collection aux filles des tirages.

Bonjour

Merci pour vos réponses, je pense qu'agir sur l'horizontal et le vertical en même temps ce n'est pas possible.

Je me contenterai de ce que j'ai en place.

Bonne journée

bonjour le fil,

un essai assez simple, 11 jeux sont possible sans doublons, mais 12 ??? Peut-être avec un algorithme plus élaboré.

9classeur1-74.xlsb (19.29 Ko)

Bonsoir Bart Merci pour ton aide

7classeur1-74.xlsb (20.78 Ko)

J'arrive a avoir 14 jeux , mais il y a des doublons dans différentes colonnes

Peut on éviter cela ?

Je remet le fichier

Merci

nouveau essai,

6classeur1-74.xlsb (19.77 Ko)

Bonsoir

Toujours des doublons

Bonne soirée

allez voir controle en ligne 18

Bonsoir Bart

Merci pour ton aide

Avec une petite modif de ton code j'arrive à obtenir 14 journées.

Cordialement

Rechercher des sujets similaires à "code vba melanger pas bon"