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 :

faire un 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é
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 85
    Par défaut faire un tirage sans remise
    Bonjour,
    Je fais un planning de gestion des agents.
    Mon programme prend de la feuille "compétences", les agents dont la cellule n'est pas rouge et dont la cellule comprend des 1.
    Il les met ensuite dans un planning de la feuille "mois en cours", mais pas dans les cellules jaunes.
    Tout marche bien jusque là mais les noms des agents se répètent d'une colonne à l'autre.
    Je voudrais qu'un nom ne se mette que dans une cellule d'une ligne car en ligne se trouve les jours et en colonne leurs activités.
    Un agent ne peut faire qu'une activité par jour. Il faudrait donc je suppose modifier mon code en tirage sans remise.
    Merci de m'aider.

    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
    60
    61
    62
    Private Const MAX_ITER As Integer = 1000
    Private cpt%
     
    Sub Nom_FIP_1(w() As String)
     
    Dim v As Byte, c As New Collection, x As Integer, y() As Variant, z() As Variant, i As Byte
     
    Randomize
    y = Array(16, 17, 18)
    z = Array(9, 25, 42)
    For i = 0 To 2
        Do While c.Count < 4
            cpt% = cpt% + 1
            If cpt% > MAX_ITER Then
              cpt% = 0
              Exit Do
            End If
            x = Int(y(i) * Rnd + z(i))
            If Cells(x, 3) = 1 And Cells(x, 3).Interior.ColorIndex <> 3 Then
                On Error Resume Next
                c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
                If Err = 0 Then
                    On Error GoTo 0
                    w(v) = Cells(x, 2).Value
                    v = v + 1
                End If
                On Error GoTo 0
            End If
        Loop
        Set c = Nothing
    Next i
     
    End Sub
     
     
    Sub FIP_AIP_MUSC_1()
     
    Dim p As Range, v As Byte, w(12) As String
     
    Nom_FIP_1 w
     
    For Each p In Sheets("Mois en cours").Range("F4:F18")
        If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
           p.Value = w(0)
           For v = 1 To UBound(w)
               p.Value = p.Value & "/" & w(v)
           Next v
        End If
    Next p
     
    Nom_FIP_1 w
     
    For Each p In Sheets("Mois en cours").Range("F19:F34")
        If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
           p.Value = w(0)
           For v = 1 To UBound(w)
               p.Value = p.Value & "/" & w(v)
           Next v
        End If
    Next p
     
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour,

    si je comprends bien tu choisis 3*4 noms au hasard dans une feuille que tu copies ensuite dans une autre. Maintenant que cherches-tu à obtenir ?
    Ecrire chacun des 12 noms dans des cellules séparées ?
    Obtenir 12 noms différents dans la boucle ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 85
    Par défaut
    Oui, chacun de ces 12 noms s'inscrivent dans des cellules séparées.
    Le problème c'est que le code répète quelque noms présents dans la colonne F dans les colonnes G à L.
    Moi je voudrais qu'il ne reprenne pas les noms déjà présents dans F4 dans G4, H4... par exemple.

    Exemple
    pas bon:
    F4: toto titi tata
    G4: toto tutu tyty

    bon:
    F4: toto titi tata
    H4: tutu tete tyty

    Et cela jusqu'en ligne 34

  4. #4
    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,

    Lorsque c'est ainsi :
    - on alimente une liste des éléments parmi lesquels tirer aléatoirement
    - on tire aléatoirement dans cette liste (sur l'index)
    - on supprime de la liste chaque élément tiré

    Voilà !
    C'est là la méthode la plus "confortable", mais on peut faire (en un peu plus complexe, toutefois, la même chose avec un tableau dynamique ...)
    A toi d'y aller, maintenant.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 85
    Par défaut
    Salut Ucfoutu,
    où est-ce dans mon code que je peux supprimer de la liste chaque élément tiré?

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Je vois mal comment tu peux y arriver puisque tu affectes 7 colonnes et que tu cherches 4 noms différents par plage.
    7*4, soit 28 noms différents par plage, or tes plages contiennent au maximum 18 noms. Tu as 16 noms de la ligne 9 à 24 (4 colonnes max), 17 noms de la ligne 25 à 41 (4 colonnes max) et 18 noms de ligne 42 à 59.

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. tirage sans remise
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/03/2008, 11h44
  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