Prélever 23 valeurs aléatoirement dans un tableau.

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 !

controlo

XLDnaute Occasionnel
Bonsoir ,


Me revoilà avec un nouveau problème et j'aimerais avoir votre aide, vous trouverez ci-dessous un exemple de ce que j'ai à faire. Mon problème est le suivant : j'ai en feuille 1 un tableau de 3 colonnes (a,b et c) et de 71 lignes , ce que je veux faire en automatique c'est prélever aléatoirement 23 lignes parmi ces 71 lignes et les retranscrires dans les cellules du tableau qui se trouve en feuilles 2.J'ai commencé à remplir le tableau de la feuille 2 pour vous montrer par exemple que si l'on prend la valeur 560 qui correspond à ligne 2 de la colonne a on doit aussi reporter dans le classeur de la feuille 2 la valeur qui se trouve dans la colonne b de la ligne 2 ,idem pour c.

Merci de votre coup de main
 

Pièces jointes

Re : Prélever 23 valeurs aléatoirement dans un tableau.

bonjour tous 🙂🙂🙂🙂🙂🙂

une autre facon de l'ecrire je mets pas dans l'ordre il faut... il faut pas ??

Code:
Sub es()
 Dim T(), i As Long, m As Object
 Set m = CreateObject("Scripting.Dictionary")
 Do Until i = 23
 v = Int((72 - 2 + 1) * Rnd() + 2)
 If Not m.Exists(v) Then m.Add v, v: i = i + 1
 Loop
 T = m.Items
 For i = 0 To UBound(T)
 Feuil2.Cells(i + 9, 3) = Feuil1.Cells(T(i), 1)
 Feuil2.Cells(i + 9, 4) = Feuil1.Cells(T(i), 3)
 Feuil2.Cells(i + 9, 5) = Feuil1.Cells(T(i), 5)
 Next i
 Set m = Nothing: Erase T
End Sub

Non il ne faut pas trier , mais il me faut des commentaires pour comprendre (je suis un peu bête !!!!)
 
Re : Prélever 23 valeurs aléatoirement dans un tableau.

Bonjour à tous,..... je vois que nous sommes nombreux sur le fil.
Pour controlo, voici des commentaires afin de comprendre le principe qui reste l'essentiel.
A savoir le principe de ma macro date de plus de 15 ans et l'ai fait seul.
Je viens de voir que la macro de mapomme est très bien et doit gagné qlq milisecondes sur la mienne.
Voici mes commentaires

Bruno

Code:
Private Sub CommandButton1_Click()
Feuil2.[C9:E31].ClearContents ' on efface l'ancien tableau
Dim deja(1 To 100) As Boolean 'on dimensionne la variable deja (vrai ou faux)
Dim lig(1 To 30) As Long ' idem mais pour N°ligne
Randomize ' Initialise le générateur de nombres aléatoires
Do 'Do>Loop....repete à l'infinit jusqu'a exit DO
n = Int(Rnd * 70) + 2 'tirage aléatoire entre 2 et 72
If Not deja(n) Then deja(n) = True: i = i + 1: lig(i) = n 'si n n'est pas deja sorti lig(i)=n ..i étant incrémenté
If i = 23 Then Exit Do ' on sort
Loop 'le Do loop
For k = 1 To 23 ' boucle de 1 à 23
Feuil2.Cells(k + 8, 3) = Feuil1.Cells(lig(k), 1) 'k+8 est la ligne en feuil2
Feuil2.Cells(k + 8, 4) = Feuil1.Cells(lig(k), 3) 'lig(k) est le N° ligne du tirage au sort ..i étant remplacé par k avec la boucle
Feuil2.Cells(k + 8, 5) = Feuil1.Cells(lig(k), 5)
Next
Feuil2.Select
End Sub
 
Re : Prélever 23 valeurs aléatoirement dans un tableau.

Bonjour à tous,..... je vois que nous sommes nombreux sur le fil.
Pour controlo, voici des commentaires afin de comprendre le principe qui reste l'essentiel.
A savoir le principe de ma macro date de plus de 15 ans et l'ai fait seul.
Je viens de voir que la macro de mapomme est très bien et doit gagné qlq milisecondes sur la mienne.
Voici mes commentaires

Bruno

