Tirage au sort en fonction d'un Groupe et d'un critère

Bonsoir

Je viens de découvrir votre site et j'aurais besoin de vos conseils

Après de nombreuses recherches pour la réalisation d'un fichier Excel pour un tirage au sort automatique, je bloque sur différents éléments

Dans l'idéale, voici ce que j'aimerai faire :

Sélectionner le Nom d'un responsable, puis le nom d'une équipe et à partir de cette sélection, avoir un prénom (colone A) choisi au hasard.

J'aimerai également que le prénom ne resorte pas dans le "tirage au sort" si il a déjà participé "oui" (dans la colonne D)

Pour le moment j'arrive qu'à avoir un nom aléatoire et afficher le manager et le responsable associé en dessous

J'ai également mis une vérif pour la particpation mais j'avoue que je préfererai que le tirage au sort ne se fasse que sur non participer.

J'apprends très vite ... Pouvez vous m'aiguiller sur les formules ... Maccros ou autres barbereries d'Excel à utiliser ?

Merci d'avance

86modele.xlsx (13.34 Ko)

Bonjour,

Une fonction personnalisée devrait faire l'affaire :

Function TIR_COND(base As Range, resp As String, man As String)
    Dim tir(), i%, j%
    Application.Volatile False
    If base.Columns.Count <> 4 Then
        TIR_COND = CVErr(xlErrValue)
        Exit Function
    End If
    ReDim tir(base.Rows.Count)
    With base
        For i = 1 To .Rows.Count
            If .Cells(i, 4) = "NON" Then
                If .Cells(i, 3) = resp And .Cells(i, 2) = man Then
                    j = j + 1
                    tir(j) = .Cells(i, 1).Value
                End If
            End If
        Next i
    End With
    If j > 1 Then
        ReDim Preserve tir(j)
        Randomize
        i = Int(j * Rnd + 1)
        TIR_COND = tir(i)
    ElseIf j = 1 Then
        TIR_COND = tir(1)
    Else
        TIR_COND = CVErr(xlErrNA)
    End If
End Function

Ta base de données est nommée BaseTirage en dynamique (voir Gestionnaire de noms).

La fonction s'utilise comme les fonction d'Excel. Il n'est pas prévu qu'elle se recalcule (sinon ton tirage pourrait changer en permanence). Elle renvoie #NA! s'il n'y a pas de prénom répondant aux conditions (par exemple, choix d'un responsable et d'un manager incompatible), et l'erreur #VALEUR! si la plage indiquée en premier argument ne comporte pas 4 colonnes.

Il conviendra par la suite de mettre tes listes déroulantes en listes-cascade, de façon que la liste de managers corresponde au responsable choisi. Les listes peuvent être créées automatiquement à partir de ta base de données (avec macros pour le faire...)

Cordialement.

123dinou10-modele.xlsm (19.27 Ko)

Merci pour la réponse

Je dois pas etre si douée que cela je n'arrive même pas à faire mon bouton pour lancer ma Maccro, il me dit aucune maccro ou désactivées

En effet lorsque je veux voir les maccro du fichier ... J'ai téléchargé celui que tu m'as mis en PJ il ne m'en montre aucune pourtant si je vais dans VBasic je trouve bien le module 1 ... Pourquoi ?

De plus, je ne sais pas comment faire "une liste en cascade" ... Serait tu m'aiguiller ?

Bonjour,

Tu n'as surtout pas lu la réponse !

Il y a évidemment du code VBA dans Module1. Mais il ne s'agit pas d'une procédure Sub, mais d'une procédure Function.

Donc, tu n'as aucune chance de pouvoir la lancer avec une bouton ou autrement. Elle n'est pas conçue pour exécuter une action mais pour renvoyer un résultat.

Il s'agit d'une fonction, qu'on appelle fonction personnalisée, et qui s'utilise comme toute autre fonction d'Excel.

Là où tu veux le résultat, tu commences par taper le signe =

tu poursuis en tapant le nom de la fonction : dès la première lettre, Excel t'affichera la liste des fonctions susceptibles de correspondre à ta frappe, tu continues à taper ou, si tu vois la fonction dans la liste, tu la sélectionnes et tu tabules,

dans la cellule, tu auras alors : =TIR_COND(

Il te reste alors à fournir les arguments de la fonction (séparés par des point-virgules) : le premier est la plage de 4 colonnes à partir de laquelle s'effectue le tirage.

Dans le fichier modèle, je l'ai nommée BaseTirage, tu peux donc mettre le nom de la plage, sinon tu mets les références de la plage.

Le 2e est le nom du responsable : tu peux le mettre (entre guillemets) ou indiquer la référence de la cellule où on le trouve (C3 dans le fichier modèle).

Le 3e est le nom du manager : même chose que pour le responsable.

Tu termines ta saisie par une parenthèse fermante et tu valides (Entrée). Le résultat s'affichera dans la cellule. Soit un nom tiré parmi ceux dont responsable et manager correspondent, et qui n'ont pas participé.

La fonction est conçue pour ne pas se recalculer lors du recalcul de la feuille ou du classeur, de façon que le résultat ne se modifie pas de façon impromptue. Pour recalculer, il faut donc éditer et revalider la formule.

Cordialement.

Rechercher des sujets similaires à "tirage sort fonction groupe critere"