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 :

tirage sans remise


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
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut tirage sans remise
    Bonjour, j essaie d'écrire un programme de trirage sans remise de 5 valeurs parmi 10.
    j'ai écrit le programme suivant :
    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
    Sub macroee()
    Dim Numeros_valeurs() As Integer
    Dim Position, valeur_tiree, Pointeur As Integer
    Dim Test As Boolean
     
     
    Position = 1
    Pointeur = 1
    Test = False
     
    For i = 1 To 5
    valeur_tiree = Int(Rnd * 10) + 1
    While Pointeur <= Position And Test = False
        If Numeros_valeurs(Pointeur) = valeur_tiree Then
            Test = True
        End If
        Pointeur = Pointeur + 1
    Wend
    If Test = False Then
        Numeros_valeurs(Position) = valeur_tiree
        Range("A" & valeur_tiree).Copy
        Range("B" & i).Paste
    End If
     
    Next
     
    End Sub
    Il me plante a la ligne If Numeros_valeurs(Pointeur) = valeur_tiree Then
    il me met subscript out of range...
    mais je n'arrive pas à voir l'erreur dans mon programme
    ...
    si quelqu'un la voyait, merci d'écrire la réponse...
    cordialement

  2. #2
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    j ai trouve l'erreur, il fallait que je déclare la taille de mon tableau...

    néanmoins, ca m'effectue un tirage avec remise...j comprends pas trop...

    bon, ben j'ai trouvé tout seul finalement...
    je poste le code pour si ça intéresse quelqu'un par la suite :
    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
    Sub macroee()
    Dim Numeros_valeurs(10) As Integer
    Dim Position, valeur_tiree, Pointeur As Integer
    Dim Test As Boolean
     
     
    Position = 1
     
    For i = 1 To 5
    Pointeur = 1
    Test = False
     
    valeur_tiree = Int(Rnd * 10) + 1
    While Pointeur <= Position And Test = False
        If Numeros_valeurs(Pointeur) = valeur_tiree Then
            Test = True
        End If
        Pointeur = Pointeur + 1
    Wend
    If Test = False Then
        Numeros_valeurs(Position) = valeur_tiree
     
        Range("A" & valeur_tiree).Copy
        Range("B" & i).PasteSpecial
    Position = Position + 1
    End If
     
    Next
     
    End Sub

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Analyse ceci (méthode de mon copain le sapeur Camembert... ) et sers-t-en donc :

    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
    Private Sub Command1_Click()
      Const nbparmi = 10 'ici le nombre total
      Const nbatirer = 5  'ici le nombre de numéros aléatoires à sortir du nombre total
      Randomize
      Dim tabl(nbparmi - 1) As Integer, i As Integer, a As String, ou As Integer
      For i = 0 To nbparmi - 1
        tabl(i) = i
      Next
      For i = 0 To nbatirer - 1
        ou = Int(((nbparmi - i) * Rnd))
        a = a & vbCrLf & tabl(ou)
        tabl(ou) = tabl(nbparmi - 1 - i)
      Next
      MsgBox a
     
    End Sub

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    je retire ce que j'ai dit...mon programme ne marche pas...c est toujours un tirage avec remise...pourquoi, j'en sais encore rien...
    en revanche l'autre programme de ucfoutu marche, lui

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par ouioui_cmoi Voir le message
    en revanche l'autre programme de ucfoutu marche, lui
    Il marche ?

    Ouille alors ..... Mets-lui vite une laisse pour qu'il ne se sauve pas ...

    Mais surtout : analyse-le lentement (tu vas comprendre le coup du sapeur Camembert qui, dans sa caserne, faisait à l'infini un trou pour y prendre de la terre et en boucher un autre ...)

  6. #6
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    lol
    ouais, j vais l'analyser...je le ferais tout a l'heure, parce que la, je dois travailler sur autre chose
    Néanmoins, j'aimerais bien comprendre ce qui cloche dans mon programme, je ne comprend pas mon erreur de logique, c'est frustrant!
    donc si quelqu'un la voit...merci de me faire signe

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Z'avez pas fini, oui ?

    Sauf à retirer plus de fois que nécessaire (chaque fois que le tirage correspond à ce qui a déjà été tiré), il faut faire ce que j'ai montré (le truc du pompier et de ses trous dans la caserne) : chaque fois qu'un nombre est tiré, l'envoyer à la fin et remplacer (là où il était), par le dernier nombre non encore tiré. Et pour y parvenir : décrémenter la valeur du rnd (de sorte à ne tirer qu'en haut, parmi les nombres non encore tirés)...

    Ah, mon brave copain le sapeur Camembert ... il n'était pas si bête, hein ... ???

  8. #8
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    exit for me sort de la boucle...il ne calcule alors que pour n nombres aleatoires, avec n<5...
    j ai l'impression que avec exit do, lorsqu il tombe sur 2 mêmes nombres, il sort totalement de la boucle pour un i donné, et continue avec i+1
    (certaines cases vides...)

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je retire ce que je t'ai mis, j'ai lu en en diagonale et t'ai répondu de travers
    Comme le code de ucfoutu fonctionne, essaie de le comprendre et suis donc son conseil

  10. #10
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    lol
    ok tant pis, c'etait juste pour comprendre mon erreur...

Discussions similaires

  1. Boucle tirage aléatoire sans remise
    Par Jennn dans le forum Macro
    Réponses: 17
    Dernier message: 12/07/2012, 09h17
  2. Tirage de nombre selon une loi uniforme sans remise
    Par celia89 dans le forum SAS STAT
    Réponses: 2
    Dernier message: 16/02/2012, 16h50
  3. Perl script aléatoire d'un hash: tirage sans remise
    Par Sethenssen dans le forum Langage
    Réponses: 11
    Dernier message: 04/08/2011, 10h18
  4. faire un tirage sans remise
    Par mgrizzly dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 19/05/2009, 11h38
  5. Tirage sans remise
    Par pedrosanchau dans le forum MATLAB
    Réponses: 9
    Dernier message: 04/02/2008, 16h05

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