XL 2016 concours de pétanque

chrisr1949

XLDnaute Nouveau
Bonjour a tous,
J'essais de construire un programme excel pour la gestion d'un concours de pétanque (doublette ou triplette formée).
lors du tirage aléatoire du nombre d'équipes inscrites (120) je souhaiterais pouvoir afficher en face de chaque numéros d'inscription(de 1 à 120)
le numéros correspondant au tirage.
exemple si la première équipe inscrite a le numéros 1 au tirage elle aurait le numéro 19 et inversement l'équipe 19 à le numéro 1
Merci de m'aider pour ce code ou formule adaptée à ce problème.
PS: je suis nouveau dans excel 2016.
 

Pièces jointes

  • test1.xlsx
    24.2 KB · Affichages: 48

job75

XLDnaute Barbatruc
Bonsoir chrisr1949, bienvenue sur XLD, salut JBARBE,

Voyez le fichier joint et cette macro :
VB:
Sub Tirage()
Dim a, ub%, b(), d As Object, i%, r%
Randomize
With [B3:B122] 'adaptable
    a = .Value: ub = UBound(a)
    ReDim b(1 To ub, 1 To 1)
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To ub
        Do
            If i = ub Then If Not d.exists(a(i, 1)) Then r = b(1, 1): b(1, 1) = a(i, 1): Exit Do 'sécurité
            r = Application.RandBetween(1, ub)
        Loop While r = a(i, 1) Or d.exists(r)
        b(i, 1) = r
        d(r) = ""
    Next
    .Offset(, 2) = b 'décalage de 2 colonnes, adaptable
End With
End Sub
Edit : en colonne B les numéros peuvent être dans n'importe quel ordre mais toujours de 1 à 120.

A+
 

Pièces jointes

  • Tirage(1).xlsm
    26.3 KB · Affichages: 48
Dernière édition:

chrisr1949

XLDnaute Nouveau
Merci pour le fichier très intéressant, mais ne correspond pas exactement a ma demande.
Bien sur cela parait exigent, avec mais avec 71 années assumées j'aimerais arriver à faire se dont je me suis fixer.
Mettre au point ce programme afin de montrer à mes congénères que l'age n'a pas de limite.
 

job75

XLDnaute Barbatruc
Voyez donc ce fichier (2), pour créer les paires le Dictionary est inutile :
VB:
Sub Tirage()
Dim a, ub%, b(), i%, r%
Randomize
With [B3:B122] 'adaptable
    If .Rows.Count Mod 2 Then MsgBox "Le nombre d'équipes doit être pair...": Exit Sub
    a = .Value: ub = UBound(a)
    ReDim b(1 To ub, 1 To 1)
    For i = 1 To ub
        If b(i, 1) = "" Then
            Do
                r = Application.RandBetween(1, ub)
            Loop While r = i Or b(r, 1) <> ""
            b(i, 1) = a(r, 1)
            b(r, 1) = a(i, 1)
        End If
    Next
    .Offset(, 2) = b 'décalage de 2 colonnes, adaptable
End With
End Sub
 

Pièces jointes

  • Tirage(2).xlsm
    26.7 KB · Affichages: 41

chrisr1949

XLDnaute Nouveau
Merci pour le fichier "super"; mais y aurait il la possibilité de rendre le chiffre 122 à la ligne With (a3:a122) de la macro, identifiable automatiquement selon le nombre d'une autre cellule d'une autre colonne ou de feuille?
Merci de pour votre aide.
Christ1949
 

job75

XLDnaute Barbatruc
Comme indiqué [B3:B122] est adaptable.

On peut utiliser aussi :
VB:
With [B3].Resize(Application.Count([B:B]))
Ou en précisant la feuille (si la feuille active n'est pas la feuille Tirage) :
VB:
With Feuil1.[B3].Resize(Application.Count(Feuil1.[B:B]))
 

chrisr1949

XLDnaute Nouveau
Comme indiqué [B3:B122] est adaptable.

On peut utiliser aussi :
VB:
With [B3].Resize(Application.Count([B:B]))
Ou en précisant la feuille (si la feuille active n'est pas la feuille Tirage) :
VB:
With Feuil1.[B3].Resize(Application.Count(Feuil1.[B:B]))
Merci, mais cela ne fonctionne pas, ni pour le code 1 ou 2
le tirage ce fait toujours sur 120 numéros?
Quoi faire..
Christ1949
 

chrisr1949

XLDnaute Nouveau
Je ne comprends pas, c'est normal si de B3 à B122 il y a les nombres de 1 à 120 et qu'ensuite toutes les cellules sont vides...

Bien sûr B1 et B2 ne doivent pas contenir des nombres.
désolé, j'avais mal adapter les écritures.
Par ailleurs, y aurait il un moyen pour le second tirage et les suivants de faire jouer les gagnants ensembles ainsi que les perdants.
Exemple: 20 équipes dont 10 gagnants et 10 perdants
Merci pour votre précieuse aide à mon projet.
Christ1949
Bon noël
 

chrisr1949

XLDnaute Nouveau
désolé, j'avais mal adapter les écritures.
Par ailleurs, y aurait il un moyen pour le second tirage et les suivants de faire jouer les gagnants ensembles ainsi que les perdants.
Exemple: 20 équipes dont 10 gagnants et 10 perdants
Merci pour votre précieuse aide à mon projet.
Christ1949
Bon noël
Est il possible d'ajouter une colonne dans laquelle il y aurais un numéros de terrain de 1 a 60
Merci
 

Pièces jointes

  • test.xlsm
    67.2 KB · Affichages: 18

job75

XLDnaute Barbatruc
Bonjour chrisr1949,

La macro complétée pour le tirage aléatoire des terrains :
VB:
Sub Tirage()
Dim a, ub%, b(), c(), temp(), i%, r%, n%
Randomize
With [B5].Resize(Application.Count([b:b])) 'adaptable
    If .Rows.Count Mod 2 Then MsgBox "Le nombre d'équipes doit être pair...": Exit Sub
    a = .Value: ub = UBound(a)
    ReDim temp(1 To ub / 2)
    ReDim b(1 To ub, 1 To 1)
    ReDim c(1 To ub, 1 To 1)
    For i = 1 To ub / 2
        Do
            r = Application.RandBetween(1, ub / 2)
        Loop While IsNumeric(Application.Match(r, temp, 0))
        temp(i) = r
    Next
    For i = 1 To ub
        If b(i, 1) = "" Then
            Do
                r = Application.RandBetween(1, ub)
            Loop While r = i Or b(r, 1) <> ""
            b(i, 1) = a(r, 1)
            b(r, 1) = a(i, 1)
            n = n + 1
            c(i, 1) = temp(n)
            c(r, 1) = temp(n)
        End If
    Next
    .Offset(, 2) = b 'décalage de 2 colonnes, adaptable
    .Offset(, 4) = c 'décalage de 4 colonnes, adaptable
End With
End Sub
A+
 

Pièces jointes

  • test(1).xlsm
    67.3 KB · Affichages: 27

Discussions similaires

Réponses
23
Affichages
1 K

Statistiques des forums

Discussions
312 215
Messages
2 086 322
Membres
103 178
dernier inscrit
BERSEB50