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

  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 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 183
    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 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 183
    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 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 183
    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 : 1030
Taille : 65,6 Ko
    Fichiers attachés Fichiers attachés

  7. #7
    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
    Bonjour JP,
    Merci beaucoup,
    Je teste la macro et je te tiens au courant !

    Chonon

  8. #8
    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
    Citation Envoyé par Chonon2022 Voir le message
    Bonjour JP,
    Merci beaucoup,
    Je teste la macro et je te tiens au courant !

    Chonon
    Elle marche nickel, merci beaucoup !
    Peux-tu regarder comment cette macro pourrait fonctionner sans devoir créer une liste au préalable (Personnes) ? Ça rendrait le fonctionnement encore plus simple.
    Pour l'instant, pour des listes de longueur variable, ça nécessite de devoir créer une liste avec le nombre total de personnes pour chaque attribution.

    Encore merci!

    Chonon

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 183
    Par défaut
    Citation Envoyé par Chonon2022 Voir le message
    Elle marche nickel, merci beaucoup !
    Peux-tu regarder comment cette macro pourrait fonctionner sans devoir créer une liste au préalable (Personnes) ? Ça rendrait le fonctionnement encore plus simple.
    Pour l'instant, pour des listes de longueur variable, ça nécessite de devoir créer une liste avec le nombre total de personnes pour chaque attribution.
    Encore merci!
    Chonon
    Je ne comprends pas bien la question car une plage nommée (qui n'est pas une liste mais une sélection de cellules) peut s'étendre ou se réduire facilement.

  10. #10
    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
    Citation Envoyé par jurassic pork Voir le message
    Je ne comprends pas bien la question car une plage nommée (qui n'est pas une liste mais une sélection de cellules) peut s'étendre ou se réduire facilement.
    En fait, sur ma feuille excel, l'attribution des places se fait uniquement sur la plage nommée et l'étendre en sélectionnant d'autres cellules ne sert à rien.
    Si je diminue la liste, la macro attribue des places à des cases vides et si j'ajoute des noms, ils ne sont pas pris en compte...

    Soit je m'y prends très mal, soit il y a qq chose que je ne vois pas !
    dsl

    Chonon

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 183
    Par défaut
    Hello,
    Citation Envoyé par Chonon2022 Voir le message
    En fait, sur ma feuille excel, l'attribution des places se fait uniquement sur la plage nommée et l'étendre en sélectionnant d'autres cellules ne sert à rien.
    Si je diminue la liste, la macro attribue des places à des cases vides et si j'ajoute des noms, ils ne sont pas pris en compte...

    Soit je m'y prends très mal, soit il y a qq chose que je ne vois pas !
    Il faut utiliser le gestionnaire de Noms (Dans l'onglet Formules ou faire CTRL F3) pour changer l'étendue des plages nommées. Voir ici


    Exemple d'ajout d'une personne dans la plage nommée :

    Nom : TiragePersonnes.gif
Affichages : 927
Taille : 440,1 Ko

    Ami calmant, J.P

  12. #12
    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
    Bonjour,
    Un grand merci pour l'aide, les propositions et la patience !
    Je peux clore la discussion avec la mention : RESOLU !!

    Chonon

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