Affichage inversé

MARGAR

XLDnaute Junior
Bonjour le forum,

J'ai un petit souci avec mon fichier.
J'aimerai que mon affichage reste logique mais après plusieurs essais, je n'y parviens toujours pas.

Je vous joins 2 copies d'écrans et le code qui pause problème.

Merci d'avance

Cordialement

Margar

Voici le code :
Code:
For I = 1 To rencontre Step 1
        For J = 1 To NbJ Step 1
            If bigtablo(J, L + 16) = I Then
                If Sheets("P" & L).Cells(3 + I, 1).Value = "" Then
                    Sheets("P" & L).Cells(3 + I, 1).Value = bigtablo(J, 1)
                    numequipe = bigtablo(J, L + 1)
                Else
                    If bigtablo(J, L + 1) = numequipe Then
                        If Sheets("P" & L).Cells(3 + I, 2).Value = "" Then
                            Sheets("P" & L).Cells(3 + I, 2).Value = bigtablo(J, 1)
                        Else
                            If Sheets("P" & L).Cells(3 + I, 3).Value = "" Then
                                Sheets("P" & L).Cells(3 + I, 3).Value = bigtablo(J, 1)
                            End If
                        End If
                    Else
                        If Sheets("P" & L).Cells(3 + I, 4).Value = "" Then
                            Sheets("P" & L).Cells(3 + I, 4).Value = bigtablo(J, 1)
                        Else
                            If Sheets("P" & L).Cells(3 + I, 5).Value = "" Then
                                Sheets("P" & L).Cells(3 + I, 5).Value = bigtablo(J, 1)
                            Else
                                Sheets("P" & L).Cells(3 + I, 6).Value = bigtablo(J, 1)
                            End If
                        End If
                    End If
                End If
            End If
            
        Next J
    Next I
 

Pièces jointes

  • Affichage  OK.PNG
    Affichage OK.PNG
    26.1 KB · Affichages: 118
  • Affichage pas OK.PNG
    Affichage pas OK.PNG
    25.4 KB · Affichages: 116

MARGAR

XLDnaute Junior
Re : Affichage inversé

Bonjour Bebere,

Ex. pour 25 Joueurs inscrits : ce qui correspond à 5 Triplettes (de 3 Joueurs) et 5 Doublettes (de 2 Joueurs)
pour info 33 Joueurs inscrits, on aura : 9 Triplettes et 3 Doublettes

Première Manche

Equipe 1 contre Equipe 2

1 Triplette contre 1 Triplette
1Triplette contre 1 Triplette
1 Triplette contre 1 Doublette
1 Doublette contre 1 Doublette
1 Doublette contre 1 Doublette

et la même chose pour les autres manches
 

Bebere

XLDnaute Barbatruc
Re : Affichage inversé

essai concluant
juste ajouté la boucle 10 to 63 pour avoir des labels vierges

Code:
Private Sub UserForm_initialize()
    Dim J As Long, Rng As Range, Rng1 As Range
    Dim I As Integer, x As Integer, x1 As Integer
    Dim Indice As Integer

    UserFormManche.Label2.Caption = nomanche & " Manche"
    UserFormManche.LabelDateTournoi.Caption = Right(Sheets("Classement").Range("A1").Value, 22)
    
    For J = 10 To 63
    Me("Label" & J).Caption = ""
    Next
    With Sheets("P" & numanche)

        ' Inscription des noms
        ' Le premier label nom est le 10
        Indice = 10
        For J = 4 To 12
        Set Rng = .Range("A" & J & ":C" & J): Set Rng1 = .Range("D" & J & ":F" & J)
        x = Application.CountA(Rng): x1 = Application.CountA(Rng1)
        If x = x1 Then
            For I = 1 To 6
                Me("Label" & Indice).Caption = .Cells(J, I).Value
                Indice = Indice + 1
            Next I
        ElseIf x1 > x Then
             For I = 4 To 6
                Me("Label" & Indice).Caption = .Cells(J, I).Value
                Indice = Indice + 1
            Next I
                      For I = 1 To 3
                Me("Label" & Indice).Caption = .Cells(J, I).Value
                Indice = Indice + 1
            Next I
  
        End If
            Me("Label" & 96 + J) = .Range("I" & J)
            Me("TextBoxResult" & J - 3) = .Range("G" & J)
            Me("TextBoxResult" & J + 6) = .Range("H" & J)
        Next J

        ' Inscription des scores
        ' Inscription des terrains
        ' Le premier label terrain est le 100
        '    Indice = 100
        '    For J = 8 To 10
        '     Me("Label" & Indice) = .Range("I" & J)
        '      Indice = Indice + 1
        '      ' Pour les points équipe 1 les Textbox vont de 1 à 9
        '      UserFormManche.Controls("TextBoxResult" & J - 3) = .Range("G" & J)
        '      ' Pour les points équipe 2 les Textbox vont de 10 à 18
        '      UserFormManche.Controls("TextBoxResult" & J + 6) = .Range("H" & J)
        '
        '    Next J

    End With
