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

Macros et VBA Excel Discussion :

Nombres aléatoires uniques dans une liste bornée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2022
    Messages : 7
    Par défaut Nombres aléatoires uniques dans une liste bornée
    Bonjour,

    Je cherche une à faire une macro en VBA qui permettrait d'attribuer un nombre aléatoire unique à des noms dans une liste de longueur définie.
    J'avais créé cette macro il y a quelques années, mais suite à un piratage des machines de mon établissement, je dois réécrire cette macro et je ne sais plus comment procéder !
    L'objectif est de placer de façon aléatoire des personnes sur des places dans une salle de cours.
    Quelqu'un pourrait m'aider ?
    Merci !
    Chonon

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 241
    Par défaut
    Hello,
    voici un exemple qui utilise des collections pour faire des tirages. Le principe est de mettre les éléments à tirer dans la collection, puis de tirer aléatoirement un de ces éléments et de le retirer de la collection pour qu'il ne soit plus tirer. Dans l'exemple il y a deux collection : une collection d'entiers représentant des places et une collection de chaînes représentant des personnes.
    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
    Sub TirageAuSortUnique()
    Dim listePersonnes As New Collection
    Dim listePlaces As New Collection
    Dim x, nbALea As Integer
    Randomize
    ' remplissage des numéros de places disponibles
    For x = 1 To 100
    listePlaces.Add (x)
    Next
    ' tirage aléatoire des 100 places
    For x = 1 To 100
    nbALea = Int(listePlaces.Count * Rnd) + 1
    Debug.Print listePlaces.Item(nbALea)
    listePlaces.Remove (nbALea)
    Next
    ' remplissage de personnes
    For x = 1 To 50
    listePersonnes.Add ("Personne" + CStr(x))
    Next
    ' Tirage aléatoire de 30 personnes
    For x = 1 To 30
    nbALea = Int(listePersonnes.Count * Rnd) + 1
    Debug.Print listePersonnes.Item(nbALea)
    listePersonnes.Remove (nbALea)
    Next
    End Sub
    Ami calmant, J.P

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2022
    Messages : 7
    Par défaut
    Salut JP,
    Merci de ton aide ! Avec ça, je peux déjà bien avancer. Dans ton code, pourrais tu calculer le nombre de personnes inscrites et utiliser ce nombre pour borner le tirage aléatoire ? Genre, s'il y a 40 personnes, la macro génère automatiquement les nombres de 1 à 40 de façon unique ??

    Encore merci,
    Chonon

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 241
    Par défaut
    Hello,



    Ma boule de cristal ne m'a pas dit où sont les personnes inscrites ? Dans une feuille ? Dans un fichier Externe ? Quelque part en mémoire ? Sur un téléphone portable ? ailleurs ?
    Peux-tu montrer un exemple de liste de personnes inscrites (où fournir un classeur) en mettant bien sûr des personnes fictives.

    Ami calmant, J.P

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2022
    Messages : 7
    Par défaut
    Bien sûr ! Désolé... Ca parait toujours clair quand on a le nez dans sa feuille excel ...
    Du coup, tu peux imaginer une feuille excel avec des noms et prénoms en colonnes A et B et des nombres générés de 1 à n où n est le nombre de personnes dans la colonne A.
    Lorsque la macro fonctionnera, je l'associerai à un bouton sur le ruban excel pour générer les nombres de façon manuelle .
    J'espère que le fichier joint est vraiment joint...
    Merci !
    Chonon
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 241
    Par défaut
    Voici une macro qui calcule le nombre de personnes (on utilise une plage nommée : Personnes) et qui fait un tirage aléatoire unique et qui met la place tirée en colonne C de la feuille.
    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
    Sub TirageAuSortUnique()
    Dim listePlaces As New Collection
    Dim x, nbALea, nbPersonnes As Integer
    Randomize
    nbPersonnes = ActiveSheet.Range("Personnes").Rows.Count
    ' remplissage des numéros de places disponibles
    For x = 1 To nbPersonnes
    listePlaces.Add (x)
    Next
    ' tirage aléatoire
    For x = 1 To nbPersonnes
    nbALea = Int(listePlaces.Count * Rnd) + 1
    Debug.Print listePlaces.Item(nbALea)
    ActiveSheet.Range("Personnes").Cells(1, 1).Offset(x - 1, 2).Value = listePlaces.Item(nbALea)
    listePlaces.Remove (nbALea)
    Next
    End Sub
    ActiveSheet.Range("Personnes").Cells(1, 1) correspond à la première cellule de la plage nommée Personnes.
    En pièce jointe le classeur avec la macro.

    Nom : TestChono.PNG
Affichages : 1090
Taille : 65,6 Ko
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Nombre d'occurence dans une liste
    Par Axiome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2008, 13h15
  2. clé unique dans une liste sharepoint
    Par makinda dans le forum SharePoint
    Réponses: 1
    Dernier message: 14/05/2008, 08h35
  3. Réponses: 2
    Dernier message: 06/05/2007, 23h43
  4. Connaitre le nombre de selections dans une liste deroulante multiple
    Par ikeaboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2006, 08h50
  5. [liste] référence unique dans une liste
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 3
    Dernier message: 29/03/2005, 09h57

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