VBA - Sélectionner au hasard de 10 éléments parmi une liste
Bonjour à tous,
Dans le cadre de projet d'inventaire tournant, j'aimerais créer un fichier Excel me permettant de sélectionner au hasard 10 pièces d'une liste "critique" et 5 pièces d'une liste "normale" pour procéder à des contrôles.
J'aimerais que ces pièces s'affichent dans un espace dédié et qu'au fur et à mesure le choix aille piocher uniquement dans les pièces qui n'ont jamais été contrôlées.
Pour le moment j'ai réussi à faire un code me permettant de faire la sélection au hasard et d'assigner un "flag" aux pièces choisies, dans le but de pouvoir filtrer lors de la prochaine sélection. Voici mon code :
Sub Génération_liste()
Dim i As Integer, j As Integer
Dim Nb_Lignes_CRIT As Integer
Dim Nb_Lignes_Norm As Integer
Dim tabl_CRIT(9) As Integer, tabl_NORM(4)
Sheets("Inventaire").Activate
' Génération_liste Macro
' Génère de manière aléatoire une liste de pièces à contrôler
Calculate
For i = 0 To 9
tabl_CRIT(i) = Cells(i + 8, 5)
Next
For j = 0 To 4
tabl_NORM(j) = Cells(j + 18, 5)
Next
'Nombre de ligne dans la feuille stock Critique (y compris intitulé)
Sheets("Stock Critique").Activate
Nb_Lignes_CRIT = Range("A65536").End(xlUp).Row
For i = 2 To Nb_Lignes_CRIT
For j = 0 To 9
If Cells(i, 1) = tabl_CRIT(j) Then
Cells(i, 9) = 1
End If
Next
Next
'Nombre de ligne Stock Normal (y compris intitulé)
Sheets("Stock Normal").Activate
Nb_Lignes_Norm = Range("A65536").End(xlUp).Row
For i = 2 To Nb_Lignes_Norm
For j = 0 To 4
If Cells(i, 1) = tabl_NORM(j) Then
Cells(i, 7) = 1
End If
Next
Next
Sheets("Inventaire").Activate
Range("B1").Calculate
Range("B2").Calculate
Maintenant, je débute sur vba, et je n'arrive pas à voir comment faire pour que la sélection se fasse que dans les pièces pas contrôlées (celles sans "1" dans la 9ème colonne).
Et je n'arrive pas à envoyer les pièces choisies dans l'espace dédié (voir PJ)
Auriez vous des pistes à me donner pour m'aider sur mon programme svp ?
Merci d'avance à tous pour votre aide.
Bonjour,
je ne suis pas sûr que l'aléatoire apporte une plus-value.
J'aurais plutôt imaginé extraire les éléments proches 'géographiquements' pour limiter les déplacements.
Ceci dit, le plus simple est de te créer un double mélangé de ta liste. Plus qu'à les prendre dans l'ordre ici, jusqu'à épuisement pour reprendre au début.
En mémorisant la valeur du pointeur pour le prochain tirage.
eric
Bonjour,
je ne suis pas sûr que l'aléatoire apporte une plus-value.
J'aurais plutôt imaginé extraire les éléments proches 'géographiquements' pour limiter les déplacements.
Ceci dit, le plus simple est de te créer un double mélangé de ta liste. Plus qu'à les prendre dans l'ordre ici, jusqu'à épuisement pour reprendre au début.
En mémorisant la valeur du pointeur pour le prochain tirage.
eric
Bonjour Eric,
Merci pour ta réponse.
En fait il s'agit d'éléments situées dans la même pièce. Le but du programme est de faire des contrôles pour pallier à des manquements de sorties de pièces.....
En gros si je comprends bien ton idée c'est de créer un double mais en filtrant la liste à partir du flag, qui du coup serait un compteur et non juste un 1 ou 0 ?
Je vais essayer ça.
Merci pour ton temps et a réponse.
Créer un double uniquement si tu maintiens le coté aléatoire.
Cette nouvelle liste peut être simplement les index mélangés :
27 19 28 65 63 8 60 46 29 26 23 34 3 25 2 10 44 30 32 31 39 45 43 16
Au premier tirage de 5 tu listes les éléments 27 19 28 65 63
Au suivant : 8 60 46 29 26, etc
eric