End Sub
 

Bebere

XLDnaute Barbatruc
Re : Affichage inversé

voilà Margar

Sub tirage()

' --- Déclaration des Variables ---
Dim bigtablo(1 To 54, 1 To 36) As String ' Premiere dimension = Données pour un individu (maxi 54 inscrits)
Dim c As Integer
' Deuxième dimension =
' 1 : Numéro + Prénom
' 2 to 6 : n° d'équipe dans chacune des 5 manches
' 7 to 16 : Désignation des Equipiers (2 par manches donc 10 maximum en 5 manches)
' 17 to 21: n° des rencontres dans chacune des 5 manches
' 22 to 36: Désignation des Adversaires (3 par manches donc 15 maximum en 5 manches)
Dim tablo 'tableau VBA utilisé pour le tirage au sort des équipes
Dim Tablo2(1 To 9) As Integer 'tableau VBA utilisé pour le tirage au sort des terrains
Dim combinaison As Variant 'tableau combinaisons doublettes/triplettes en fonction du nombre d'inscrits
Dim NbJ As Integer 'nombre total de joueurs
Dim NbManche As Integer ' Nb défini de manches par l'arbitre
Dim I As Integer '1ere variable d'incrémentation
Dim J As Integer '2eme variable d'incrémentation
Dim k As Integer '3eme variable d'incrémentation
Dim L As Integer 'variable d'incrémentation des manches
Dim compteur As Integer 'variable d'incrémentation qui comptabilise le nombre de boucles/de tirages relancés
Dim numero As Integer 'variable de numerotation des joueurs
Dim equipe As Integer 'variable de numerotation des équipes
Dim rencontre As Integer 'variable de numerotation des rencontres
Dim validation As Integer 'Variable de validation des éléments comme non-doublon équipier ou adversaire
Dim temp 'variable de stockage temporaire
Dim Debut As Currency, Fin As Currency, Freq As Currency
Dim choixdoublonequipe As Boolean, choixdoublonadverse As Boolean
Dim Plage As Range, Cel As Range
Dim numequipe As Integer 'varaible temporaire pour gérer l'affichage sous forme de tableur excel

' --- initialisation des tableaux de variables ---
Erase bigtablo

Application.ScreenUpdating = False

Sheets("Saisie").Range("D3:AN55").ClearContents ' on vide le tableau précédent

' Remplissage des participants dans le tableau VBA avant tirage aléatoire
tablo = Sheets("Saisie").Range("B11:B" & Sheets("Saisie").Range("B7").Value + 10)
NbJ = UBound(tablo)

' Remplissage des participants dans un tableau VBA pour stocker les données issues du tirage
For I = 1 To NbJ
bigtablo(I, 1) = tablo(I, 1)
Next I

' on rajoute une dimension pour stocker le tirage associé au joueur
ReDim Preserve tablo(1 To NbJ, 1 To 2)

