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 au sort


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 34
    Par défaut Tirage au sort
    Bonjour à tous,

    Voilà, je possède un fichier excel avec :
    - en Feuil1, une colonne de numéro de dossiers (en format standard, sous la forme de 01-001; 01-002; 02-001 etc...)
    - en Feuil2, je voudrais pouvoir tirer au sort 10 numéros parmi ma colonne de numéros de dossier.

    Les dix numéros sélectionnés seront répertoriés dans un tableau (dans la feuille 2). Et à chaque tirage au sort, 10 nouveaux numéros s'ajouteront à la suite des 10 précédents.

    Je ne sais pas si je dois passer par une VBA ou non. Je suis novice en VBA et j'ai cru comprendre que l'utilisation des VBA alourdissait très vite les fichiers.

    Y aurait il un moyen de résoudre mon problème? Dans l'idéal sans VBA mais je ne vais pas faire mon difficile

    Je vous remercie par avance de votre aide.

    Bonne journée à vous !

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par carte_blanche Voir le message
    Je ne sais pas si je dois passer par une VBA ou non
    La difficulté dans ton problème, ce n'est pas de tirer au sort un numéro (ça, la fonction ALEA() le fait très bien) mais de ne pas faire deux fois le même choix.
    Pour ça, je ne vois pas comment tu pourrais éviter de passer par du VBA.

    j'ai cru comprendre que l'utilisation des VBA alourdissait très vite les fichiers.
    Il ne faut pas non plus psychoter : si tu fait une macro de quelques centaines de lignes avec des boucles sur un grand nombre de valeurs, ça peut être lourd.
    Mais sur une appli qui ne prendra que quelques dizaines de lignes comme la tienne, si c'est bien fait, ça s'exécutera en un clin d'oeil.

    Pour te donner un exemple, j'ai fait en VBA une macro qui recherche les solution de Sudoku (ce qui fait quand même pas mal de combinaisons). Sur les plus difficiles, l'application trouve la solution en moins de 6 secondes. Sur la plupart, ça ne dépasse pas 1 s.

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, si cela peut t'aider, commencer par lire ceci : Comment générer une série de nombres entiers aléatoires sans doublon

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 34
    Par défaut
    Citation Envoyé par Menhir Voir le message
    La difficulté dans ton problème, ce n'est pas de tirer au sort un numéro (ça, la fonction ALEA() le fait très bien) mais de ne pas faire deux fois le même choix.
    Pour ça, je ne vois pas comment tu pourrais éviter de passer par du VBA.


    Il ne faut pas non plus psychoter : si tu fait une macro de quelques centaines de lignes avec des boucles sur un grand nombre de valeurs, ça peut être lourd.
    Mais sur une appli qui ne prendra que quelques dizaines de lignes comme la tienne, si c'est bien fait, ça s'exécutera en un clin d'oeil.

    Pour te donner un exemple, j'ai fait en VBA une macro qui recherche les solution de Sudoku (ce qui fait quand même pas mal de combinaisons). Sur les plus difficiles, l'application trouve la solution en moins de 6 secondes. Sur la plupart, ça ne dépasse pas 1 s.
    Merci de ta réponse Menhir. Je pense que j'ai vais donc utiliser une macro. Mais du coup, je me heurte à un autre problème, mon niveau en VBA est très très très basique.

    J'ai joint à ce message le genre de fichier que je possède. Un peu d'aide serait la bienvenue.

    EDIT : Merci kiki29, je viens de lire ton message, je vais y jeter un coup d'oeil
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté
    Homme Profil pro
    Enthousiaste Excel
    Inscrit en
    Avril 2015
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enthousiaste Excel

    Informations forums :
    Inscription : Avril 2015
    Messages : 155
    Par défaut
    Bonjour,

    J'ai peut être une solution, du moins pour la première partie.

    Feuil1, tu créé 2 colonnes
    Une remplie avec un alea()
    L'autre avec une fonction rang sur la colonne entière alea en première position

    Dans feuil2
    Tu créé une colonne style numauto (1,2,3,4)
    Tu fais un recherchev ou un indexetquiv sur la colonne rang de la feuil1

    Comme ça tu as bien un tirage aléatoire sans remise. Le calcul est rafraichit à chaque recalcul, mais tu peux copier/coller valeur pour figer sans au propre.

    J'espère avoir bien compris, et que cela répond à ton besoin.

    Cordialement.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    C'est une solution intéressante mais il ne faut pas oublié, pour que ça marche, de passer en calcul manuel.
    Sinon, ça va lui donner une nouvelle série à chaque fois qu'il fera la moindre modification dans sa feuille.

  7. #7
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    J'avais ça au fond d'un tiroir, si ça peut t'aider :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Sub Macro1()
        Dim NbRows
        Dim NbCols
        Dim NbTirages
        Dim Msg
        Dim MyValue
     
        ' Positionnement en A1
        Range("A1").Select
        ' Sélection du tableau
        Selection.CurrentRegion.Select
        ' Récupération du nombre de lignes et de colonnes
        NbRows = Selection.Rows.Count
        NbCols = Selection.Columns.Count
        NbTirages = "X"
        If NbRows > 0 Then
            ' Boucle tant que la valeur saisie n'est pas valide
            Do While Not IsNumeric(NbTirages)
                NbTirages = InputBox("Entrez un nombre compris entre 1 et " & Str(NbRows), "Tirage aléatoire")
                If NbTirages = "" Then
                    ' L'utiliser a cliqué sur Annuler
                    End
                ElseIf Not IsNumeric(NbTirages) Then
                    ' La saisie n'est pas numérique
                    Msg = MsgBox("Entrez un nombre valide.", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                ElseIf CInt(NbTirages) = 0 Or CInt(NbTirages) > NbRows Then
                    ' Le nombre dépasse le nombre de lignes
                    Msg = MsgBox("Entrez un nombre compris entre 1 et " & Str(NbRows) & ".", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                End If
            Loop
            ' Tirage au sort
            i = 0
            Do While i < CInt(NbTirages)
                ' Tirage d'un numéro compris entre 1 et le nombre de colonnes
                Randomize
                MyValue = Int((NbRows * Rnd) + 1)
                ' Positionnement sur la première colonne vide de la ligne aléatoire
                Range(Chr(65 + NbCols) & MyValue).Select
                If Trim(Range(Chr(65 + NbCols) & MyValue).Value) = "*" Then
                    ' La ligne est déjà sélectionnée
                    'NbTirages = NbTirages + 1
                Else
                    ' Marquer la ligne comme sélectionnée
                    Range(Chr(65 + NbCols) & MyValue).Value = "*"
                    i = i + 1
                End If
            Loop
            Msg = MsgBox("Tirage terminé.", vbInformation, "Tirage aléatoire")
        End If
        End
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 34
    Par défaut
    Merci à vous tous pour vos réponses.

    Du coup je me suis un peu inspiré de chacun d'entre vous. J'ai regardé un peu ta macro, pc75. Mais j'ai beaucoup de mal à l'adapter à mon fichier.

    J'ai trouvé une formule du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX('ETAPE 4 - Mise en service '!A11:A1000;ENT(ALEA()*(1000-1)+1))
    Je copierais cette formule dans un tableau à part. Et à chaque ouverture du fichier, j'aurai une liste de 10 numéros que je copierai sur la feuille 2. Faire cette manipulation ne me gène pas. Elle est même préférable.
    Mais je pense que ma formule n'est pas correcte. De plus, la formule tire également au sort les cellules vides. et je voudrais éviter ça.
    Ca ne me gène pas qu'il y a ait une remise à chaque tirage au sort. Mais je voudrais que les 10 numéros tirés soient à chaque fois différents les uns des autres.

  9. #9
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par Djohn92 Voir le message
    Bonjour,

    J'ai peut être une solution, du moins pour la première partie.

    Feuil1, tu créé 2 colonnes
    Une remplie avec un alea()
    L'autre avec une fonction rang sur la colonne entière alea en première position

    Dans feuil2
    Tu créé une colonne style numauto (1,2,3,4)
    Tu fais un recherchev ou un indexetquiv sur la colonne rang de la feuil1

    Comme ça tu as bien un tirage aléatoire sans remise. Le calcul est rafraichit à chaque recalcul, mais tu peux copier/coller valeur pour figer sans au propre.

    J'espère avoir bien compris, et que cela répond à ton besoin.

    Cordialement.
    J'utilise un procédé relativement similaire:
    • =ALEA() le long de la plage dont je veux un tirage aléatoire
    • Fige les valeurs (copier / coller valeurs)
    • Tri suivant mes ALEA avant de les supprimer
    • Garde mon nombre de valeur voulue



    C'est pareil mais avec moins de manip si j'ai bien compris ta méthode.

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par carte_blanche Voir le message
    à chaque ouverture du fichier, j'aurai une liste de 10 numéros
    Tu auras même une nouvelle liste à chaque fois que tu ferras une modification dans la feuille.
    Essaye de faire une simple saisie dans n'importe quelle cellule (autres que celles que tu utilises) et tu verras ta liste aléatoire se modifier.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Enthousiaste Excel
    Inscrit en
    Avril 2015
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enthousiaste Excel

    Informations forums :
    Inscription : Avril 2015
    Messages : 155
    Par défaut
    C'est le même raisonnement. Je te conseille de regarder cela carte_blanche :-)

    Citation Envoyé par antonysansh Voir le message
    J'utilise un procédé relativement similaire:
    • =ALEA() le long de la plage dont je veux un tirage aléatoire
    • Fige les valeurs (copier / coller valeurs)
    • Tri suivant mes ALEA avant de les supprimer
    • Garde mon nombre de valeur voulue



    C'est pareil mais avec moins de manip si j'ai bien compris ta méthode.

Discussions similaires

  1. Quelle fonction pour faire un tirage au sort de noms
    Par Sofie109 dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/06/2007, 14h52
  2. Tirage au sort
    Par Titeuf82 dans le forum Ada
    Réponses: 5
    Dernier message: 17/04/2007, 11h05
  3. Tirage au sort d'un mot
    Par Dav-D dans le forum C
    Réponses: 39
    Dernier message: 04/01/2007, 17h04
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 11h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

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