Procédure VBA : arrayRandomize

Bonjour,

Je souhaite transformer de façon aléatoire le contenu d'une liste nommée.

Sub exemple()
tableau = Range("liste")
arrayRandomize tableau
arrayDebug tableau, , , Chr(10) 'Affichage du tableau dans une MsgBox pour vérification

End Sub

j'ai une erreur 9. L'indice n'appartient pas à la sélection !

Bonjour Petiloup et bienvenu, bonjour le forum,

Peut-être comme ça :

Sub exemple()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TA() As Variant 'déclare la variable TA (Tableau des Aléatoires)
Dim NA As Integer 'déclare la variable NA (Nombre Aléatoire)
Dim TF() As Variant 'déclare la variable TF (Tableau Final)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = Range("liste") 'définit le tableau des valeurs TV
ReDim TA(1 To UBound(TV, 1)) 'redimensionne le tableau des aléatoires TA
ReDim TF(1 To UBound(TV, 1)) 'redimensionne le tableau Final TF
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
ici: 'étiquette
    Randomize 'lance le générateur de nombres aléatoires
    NA = Int((UBound(TV, 1) * Rnd) + 1) 'définit le nombre aléatoire NA
    TA(I) = NA 'définit le nombre aléatoire I du tableau TA
    For J = 1 To UBound(TA) 'boucle 2 sur tous les nombre aléatoires J du tableau TA
        If I <> J And TA(J) = NA Then GoTo ici 'si I est différent de J et si le nombre aléatoire J du tableau TA est égal à NA, va à l'étiquette "ici" (génère un nouveau nombre aléatoire)
    Next J 'prochain nombre aléatoire de la boucle 2
    TF(NA) = TV(I, 1) 'renvoie dans la tableau final en position NA, la donnée ligne I colonne 1 de TV
Next I 'prochaine ligne de la boucle 1
O.Range("A1").Resize(UBound(TV, 1)).Value = Application.Transpose(TF) 'substitue les données de la plage nommée "Listes" par le tableau final
End Sub

Merci pour cette réponse mais je tenais à utiliser cette procédure (ArrayRandomize) qui d'aprés les exemples fournis traite en quelques lignes

ce probléme. Le tableau se remplit bien avec la liste nommée mais la procédure ne l'accepte pas contrairement à un tableau rempli avec ARRAY .

Mon but est de faire fonctionner cette procédure.

Re,

Arf ! Désolé je ne connais pas cette procédure... Elle sort d'où car je n'en ai jamais entendu parler. C'est une formule ou un mot clé VBA ?...

Re,

Pas de soucis. Cette procédure fait parti d'un pack fourni dans la rubrique "Add-In". Ce sont des fonctions complémentaires mise à dispo

par Sébastien. C'est par pure curiosité que je me suis intéressé à certaines d'entre elles.

Après de nombreux essais : j'ai trouvé l'origine du plantage de la procédure "ArrayRandomize". Lorsque l'on crée un tableau avec cette formule : tab=range("liste nommée"), tab est un tableau à 2 dimensions. La procédure ne l'accepte pas et donc déclarer : Tab = Application.Transpose(Range("liste nommée").Value).

Re,

Merci pour l'info !... En plus ça m'aide car j'avais le même problème quand j'utilisais Join sur une plage...

Rechercher des sujets similaires à "procedure vba arrayrandomize"