' On détermine le nombre de doublettes et de triplettes en fonction du nombre d'inscrits et du tableau combinaison ci-dessous
' combinaison(NbJ)(2) = nombre de doublettes
' combinaison(NbJ)(3) = nombre de triplettes
combinaison = Array(Array(1, 0, 0), Array(2, 0, 0), Array(3, 0, 0), Array(4, 2, 0), Array(5, 1, 1), Array(6, 0, 2), _
Array(7, 0, 0), Array(8, 4, 0), Array(9, 3, 1), Array(10, 2, 2), Array(11, 1, 3), Array(12, 0, 4), Array(13, 5, 1), _
Array(14, 4, 2), Array(15, 3, 3), Array(16, 2, 4), Array(17, 1, 5), Array(18, 0, 6), Array(19, 5, 3), Array(20, 4, 4), _
Array(21, 3, 5), Array(22, 2, 6), Array(23, 1, 7), Array(24, 0, 8), Array(25, 5, 5), Array(26, 4, 6), Array(27, 3, 7), _
Array(28, 2, 8), Array(29, 1, 9), Array(30, 0, 10), Array(31, 5, 7), Array(32, 4, 8), Array(33, 3, 9), Array(34, 2, 10), _
Array(35, 1, 11), Array(36, 0, 12), Array(37, 5, 9), Array(38, 4, 10), Array(39, 3, 11), Array(40, 2, 12), Array(41, 1, 13), _
Array(42, 0, 14), Array(43, 5, 11), Array(44, 4, 12), Array(45, 3, 13), Array(46, 2, 14), Array(47, 1, 15), Array(48, 0, 16), _
Array(49, 5, 13), Array(50, 4, 14), Array(51, 3, 15), Array(52, 2, 16), Array(53, 1, 17), Array(54, 0, 18))


' Sortie du programme si le nombre d'inscrits ne permet pas un tournoi
If combinaison(NbJ)(2) + combinaison(NbJ)(3) = 0 Then: MsgBox "Compte tenu du nombre d'inscrits (" & NbJ & "), il n'y a pas de solutions": Exit Sub

' définition du nombre de manches en cellule B2
NbManche = Sheets("Saisie").Range("B3").Value
choixdoublonequipe = Sheets("Saisie").Range("C5").Value
choixdoublonadverse = Sheets("Saisie").Range("C6").Value


'Affichage du tableau dans l'onglet Recap
With Sheets("Recap")
'.Unprotect
For I = 1 To NbJ
.Cells(I + 2, 2) = tablo(I, 1)
Next I
'.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With





' on vide les données préalablement renseignées dans les onglets "Manche X"
For L = 1 To 5 Step 1
Sheets("P" & L).Range("A4:I12").ClearContents
Next L

Randomize

' initialisation du compteur de boucle sur l'ensemble des manches
compteur = 1

' On boucle sur chacune des manches
For L = 1 To NbManche
Do
' Numérotation aléatoire des joueurs
For I = 1 To NbJ Step 1
tablo(I, 2) = Rnd
Next I

' Tri en fonction de la numérotation des joueurs
' tri à bulle en fonction de l'ordre croissant
For I = 1 To NbJ Step 1
For J = 1 To NbJ Step 1
' Compare 2 tirages de deux joueurs différents
If tablo(I, 2) < tablo(J, 2) Then
' Interverti le n°/prénom et le n° du tirage
For k = 1 To 2 Step 1
temp = tablo(I, k)
tablo(I, k) = tablo(J, k)
tablo(J, k) = temp
Next k
End If
Next J
Next I

' initialisation de la variable numérotation du joueur et autres
numero = 0
equipe = 1
rencontre = 1
validation = 0
For I = 1 To NbJ Step 1 ' vide les équipiers et les adversaires (si boucle)
bigtablo(I, 1 + L) = ""
bigtablo(I, 5 + (L * 2)) = ""
bigtablo(I, 6 + (L * 2)) = ""
bigtablo(I, 16 + L) = ""
bigtablo(I, 19 + (3 * L)) = ""
bigtablo(I, 20 + (3 * L)) = ""
bigtablo(I, 21 + (3 * L)) = ""
Next I

' Stockage des tirages, affectation des équipes et des rencontres
' On commence par affecter les triplettes
For I = 1 To combinaison(NbJ)(3) Step 1
' j est égal à 3 joueurs = une triplette
For J = 1 To 3 Step 1
' On affecte un numéro par joueur, au fur et à mesure
numero = numero + 1
' On va chercher l'indice correspondant au joueur
For k = 1 To NbJ Step 1
If bigtablo(k, 1) = tablo(numero, 1) Then
' On affecte le numéro d'équipe
bigtablo(k, 1 + L) = equipe
' On affecte le numéro de rencontre
bigtablo(k, 16 + L) = rencontre
End If
Next k

' si 3 coéquipiers, on change d'équipe
If numero Mod 3 = 0 Then
equipe = equipe + 1
' Si nb d'équipes impair, on change de rencontre
If (equipe + 1) Mod 2 = 0 Then
rencontre = rencontre + 1
End If
End If
Next J
Next I

' Puis on affecte les doublettes
For I = 1 To combinaison(NbJ)(2) Step 1
' j est égal à 2 joueurs = une doublette
For J = 1 To 2 Step 1
' On affecte un numéro par joueur, au fur et à mesure
numero = numero + 1
' On va chercher l'indice correspondant au joueur
For k = 1 To NbJ Step 1
If bigtablo(k, 1) = tablo(numero, 1) Then
' On affecte le numéro d'équipe
bigtablo(k, 1 + L) = equipe
' On affecte le numéro de rencontre
bigtablo(k, 16 + L) = rencontre
End If
Next k

' si 2 coéquipiers, on retranche les joueurs triplettes et on change d'équipe
If (numero - (3 * combinaison(NbJ)(3))) Mod 2 = 0 Then
equipe = equipe + 1
' Si nb d'équipes impair, on change de rencontre
If (equipe + 1) Mod 2 = 0 Then
rencontre = rencontre + 1
End If
End If
Next J
Next I

' On affecte les coequipiers et les adversaires
For I = 1 To NbJ Step 1
For J = 1 To NbJ Step 1
' si indice différent et un même n° d'équipe = un équipier
If I <> J And bigtablo(I, 1 + L) = bigtablo(J, 1 + L) Then
If bigtablo(I, 5 + (2 * L)) = "" Then
bigtablo(I, 5 + (2 * L)) = bigtablo(J, 1)
Else
bigtablo(I, 6 + (2 * L)) = bigtablo(J, 1)
End If
End If
' On affecte les adversaires = même n° de rencontre mais n° d'équipe différent
If I <> J And bigtablo(I, 16 + L) = bigtablo(J, 16 + L) And bigtablo(I, 1 + L) <> bigtablo(J, 1 + L) Then
If bigtablo(I, 19 + (3 * L)) = "" Then
bigtablo(I, 19 + (3 * L)) = bigtablo(J, 1)
Else
If bigtablo(I, 20 + (3 * L)) = "" Then
bigtablo(I, 20 + (3 * L)) = bigtablo(J, 1)
Else
bigtablo(I, 21 + (3 * L)) = bigtablo(J, 1)
End If
End If
End If
Next J
Next I

For I = 1 To NbJ Step 1
' recherche des doublons dans les équipiers
If choixdoublonequipe = True Then 'si coché
For J = 7 To 16 Step 1
For k = 7 To 16 Step 1
If J <> k And bigtablo(I, J) = bigtablo(I, k) And bigtablo(I, J) <> "" Then
validation = 1
End If
Next k
Next J
End If
' recherche des doublons dans les adversaires
If choixdoublonadverse = True Then 'si coché
For J = 22 To 36 Step 1
For k = 22 To 36 Step 1
If J <> k And bigtablo(I, J) = bigtablo(I, k) And bigtablo(I, J) <> "" Then
validation = 1
End If
Next k
Next J
End If
Next I

Loop While validation = 1
Next L

With Sheets("Saisie")
For L = 1 To UBound(bigtablo, 1)
For c = 2 To UBound(bigtablo, 2)
.Cells(L + 2, c + 2).Value = bigtablo(L, c)
Next c
Next L
End With

' recopiage des résultats sous feuilles excel

'Pour vérification
'Sheets("Saisie").Range("C1:ZZ55").ClearContents ' on vide le tableau précédent
For L = 1 To NbManche '5 Step 1

'rempli le tableau "associés" pour plus de
For I = 1 To rencontre ' 7 Step 1
For J = 1 To NbJ ' Step 1
If Val(bigtablo(J, L + 16)) = I Then
If Sheets("P" & L).Cells(3 + I, 1).Value = "" Then
Sheets("P" & L).Cells(3 + I, 1).Value = bigtablo(J, 1)
numequipe = bigtablo(J, L + 1)
Else
If bigtablo(J, L + 1) = numequipe Then
If Sheets("P" & L).Cells(3 + I, 2).Value = "" Then
Sheets("P" & L).Cells(3 + I, 2).Value = bigtablo(J, 1)
Else
If Sheets("P" & L).Cells(3 + I, 3).Value = "" Then
Sheets("P" & L).Cells(3 + I, 3).Value = bigtablo(J, 1)
End If
End If
Else
If Sheets("P" & L).Cells(3 + I, 4).Value = "" Then
Sheets("P" & L).Cells(3 + I, 4).Value = bigtablo(J, 1)
Else
If Sheets("P" & L).Cells(3 + I, 5).Value = "" Then
Sheets("P" & L).Cells(3 + I, 5).Value = bigtablo(J, 1)
Else
Sheets("P" & L).Cells(3 + I, 6).Value = bigtablo(J, 1)
End If
End If
End If
End If
End If

Next J
Next I


'affectation des terrains
Set Plage = Sheets("P" & L).Range("I4:I" & rencontre + 2)
I = 0
For Each Cel In Plage
I = I + 1
Do
Tablo2(I) = Int(9 * Rnd + 1)
Loop While Application.CountIf(Plage, Tablo2(I))
Cel = Tablo2(I)
Next Cel

Next L
Application.ScreenUpdating = True


End Sub
 

MARGAR

XLDnaute Junior
Re : Affichage inversé

Malheureusement, j'ai toujours les mêmes problèmes d'Affichage inversé.

Le tirage en lui-même a toujours bien fonctionné mais pas l'affichage lorsque l'on clique sur "Manche1,2,3,4,ou 5"
ou dans les onglets P1, P2, P3, P4 ou P5

Ci-jointe copie d'écran.

Merci

Margar
 

Pièces jointes

  • AFFICHAGE CORRECT ET PAS CORRECT.jpg
    AFFICHAGE CORRECT ET PAS CORRECT.jpg
    90.5 KB · Affichages: 52

Bebere

XLDnaute Barbatruc
Re : Affichage inversé

j'ai le même résultat que affichage correct
j'ai fait plusieurs essais avec un nbre de joueurs différents affichage tjrs bon
à tout hasard,regarde si les label sont dans l'ordre
edit:ajout pièce jointe
 

Pièces jointes

  • TOURNOI PVA EN 5 MANCHES.zip
    622 KB · Affichages: 54
  • TOURNOI PVA EN 5 MANCHES.zip
    622 KB · Affichages: 52
  • TOURNOI PVA EN 5 MANCHES.zip
    622 KB · Affichages: 52
Dernière édition:

MARGAR

XLDnaute Junior
Re : Affichage inversé

Bonjour Bebere,

Avec le fichier que tu m'as envoyé, quand tu cliques sur :

Manche 1 : affichage OK
Manche 2 : affichage OK
Manche 3 : affichage OK

Manche 4 : affichage PAS OK, il manque la 3ème ligne : 1 Equipe de Triplette contre 1 Equipe de Doublette
Manche 5 : idem

Bonne journée

Margar
 

Bebere

XLDnaute Barbatruc
Re : Affichage inversé

oui Margar
elle m'avait échappé celle là
changé la 2ème condition

Code:
        For J = 4 To 12
            Set Rng = .Range("A" & J & ":C" & J): Set Rng1 = .Range("D" & J & ":F" & J)
            x = Application.CountA(Rng): x1 = Application.CountA(Rng1)
            If x = x1 Then
                For I = 1 To 6
                    Me("Label" & Indice).Caption = .Cells(J, I).Value
                    Indice = Indice + 1
                Next I
            ElseIf x < x1 Then
                For I = 4 To 6
                    Me("Label" & Indice).Caption = .Cells(J, I).Value
                    Indice = Indice + 1
                Next I
                For I = 1 To 3
                    Me("Label" & Indice).Caption = .Cells(J, I).Value
                    Indice = Indice + 1
                Next I
            End If
            Me("Label" & 96 + J) = .Range("I" & J)
            Me("TextBoxResult" & J - 3) = .Range("G" & J)
            Me("TextBoxResult" & J + 6) = .Range("H" & J)
        Next J

si tu regardes P1 à P5 c'est là que les triplettes/doublettes sont mal placées
 

MARGAR

XLDnaute Junior
Re : Affichage inversé

Maintenant lorsque je fais le tirage, j'ai comme erreur dans le code B64Tirage :

' Sortie du programme si le nombre d'inscrits ne permet pas un tournoi
If combinaison(NbJ)(3) + combinaison(NbJ)(2) = 0 Then: MsgBox "Compte tenu du nombre d'inscrits (" & NbJ & "), il n'y a pas de solutions": Exit Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 168
dernier inscrit
makari69