Tirage aléatoire avec matrice variable choisie dans zone déroulante
Bonjour à tous
D'abord merci aux membres de ce forum pour toutes ces ressources ! Malheureusement, cette fois, je n'ai pas trouvé ce dont j'avais besoin dans les demandes déjà postées...
Merci à ceux qui prendront le temps d'éclairer ma lanterne
Je m'explique :
Je tente de créer un fichier de tirage au sort. Seulement, je sèche : comment faire varier la matrice de recherche selon un choix fait dans une liste déroulante ?
Le cas pratique :
J'ai une liste de participants au tirage dans une colonne NOM. Ces participants sont tous associés à un SECTEUR (ex: ZONE 1, ZONE 2, ZONE 3, etc...).
Une zone de liste déroulante (reliée à un tableau croisé dynamique, sur un second feuillet) reprend le nom de chaque secteur.
C'est ici que je bloque ! Je voudrais pouvoir sélectionner un secteur dans la liste déroulante et que le tirage aléatoire du nom se fasse dans la plage de cellules correspondante à ce secteur...
Suis-je suffisamment claire ? Est-ce que quelqu'un saurait me trouver une solution avec des formules et/ou macros s'il vous plaît ?
MILLES MERCIS A CEUX QUI PRENDRONT LE TEMPS DE ME LIRE !
FORMULES ET MACROS EXISTANTES :
-> Pour faire le tirage aléatoire parmi la colonne NOM :
=INDEX(D:D;ALEA.ENTRE.BORNES(2;NBVAL(D:D));1)-> Le bouton TIRAGE AU SORT exécute cette macro :
Sub TIRAGE()
'
' TIRAGE Macro
'
'
Range("B2:B8").Select
ActiveCell.FormulaR1C1 = "=INDEX(C[2],RANDBETWEEN(2,COUNTA(C[2])),1)"
Range("B9").Select
End Sub
Bonsoir,
Essayez ceci:
Cdlt
bonjour le fil,
avec des collections que vous avez déjà utilisé
Sub Alea_NOM()
Dim aA, UN, sZone, i
Set UN = New Collection
With Sheets("tirage au sort")
sZone = .Range("B11").Value 'votre zone
If Len(sZone) = 0 Then MsgBox "no zone", vbCritical: Exit Sub
aA = .Range(.Range("D2"), .Range("D" & Rows.Count).End(xlUp)).Resize(, 2).Value 'matrice avec vos données
For i = 1 To UBound(aA)
If aA(i, 2) = sZone Then UN.Add aA(i, 1) 'les noms de ce zone
Next
If UN.Count = 0 Then MsgBox "no noms", vbCritical: Exit Sub
.Range("B2").Value = UN.Item(WorksheetFunction.RandBetween(1, UN.Count)) 'un nom aléatoire
End With
End SubBonjour à tous les deux
Merci Arturo83 et BsAlv pour votre réactivité !
Réponse à Arturo83 :
Excellent ! Cela fonctionne exactement comme je l'imaginais. Merci beaucoup !
J'ai une question complémentaire : je débute avec les macros... j'ai cru comprendre que le module 3, que vous avez ajouté, était associé au bouton de tirage. Est-ce exact ? Excusez-moi, je n'arrive pas à reproduire votre raisonnement de mon côté... J'obtiens une erreur sur cette ligne :
Z = Application.Match(Zone, f1.Range("E1:E" & DerLig_f1), 0Je n'arrive pas non plus à comprendre quelles sont les modifications que vous avez effectuées sur la liste déroulante... Je dois pouvoir saisir toutes les modifs pour réussir à les reproduire sur un autre fichier, qui contient des infos de contact confidentielles...
Merci pour votre patience !!!
Réponse à BsAlv :
Merci beaucoup pour le temps que vous m'accordez !
Même chose, je suis complètement novice (mais pas tout à fait manchot
Merci pour votre temps !
Bonjour,
j'ai cru comprendre que le module 3, que vous avez ajouté, était associé au bouton de tirage. Est-ce exact ? OUI
Je n'arrive pas non plus à comprendre quelles sont les modifications que vous avez effectuées sur la liste déroulante... Je dois pouvoir saisir toutes les modifs pour réussir à les reproduire sur un autre fichier, qui contient des infos de contact confidentielles..
Dans la feuille "Liste des secteurs", il faut redéfinir la longueur de la liste des Secteurs, pour cela , dans le bandeau, sélectionnez "Formules" puis "Gestionnaire de noms" Dans la fenêtre qui s'ouvre, sélectionnez "SECTEURS", puis "Modifier" et dans la formule, remplacez la valeur 8 par la dernière ligne de la liste.
je n'arrive pas à reproduire votre raisonnement de mon côté... J'obtiens une erreur sur cette ligne :
Z = Application.Match(Zone, f1.Range("E1:E" & DerLig_f1), 0Si vous faites une recherche de zone qui n'existe pas dans la liste, c'est normal que cela génère une erreur
Revoici le fichier en ayant modifié la liste (Jusqu'à la ligne 10000, ça laisse de la marge), comme expliqué ci-dessus ainsi que le code pour parer aux éventuelles erreurs.
Cdlt
MILLE MERCIS Arturo83 !!!!
Je suis finalement repartie de votre fichier, y est copié mes données et modifié le code pour y associer les bonnes colonnes ! YOUPI !
Je vous remercie d'avoir pris le temps de résoudre mon problème.
Une bonne continuation !
Belle journée à vous