Mélanger un tableau VBA
Fermé
jeandefait
Messages postés
20
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
20 février 2010
-
25 nov. 2009 à 04:16
stephantasy - 14 sept. 2012 à 21:09
stephantasy - 14 sept. 2012 à 21:09
A voir également:
- Mélanger un tableau VBA
- Tableau word - Guide
- Tableau ascii - Guide
- Tableau croisé dynamique - Guide
- Trier un tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
8 réponses
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
25 nov. 2009 à 09:31
25 nov. 2009 à 09:31
Bonjour,
Le tirage se fait il avec ou sans remise ? (cad sans remise: le nombre n'apparait qu'une fois)
Le tirage se fait il avec ou sans remise ? (cad sans remise: le nombre n'apparait qu'une fois)
jeandefait
Messages postés
20
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
20 février 2010
1
25 nov. 2009 à 15:48
25 nov. 2009 à 15:48
Sans remise, disons que j'ai un tableau de 5 chiffres : [1 2 3 4 5] je veux qu'il les mélange au hasard pour qu'il y ait toujours des ordres différents mais toujours les 5 mêmes chiffres.
Ex: [1 2 4 3 5]
Ex:[5 4 2 1 3]
Ex: [1 2 4 3 5]
Ex:[5 4 2 1 3]
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
25 nov. 2009 à 16:55
25 nov. 2009 à 16:55
re,
essaies ceci
essaies ceci
Sub ecrire_serie_aléatoire(nbre As Byte, adres_dep As String) Dim col As Byte, lig As Byte Dim coll As Collection, cptr As Byte '-------initialisations ' mémorise la ligne et la colonne de départ de la série lig = Range(adres_dep).Row col = Range(adres_dep).Column 'fige le défilement de l'écran & nettoie la zone de restitution Application.ScreenUpdating = False Range(Cells(lig, col), Cells(65536, col)).Clear 'instantie l'objet collection Set coll = New Collection 'initialise la fonction aléatoire Randomize '-------affecte une serie sans doublon For cptr = 1 To nbre tirage = Int(Rnd * nbre) + 1 On Error Resume Next coll.Add tirage, CStr(tirage) 'si doublon If Err.Number > 0 Then 'annulation du pas cptr = cptr - 1 Else 'inscrit le tirage da Cells(cptr - 1 + lig, col) = tirage End If On Error GoTo 0 Next Set coll = Nothing End Sub Sub generer_serie() ecrire_serie_aléatoire 5, "A1" End Sub
jeandefait
Messages postés
20
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
20 février 2010
1
25 nov. 2009 à 19:11
25 nov. 2009 à 19:11
Ça fonctionne mais n'y a t-il pas une façon plus simple?
Je vais toujours avoir un tableau de 1 à 50... donc [1 2 3 4 5 ... 48 49 50] et je veux que VBA mêle tout ça, qu'il mette mes nombres dans n'importe quel ordre, de façon aléatoire.
Je vais toujours avoir un tableau de 1 à 50... donc [1 2 3 4 5 ... 48 49 50] et je veux que VBA mêle tout ça, qu'il mette mes nombres dans n'importe quel ordre, de façon aléatoire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jeandefait
Messages postés
20
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
20 février 2010
1
25 nov. 2009 à 22:09
25 nov. 2009 à 22:09
J'ai lu dans un autre forum l'astuce suivante dans le cas où on voudrait mélanger les lettres d'un mot,
on choisi une lettre à laide de rnd
on l'ajoute à notre chaîne de caractère qui est vide au début
et on supprime cette lettre de notre mot initial comme ça, aucune chance de la répéter.
Si on tente de faire de même avec des chiffres, mon problème est évidemment si j'ai des nombres plus grand que 10:
Ex: 123456789101112... moi je veux mélanger ces 12 nombres mais si j'utilise la fonction MID, c'est rendu compliqué pour les nombres 10 11 12...
Donc utiliser un tableau pourrait être intéressant non?
Par exemple position 0=1, position 1 =2 et ainsi de suite... mais comment supprimer une position dans mon tableau?
on choisi une lettre à laide de rnd
on l'ajoute à notre chaîne de caractère qui est vide au début
et on supprime cette lettre de notre mot initial comme ça, aucune chance de la répéter.
Si on tente de faire de même avec des chiffres, mon problème est évidemment si j'ai des nombres plus grand que 10:
Ex: 123456789101112... moi je veux mélanger ces 12 nombres mais si j'utilise la fonction MID, c'est rendu compliqué pour les nombres 10 11 12...
Donc utiliser un tableau pourrait être intéressant non?
Par exemple position 0=1, position 1 =2 et ainsi de suite... mais comment supprimer une position dans mon tableau?
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
26 nov. 2009 à 09:04
26 nov. 2009 à 09:04
Excuses moi d'avoir essayé de t'aider. rassures toi je ne recommencerai plus
au fait, connais tu le mot MERCI ? voir charte du forum
au fait, connais tu le mot MERCI ? voir charte du forum
jeandefait
Messages postés
20
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
20 février 2010
1
26 nov. 2009 à 15:01
26 nov. 2009 à 15:01
Sans rancune, c'est beau, excuses acceptée, je te pardonne