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 :

Chiffre aléatoire VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de jo50160
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 45
    Points
    45
    Par défaut Chiffre aléatoire VBA
    Bonjour à tous.

    Je voudrais faire une liste de 5 chiffres aléatoires sans doublon via VBA avec un bouton.

    Ces 5 chiffres devront être mis dans la ligne B cellules C2 jusqu’à G2.

    La liste des chiffres de 1 à 50 se trouve Colonne « L6 : L55 ».

    Chaque fois que je clic sur le bouton il renouvelle une notre liste de 5 chiffres.

    Je vous remercie par avance.

    Cordialement.

    Excel 2016.
    Windows 11.
    Window 11
    Office pro 2016

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    Hello,
    voici ce que je te propose :

    • On remplit une collection avec les valeurs à tirer.
    • On tire un élément de cette collection de façon aléatoire et on enlève cet élément de la collection pour ne pas le retirer.
    • On effectue cette opération 5 fois.


    le code :
    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
    Sub TirageAuSortUnique()
    Dim listeNombres As New Collection
    Dim Cell
    Dim x, nbALea As Integer
    Randomize
    For Each Cell In Range("L6:L55")
        listeNombres.Add (Cell.Value)
    Next
    ' tirage aléatoire des 5 nombres
    For x = 0 To 4
        nbALea = Int(listeNombres.Count * Rnd) + 1
        Debug.Print listeNombres.Item(nbALea)
        Range("C2").Offset(0, x).Value = listeNombres.Item(nbALea)
        listeNombres.Remove (nbALea)
    Next x
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre du Club Avatar de jo50160
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 45
    Points
    45
    Par défaut Chiffre aléatoire VBA
    Bonjour jurassic pork
    Merci pour ta réponse rapide et cela marche très bien.
    Merci beaucoup.

    Affaire résolu.
    Window 11
    Office pro 2016

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour à tous
    Je voudrais faire une liste de 5 chiffres aléatoires sans doublon via VBA avec un bouton.
    Une version plus basique que celle de jurassic pork (salut à toi)
    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
    Public Sub aleas()
    Dim plg()
    Dim col As Integer
    Dim res As String
    Dim rst As String
    Dim tir As Integer
        plg = ActiveSheet.Range("L6:L55").Value: rst = "||"
        For col = 1 To 5
           res = ""
           While res = ""
                Randomize: tir = Int((50 * Rnd) + 1)
                If InStr(rst, "|" & tir & "|") = 0 Then res = plg(tir, 1)
           Wend
           rst = rst & res & "|"
           ActiveSheet.Range("B2").Offset(lig, col).Value = res
        Next col
    End Sub
    Plutôt qu'un bouton, tu peux aussi la lancer avec un double clic sur C2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Target.CountLarge = 1 And Not Intersect(Target, Range("C2")) Is Nothing Then
            Cancel = True
            Call aleas
        End If
    End Sub

    @jo50160
    à toi de choisir
    bien cordialement

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    hello anasecu,
    il y a deux soucis dans ton code :
    1 - La variable lig n'est pas définie.
    2 - On peut tirer plusieurs fois la même valeur.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir jurassic pork

    1 - La variable lig n'est pas définie.
    Désolé je l'ai laissée à tord il faut mettre 0 elle était utilisée pour tester une plage de tirages et je n"ai pas tout supprimé.
    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
    Public Sub aleas()
    Dim plg()
    Dim col As Integer
    Dim res As String
    Dim rst As String
    Dim tir As Integer
        plg = ActiveSheet.Range("L6:L55").Value: rst = "||"
        For col = 1 To 5
           res = ""
           While res = ""
                Randomize: tir = Int((50 * Rnd) + 1)
                If InStr(rst, "|" & tir & "|") = 0 Then res = plg(tir, 1)
           Wend
           rst = rst & res & "|"
           ActiveSheet.Range("B2").Offset(0, col).Value = res
        Next col
    End Sub
    2 - On peut tirer plusieurs fois la même valeur.
    Là par contre je fais objection car tu n'as pas analysé tout mon code (que j'utilise quotidiènement)

    Merci d'avoir bien suivi !
    Cordialement "Ami calmant, J.P"

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    Citation Envoyé par anasecu Voir le message
    2 - On peut tirer plusieurs fois la même valeur.
    Là par contre je fais objection car tu n'as pas analysé tout mon code (que j'utilise quotidiènement)
    Effectivement je n'ai pas analysé le code mais en faisant une série de tirage avec ton code je me suis retrouvé par exemple avec :
    9
    5
    20
    51
    20
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    J'aurais bien aimé voir la copie car avec ma variable lig j'ai effectué 1000 tirages sans doubles : c'était le 1001 ?

    Pas grave jo50160 a ta solution

Discussions similaires

  1. [WD-2010] VBA Générateur de chiffre aléatoire
    Par Ashrell dans le forum VBA Word
    Réponses: 1
    Dernier message: 22/06/2012, 11h36
  2. Générer un chiffre aléatoire
    Par Invité dans le forum Langage
    Réponses: 18
    Dernier message: 11/10/2007, 19h58
  3. nombre à 8 chiffres aléatoires
    Par forzaxelah dans le forum Delphi
    Réponses: 8
    Dernier message: 09/06/2006, 12h30
  4. Choisir un chiffre aléatoire parmi une liste
    Par djsbens dans le forum Général Java
    Réponses: 2
    Dernier message: 08/03/2006, 19h19
  5. Chiffre aléatoire
    Par shamanlinks dans le forum Assembleur
    Réponses: 8
    Dernier message: 14/12/2005, 01h50

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