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

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 Sub

Bonjour à 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), 0

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...

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 ) et je me demande où et comment utiliser votre code ? Lorsqu'il est associé au bouton de tirage, j'obtiens un message d'erreur "No Zone". Pouvez-vous m'aider à reproduire votre raisonnement s'il vous plaît ?

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.

lolofski

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), 0

Si 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

Rechercher des sujets similaires à "tirage aleatoire matrice variable choisie zone deroulante"