Tirage aléatoire avec des lignes masquées


#1

Bonjour, je suis nouveau. Voici mon problème:
j’ai une liste d’environ 200 noms en colonne B.
En colonne A je mets des “x” en face de certains noms
Ensuite, une macro masque toutes les lignes dans lesquelles il n’y a pas de “x” en A
Maintenant, je voudrais transformer tous les “x” de la colonne A en un N° aléatoire.
Précision : Je ne sais jamais à l’avance le nombre de lignes avec un “x”. En fait, il s’agit de gens faisant parti d’une liste qui s’inscrivent.
Pourvu que ma demande soit claire.
Merci 1000 fois par avance pour l’attention qu’on voudra bien apporter à mon problème


#2

Bonjour @Trebor85,

Une proposition dans le fichier joint:

Créer une colonne “C” qui peut-être masquée par la suite:

En “C2”:

=SI(A2="x";ALEA();"")

Tirer vers le bas autant que nécessaire.

Trebor85 V1.xlsm (15,3 Ko)

Cordialement.


#3

Super, Merci beaucoup. Un truc cependant, comment obtenir un chiffre seul dont la limite est le nombre de “x"
J’ai par exemple 30"x” sur 200 lignes dont 170 sont masquées, je voudrais un chiffre de 1 à 30 en face de chaque "x"
Merci beaucoup vraiment
Cordialement


#4

Re @Trebor85,

En “C2”:

=SI(A2="x";ALEA.ENTRE.BORNES(1;30);"")

Tirer vers le bas autant que nécessaire.

Mais si tu as plus de 30 “x” tu vas avoir des doublons qu’il faudra gérer sauf si cela ne dérange pas.

Cordialement.


#5

J’essaie et je reviens te dire …
Merci encore


#6

Re @Trebor85,

Je te propose une version pour que tu puisses établir une liste de +/- 30 noms selon un choix et que bien sur qu’en face du “nom” il y ai un “x”.
Comme tu masques dans la “Feuil1” les lignes qui n’ont pas de “x”, j’ai donc mis les résultats dans la “Feuil2”.

Dans la “Feuil1” je reprends la formule que je t’ais donné au début.
En “C2”:

=SI(A2="x";ALEA();"")

Dans le “Gestionnaire de noms” je nommes les 3 colonnes de la “Feuil1”.

Les formules du “Gestionnaire de noms” sont:

N°_Aléa	=DECALER(Noms;;1;)
Noms	=DECALER(Feuil1!$B$2;;;NBVAL(Feuil1!$B:$B)-1)
Xn	=DECALER(Noms;;-1;)

Dans la “Feuil2”:

En “A1” (indication)
Choisir
ICI

En “A2” mettre le nombre de noms que l’on veut voir s’afficher dans la liste des colonnes “C & D”.

En “C2”:

=SI(LIGNE()-1<=MIN(SOMME(NBVAL(Xn));$A$2);LIGNE()-1;"")

En “D2”:

=SIERREUR(INDEX(Noms;EQUIV(GRANDE.VALEUR(N°_Aléa;$C2);N°_Aléa;0);1);"")

Voici le fichier que je te propose ICI==> Trebor85 V2.xlsm (22,5 Ko)

Cordialement.


#7

Re @Trebor85,

On peut même supprimer une colonne dans la “Feuil2”:

En “C2”:

=SIERREUR(INDEX(Noms;EQUIV(GRANDE.VALEUR(N°_Aléa;SI(LIGNE()-1<=MIN(SOMME(NBVAL(Xn));$A$2);LIGNE()-1;""));N°_Aléa;0);1);"")

Voir fichier ICI==> Trebor85 V3.xlsm (20,5 Ko)

Bonne soirée :sleeping:


#8

Bravo, t’es un crack!
J’ai mis dans la case ou on définit (A2) le nombre, un nbval(de la colonne qui a les “x”).Et ça a l’air de tourner au poil.
Je regarderai mieux cette semaine, parce que les formules ont l’air compliquées et je veux bien les comprendre, mais ça semble être exactement ce que je cherchais.
Je reviens te dire dans la semaine.
En tous les cas grand grand merci pour ton aide
CDLT


#9

Bonjour, en y regardant de plus près ce n’est pas exactement ce que j’attendais. Je te joins un fichier de mon projet.
Je ne voudrais cependant pas abuser de ta disponibilité et comprendrais que tu renonces à poursuivre.
Quoi qu’il en soit je te remercie encore une fois

Concours.xlsm (13.8 KB)


#10

Bonjour @Trebor85,

A vrai dire si tu avais joint un fichier dès le début, cela m’aurait évité beaucoup travail, mais c’est de ma faute, d’habitude j’en exige un :face_with_raised_eyebrow:

Autre chose, là tu fournis un fichier incomplet puisque tu as enlevé la macro qui te permet " Par macro, j’ai masqué tous ceux qui ne sont pas inscrits (Colonne D) " :frowning_face: cette macro serait-elle confidentielle au point que tu ne veuilles pas la partager :roll_eyes: elle pourrait servir à d’autres ici sur le forum, d’autant que tu nous demande de l’aide et que dans nos réponses sur le forum nous ne cachons pas nos solutions :bangbang:

Ceci dit !

Voici une proposition:
En “F2” tu peux choisir le nombre de numéro où laisser =A1
En “G2” mettre la valeur minimum 1
En “H2” mettre la valeur maximum (x) où =A1

Appuyer sur le bouton “Aléa” les “X” de la colonne “D” seront remplacés par des valeurs allant de 1 à 35 dans ce cas et doublons, aléatoirement à chaque appui sur le bouton.
Pour identifier le nombre de valeurs dans “D1”, j’ai ajouté une formule
=SI(D2="X";NBVAL(D2:D201);NB(D2:D201))
comptant ou le nombre de “X” ou le nombre chiffres dans la colonne “D2 à Dx” et une MFC pour indiquer le changement.

Voici la macro:

Sub Aléa()

Dim Aléa As Object
Dim Nbr As Long
Application.ScreenUpdating = False

  Set Aléa = CreateObject("Scripting.Dictionary")
  Range("D2:D1000").ClearContents
   If Application.CountA(Range("F2:H2")) <> 3 Or [F2] > ([H2] - [G2] + 1) Then Exit Sub
   
    While Aléa.Count < [F2]
        Randomize Timer
        Nbr = Int(([H2] - [G2] + 1) * Rnd + [G2])
        Aléa(Nbr) = Nbr
    Wend
    
  Range("D2").Resize(Aléa.Count) = Application.Transpose(Aléa.Items)
  
End Sub

Ci-joint ton fichier en retour ICI==> Concours V1.xlsm (25,6 Ko)

Cordialement.


#11

Pardon pour le manque de connaissance des us et coutumes du forum. Quant à la macro masquée, non, elle n’est pas confidentielle. Je n’ai pas le niveau et encore moins la prétention.
Merci pour ton aide