Code:
Private Sub CommandButton1_Click()
Feuil2.[C9:E31].ClearContents ' on efface l'ancien tableau
Dim deja(1 To 100) As Boolean 'on dimensionne la variable deja (vrai ou faux)
Dim lig(1 To 30) As Long ' idem mais pour N°ligne
Randomize ' Initialise le générateur de nombres aléatoires
Do 'Do>Loop....repete à l'infinit jusqu'a exit DO
n = Int(Rnd * 70) + 2 'tirage aléatoire entre 2 et 72
If Not deja(n) Then deja(n) = True: i = i + 1: lig(i) = n 'si n n'est pas deja sorti lig(i)=n ..i étant incrémenté
If i = 23 Then Exit Do ' on sort
Loop 'le Do loop
For k = 1 To 23 ' boucle de 1 à 23
Feuil2.Cells(k + 8, 3) = Feuil1.Cells(lig(k), 1) 'k+8 est la ligne en feuil2
Feuil2.Cells(k + 8, 4) = Feuil1.Cells(lig(k), 3) 'lig(k) est le N° ligne du tirage au sort ..i étant remplacé par k avec la boucle
Feuil2.Cells(k + 8, 5) = Feuil1.Cells(lig(k), 5)
Next
Feuil2.Select
End Sub


Youki ,

J'aimerais comprendre comment tu dimensionne tes deux tableaux deja et lig ?
 
Re : Prélever 23 valeurs aléatoirement dans un tableau.

Youki ,

J'aimerais comprendre comment tu dimensionne tes deux tableaux deja et lig ?Et je voudrais savoir comment les dimensionnés si j'augmente le nombre de ligne de mon tableau en feuille1 par jusqu'à 120 valeurs

Merci
 
Re : Prélever 23 valeurs aléatoirement dans un tableau.

Bonjour à tous


Une synthèse des contributions de youky(BJ), mapomme et des miennes (que les autres me pardonnent !) dans le classeur joint.
Les méthodes de mapomme et les miennes sont fondamentalement les mêmes. Elles ne se distinguent que par leur mise en œuvre.
Celle de youky(BJ) est différente par sa technique de sélection des données. Il utilise un dictionnaire dont l'élaboration nécessite en moyenne 28 boucles pour choisir les 23 lignes. Les autres créent une liste ordonnée de 23 entiers consécutifs (de 0 à 22, ou de 1 à 23), puis y introduisent du désordre.

Pour l'affichage des résultats, les méthodes de youky(BJ) et mapomme sont différentes des miennes puisqu'ils écrivent une à une les données dans la feuille de résultats. J'ai préféré utiliser un tableau dans le code pour enregistrer les données sélectionnées, puis les afficher en une seule fois. Cette solution est avantageuse si la procédure agit dans un milieu chargé de procédures évènementielles nombreuses ou lourdes : elles ne seront déclenchée qu’une seule fois (ou deux si on fait un tri dans la feuille, comme avec ROGER2327 (2)) contre 69 fois (ou 70 avec mapomme (2)) en écrivant les résultats un à un. Et c'est là qu'on perdra le plus de temps...​


ROGER2327
#5557


Lundi 2 Pédale 139 (Saint André Marcueil, ascète cycliste - fête Suprême Quarte)
6 Ventôse An CCXX, 6,9365h - asaret
2012-W08-6T16:38:51Z
 

Pièces jointes

Re : Prélever 23 valeurs aléatoirement dans un tableau.

rebonjour tous 🙂🙂🙂🙂🙂🙂🙂🙂

code a peu pres identique que l'ami youky(BJ)

la difference pour generer les nombres je passe par un object par definition un object est unique
la j'utilise
Code:
Scripting.Dictionary
j'aurais trés bien peu prende directement Dictionary plus rapide dans certains cas
je mets les nombres generer dans un tableau
Code:
T = m.Items
je boucle sur ce tableau & j'ecris en feuille2
Code:
For i = 0 To UBound(T)
charge en memoire avec la ligne precedente
je vide le tableau ici
Code:
T
par erase & vide
Code:
Dictionary
cela peut etre tres important sur certains code


par contre l'ami youky(BJ) parle de vitesse d'exe...

pour 23 lignes j'ai fait simple suffisant pour cela
autrement pour la vitesse si tu dois travailler sur un tres grand nombres de lignes

la pas d"erreurs il faut prendre le code de l' ami roger🙂🙂🙂 mois d'une seconde sur 10000 lignes pour 3 column
il
Code:
redim
un tableau

attention pas simple a comprendre les tableaux on est un peu dans du virtuel 😛😛😛
j'ai mis un moment a maitriser cela & je pleure encore des fois😱😱😱

autrement ce qu'a fait l'ami rachid c'est tres bien aussi🙂🙂


ps pas vu les 2 derniers messages
 
Dernière édition:
- 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

  • Question Question
Microsoft 365 Tableau
Réponses
5
Affichages
205
  • Question Question
Microsoft 365 MFC dans tableau
Réponses
2
Affichages
316
Retour