IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Tirage aléatoire avec condition


Sujet :

Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Tirage aléatoire avec condition
    Bonjour,

    Je viens requérir votre aide sur un problème qui me bloque sur Excel.

    Je dispose de la colonne A avec une liste de noms, et d’une colonne B contenant simplement un X en face de certains noms.

    Je cherche à afficher aléatoirement un nom de la liste A pour lequel il y a un X sur la même ligne (ou inversement).

    Pour faire simple, il s’agit d’un tirage aléatoire de numéro de ligne avec une condition sur la valeur d’une colonne.

    J’ai essayé de jongler avec les fonctions INDEX, LIGNE, EQUIV, ALEA.ENTRE.BORNES, etc. mais je ne trouve pas la clé.

    Exemple :

    Noms OK

    Chaise X
    Canapé
    Lit X
    Bureau


    Avec cet exemple, le résultat attendu serait donc aléatoirement « Chaise » ou « Lit ».

    D’avance, merci pour votre aide.

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Petite fonction faite maison:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function tiragechelou(R As Range, R2 As Range, condition As String) As String
    Final = R.Rows.Count
    colonne = R.Column
    colonne2 = R2.Column
    i = Round(Application.WorksheetFunction.RandBetween(2, Final))
    While Cells(i, colonne2) <> condition
    i = Round(Application.WorksheetFunction.RandBetween(2, Final))
    Wend
    tiragechelou = Cells(i, colonne)
    End Function
    Mets la fonction dans un module et tape dans ta feuille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =tiragechelou(lerangedetesmeubles;lerangedetesX;"X")
    Si tes meubles sont en A et tes X en B:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =tiragechelou(A2:A5;B2:B5;"X")

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour la rapidité de réponse.

    J'avoue que j'espérais une solution sans VB, parce que je n'y connais absolument rien. Mais vu que le travail est prémaché, je pense réussir à l'utiliser.

    Je te fais un retour dès que j'aurais testé,
    Encore merci

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Testé et approuvé

    J'aimerais pousser le vis un peu plus loin, car je me rends compte que je peux avoir besoin d'avoir autre chose qu'un "X" dans la colonne B.

    Je pensais que ça serait tout bête, mais je ne trouve pas comment mettre en 3ème argument : "X"ou"Y" par exemple. Ou encore indiquer juste que ça ne doit pas être vide, du genre "*". Quelle est la bonne syntaxe svp ? A moins que ça ne soit faisable qu'en VB ?

    En pendant que j'y suis, j'ai également essayé d'étendre la fonction à plusieurs colonnes.
    Exemple :

    Nom / Acheté / Prété / Monté
    Chaise / X / /
    Canapé / / X /
    Lit / / X /
    Bureau / / / X
    Table / / /
    Fauteuil/ / /

    Dans cet exemple, je voudrais donc obtenir soit Table soit Fauteuil, puisqu'ils n'ont de X dans aucune des colonnes.

    J'ai essayé de bidouiller moi-même la fonction, mais n'en comprenant pas toutes les lignes, j'ai fais n'importe quoi je crois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Function tiragevide(R As Range, R2 As Range, R3 As Range, R4 As Range, R5 As Range, condition As String) As String
    Final = R.Rows.Count
    colonne = R.Column
    colonne2 = R2.Column
    colonne3 = R3.Column
    colonne4 = R4.Column
    colonne5 = R5.Column
    i = Round(Application.WorksheetFunction.RandBetween(2, Final))
    While Cells(i, colonne2) <> condition
    i = Round(Application.WorksheetFunction.RandBetween(2, Final))
        While Cells(i, colonne3) <> condition
        i = Round(Application.WorksheetFunction.RandBetween(2, Final))
            While Cells(i, colonne4) <> condition
            i = Round(Application.WorksheetFunction.RandBetween(2, Final))
                While Cells(i, colonne5) <> condition
                i = Round(Application.WorksheetFunction.RandBetween(2, Final))
                Wend
            Wend
        Wend
    Wend
    tiragevide = Cells(i, colonne)
    End Function

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Si tu veux un Y il te suffira de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =tiragechelou(lerangedetesmeubles;lerangedetesY;"Y")
    Non vide = isempty = false

    Si tu veux faire un tirage sur la deuxieme colonne change tout simplement le range de tes Y dans la formule...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =tiragechelou(A2:A5;C2:C5;"X")

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je me suis plongé un peu plus dans le VB et j'ai compris que j'avais confonud If et While.
    FInalement j'ai donc réussi à compléter la fonction pour faire une vérification sur plusieurs colonnes simultannées en indiquant correctement ma condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function tiragevide(R As Range, R2 As Range, R3 As Range, R4 As Range, R5 As Range, R6 As Range, condition As String) As String
    Final = R.Rows.Count
    colonne = R.Column
    colonne2 = R2.Column
    colonne3 = R3.Column
    colonne4 = R4.Column
    colonne5 = R5.Column
    colonne6 = R6.Column
    i = Round(Application.WorksheetFunction.RandBetween(1, Final))
    While Cells(i, colonne2) <> condition Or Cells(i, colonne3) <> condition Or Cells(i, colonne4) <> condition Or Cells(i, colonne5) <> condition Or Cells(i, colonne6) <> condition
        i = Round(Application.WorksheetFunction.RandBetween(1, Final))
    Wend
    tiragevide = Cells(i, colonne)
    End Function
    Par contre je ne sais toujours pas comment indiquer "X" ou "Y" dans la même condition.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé ce que je cherchais en enlevant simplement le dernier argument de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function tiragechelou(R As Range, R2 As Range) As String
    Final = R.Rows.Count
    colonne = R.Column
    colonne2 = R2.Column
    i = Round(Application.WorksheetFunction.RandBetween(1, Final))
    While Cells(i, colonne2) = ""
    i = Round(Application.WorksheetFunction.RandBetween(1, Final))
    Wend
    tiragechelou = Cells(i, colonne)
    End Function
    Merci beaucoup pour ton aide EngueEngue, sans ta fonction je n'aurais jamais su faire le reste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro + tirage aléatoire avec condition
    Par emarnolydia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2015, 08h19
  2. Réponses: 0
    Dernier message: 07/09/2011, 16h08
  3. Tirage aléatoire à 2 conditions
    Par jacfld49 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 22/02/2010, 16h41
  4. Tirage aléatoire avec remise
    Par ndiayette dans le forum SAS STAT
    Réponses: 3
    Dernier message: 16/05/2008, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo