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.

capture onglet

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

Rechercher des sujets similaires à "vba selectionner hasard elements liste"