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 :

comment exclure un numero pour utliser le RND


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 96
    Par défaut comment exclure un numero pour utliser le RND
    bonsoir ,
    comment utiliser le RND dans un tirage au sort "genre euro million"
    pour que le premier numéro soit exclut dans le deuxième tirage

    voilà ce que je fais mais ça a pas l'ai de marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Private Sub btnNumero1_Click()
     Randomize
     Num1 = Int(49 * Rnd + 1)  ' un numéro entre 1 et 49 
     TxtNum1.Text = Num1     ' la case ou afficher le 1er numéro 
     TxtNum1.Enabled = False 
     End Sub
     
    Private Sub btnNumero2_Click()
    Num2 = Int((49 And Not Num1) * Rnd + 1) ' un  numéro entre 1 et 49 'diffèrent  du Num1
    TxtNum2.Text = Num2
    TxtNum2.Enabled = False
    End Sub
    si à qu'un à une idée c'est sympa

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition
    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
    Dim Tbl(1 To 49) As Byte
    Dim N As Byte
     
    Private Sub UserForm_Initialize()
    Dim i As Byte
    For i = 1 To 49
        Tbl(i) = i
    Next i
    N = 49
    End Sub
     
    Private Sub btnNumero1_Click()
    Dim i As Byte
    Dim Num As Integer
     
    Randomize
    N = 49
    Num = Int(N * Rnd + 1)
    txtNum1.Text = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
    End Sub
     
    Private Sub btnNumero2_Click()
    Dim i As Byte
    Dim Num As Integer
     
    Randomize
    Num = Int(N * Rnd + 1)
    txtNum2.Text = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 96
    Par défaut
    merci pour ta réponse
    j'ai fait le code pour le 3eme bouton clic le 3em numéro
    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
    55
    56
    57
    58
    59
     
    Private Sub UserForm_Initialize()
    Dim i As Byte
    For i = 1 To 49
        Tbl(i) = i
    Next i
    N = 49
    End Sub
     
    Private Sub btnNumero1_Click()
    Dim i As Byte
    Dim Num As Integer
     
    Randomize
    N = 49
    Num = Int(N * Rnd + 1)
    txtNum1.Text = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
    End Sub
     
    Private Sub btnNumero2_Click()
    Dim i As Byte
    Dim Num As Integer
     
    Randomize
    Num = Int(N * Rnd + 1)
    txtNum2.Text = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
    End Sub
     
     
     
    Private Sub btnNumero3_Click()
    '****
    Dim i As Byte
    Dim Num As Integer
     
    Randomize
    Num = Int(N * Rnd + 1)
    TxtNum3.Text = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
    TxtNum3.Enabled = False
    btnNumero3.Enabled = False
    end Sub
    et ça bug au niveau du deuxieme clic des fois il donne un zero 0 c'est !!!

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 96
    Par défaut
    j'ai adapté le code pour 3 bouton qui affiche 3 numéro aléatoire entre 1 et 3 (sans doublons)
    c'est a dire 1 ou 2 ou 3 une seul fois suite au 1er clic sur le bouton1 ensuite le 2eme clic sur le bouton2 ensuite le 3em clic sur le bouton3
    je l'ai tester exprès pour 3 boutons pour pouvoir voir si il y'a un bug
    mai cà a l'air de marcher si qu'un voit une anomalie merci de la signaler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Private Sub UserForm_Initialize()
    'LblDate.ForeColor (255) '= Color.FromArgb(255, 255, 255)
     
    '********
    Dim i As Byte
    For i = 1 To 3
        Tbl(i) = i
    Next i
    N = 3
    end sub
    a +

  5. #5
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    on peut raisonner dans l'autre sens :
    1 - sur clic sur le premier bouton :
    - je crée une collection de 49 numéros
    - j'en retire au hasard un certain nombre
    - il me reste les numéros que je veux
    - je lis le premier numéro de la collection
    2 - sur clic sur les boutons suivants
    - il suffit de lire le Nième numéro de la collection

    Il reste à mettre des enable pour être sûr de l'ordre de clic des boutons

    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
     
    Option Explicit
     
    Private oTirage As Collection
     
    Private Sub btnNumero1_Click()
    Dim lCpt As Long
    ' Initialisation du générateur de nombre aléatoire
    Randomize
    ' Nouvelle collection
    Set oTirage = New Collection
    ' Rempli la collection avec 49 numéros
    For lCpt = 1 To 49
        oTirage.Add lCpt
    Next
    ' Retire des numéros au hasard pour en conserver 6
    For lCpt = 1 To oTirage.Count - 6
        oTirage.Remove Int(Rnd * oTirage.Count) + 1
    Next
    ' Affiche le numéro 1
    TxtNum1.Text = oTirage(1)
    End Sub
     
    Private Sub btnNumero2_Click()
    ' Affiche le numéro 2
    TxtNum2.Text = oTirage(2)
    End Sub
    Private Sub btnNumero2_Click()
    ' Affiche le numéro 3
    TxtNum3.Text = oTirage(3)
    End Sub

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans un userform, nommé UserForm1, on insère:
    N textbox (TextBox1, TextBox2...TextBoxN)
    N boutons (CommandButton1, CommandButton2...CommandBouttonN)
    1 bouton nommé Reset

    1. Dans un module standard on mets le code et déclarations suivants
    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
    Public btnCollect As Collection
    Public Tbl() As Byte
    Public N As Byte
    Public M As Byte
    Public Const NB As Byte = 49        'Nombre max
    Public Const Tirage As Byte = 6     'Nombre de textbox
     
    Public Sub Initialiser()
    Dim Kontrol As Control
    Dim i As Byte
     
    ReDim Tbl(1 To NB)
    For i = 1 To NB
        Tbl(i) = i
    Next i
    N = NB
    M = 0
    For Each Kontrol In UserForm1.Controls
        If TypeOf Kontrol Is MSForms.TextBox Then Kontrol = ""
        Kontrol.Enabled = False
    Next Kontrol
    UserForm1.TextBox1.Enabled = True
    UserForm1.CommandButton1.Enabled = True
    UserForm1.Reset.Enabled = True
    End Sub
    2. Dans un module de classe nommé (par défaut) Classe1
    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
    Public WithEvents btn As MSForms.CommandButton
     
    Private Sub btn_Click()
    Dim i As Byte
    Dim Num As Integer
     
    M = M + 1
    Randomize
    Num = Int(N * Rnd + 1)
    UserForm1.Controls("TextBox" & M) = Tbl(Num)
    If Num < N Then
        For i = Num To N - 1
            Tbl(i) = Tbl(i + 1)
        Next i
    End If
    N = N - 1
     
    UserForm1.Controls("TextBox" & M).Enabled = False
    UserForm1.Controls("CommandButton" & M).Enabled = False
    If M < Tirage Then
        UserForm1.Controls("TextBox" & M + 1).Enabled = True
        UserForm1.Controls("CommandButton" & M + 1).Enabled = True
    End If
    End Sub
    3. Et dans le module de l'userform
    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
    Private Sub UserForm_Initialize()
    Dim Kontrol As Control
    Dim Bouton As Classe1
     
    Set btnCollect = New Collection
    For Each Kontrol In Me.Controls
        If TypeOf Kontrol Is MSForms.CommandButton Then
            If Kontrol.Name <> "Reset" Then
                Set Bouton = New Classe1
                Set Bouton.btn = Kontrol
                btnCollect.Add Bouton
            End If
        End If
    Next Kontrol
    Initialiser
    End Sub
     
    Private Sub Reset_Click()
    Initialiser
    End Sub

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. comment exclure les champs qui ont pour valeur NULL
    Par agur29 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2007, 19h23
  3. [JSP]comment créer un listener pour ma base de données
    Par Ekimasu dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/05/2004, 14h49
  4. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02
  5. Réponses: 5
    Dernier message: 18/01/2004, 16h25

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