VBA - Sélectionner au hasard de 10 éléments parmi une liste

Y compris Power BI, Power Query et toute autre question en lien avec Excel
F
Fiston
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 janvier 2020
Version d'Excel : 2013

Message par Fiston » 6 janvier 2020, 15:39

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.JPG
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'311
Appréciations reçues : 370
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 6 janvier 2020, 15:53

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
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
F
Fiston
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 janvier 2020
Version d'Excel : 2013

Message par Fiston » 6 janvier 2020, 16:10

eriiic a écrit :
6 janvier 2020, 15:53
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.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'311
Appréciations reçues : 370
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 6 janvier 2020, 16:23

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
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message