XL 2019 Concours améliorer une macro pour attribuer des terrains

  • Initiateur de la discussion Initiateur de la discussion berru76
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

berru76

XLDnaute Occasionnel
Bonjour

J'ai un petit soucis a l'utilisation avec une macro Merci a son auteur "crocrocro"
Cet macro attribue un numéro de terrain
Mon soucis
Les macros "1/2/3/4" attribuent les terrains
Comme dans l'exemple les macros 2/3/4 si pas d'autre terrain libre l'équipe rejoue sur le même terrain
pourrait t'on faire une condition pour éviter cela
Merci de votre aide
 
je ne vois pas ces macros 1/2/3/4. Votre fichier, il faut l'utiliser de quelle manière ?
C'est quoi le but ?
Crocrocro est l'auteur, vous avez un lien vers le poste où il vous a donné ce fichier ?
Bonsoir
Eviter si possible que l'équipe qui viens de finir de jouer ne rejoue sur le même terrain
La macro 1 "bouton 1 dans l'exemple affiche les terrains du premier tour"
La macro bouton 2 3 4 (d'où le soucis attribue le dernier terrain libre)
donc terrain d'où viens jouer l'équipe
Le lien
Merci

Boutons dans l'exemple correspond a la macro "Sub AttribuerTerrainsTour(pNoTour As Integer)"
(AttribuerTerrainsTour(pNoTour As Integer)
Const PREMLIG = 4
Dim ColTour As Integer ' colonne F (pour 1er Tour)
Dim ColJoue As Integer ' colonne J (Match gagné ou perdu joueur 2 1er Tour)
Dim ColJoueSuiv As Integer ' colonne L (Match gagné ou perdu joueur 1 2ème Tour)
Dim ColTourSuiv As Integer ' colonne K (n° terrain 2ème Tour)
Dim I As Integer, j As Integer, k As Integer
Dim DerLig As Long, Derlig2 As Long
Dim TabTerrain()
Dim NoTerrain As String
Dim TabNo()
Dim alea
Dim Fin As Boolean, Trouve As Boolean

ColTour = 6 + 5 * (pNoTour - 2)
ColJoue = 10 + 5 * (pNoTour - 2)
ColJoueSuiv = 12 + 5 * (pNoTour - 2)
ColTourSuiv = 11 + 5 * (pNoTour - 2)

DerLig = ActiveSheet.Cells(Rows.Count, ColJoue).End(xlUp).Row
Derlig2 = ActiveSheet.Cells(Rows.Count, ColJoueSuiv).End(xlUp).Row
If DerLig <= PREMLIG Then
' aucun match du tour précédent joué
MsgBox "Aucun Match joué du tour précédent le " & pNoTour & "ème Tour"
Exit Sub
End If
ReDim TabTerrain(1 To DerLig - PREMLIG + 1)
For I = PREMLIG To DerLig
If Not IsEmpty(Cells(I, ColJoue)) Then
'match joué
NoTerrain = Cells(I, ColTour)
' on regarde si le terrain n'est pas déjà attribué pour le tour
Trouve = False
For k = PREMLIG To Derlig2
If ActiveSheet.Cells(k, ColTourSuiv) = NoTerrain Then
Trouve = True
Exit For
End If
Next k
If Not Trouve Then
j = j + 1
TabTerrain(j) = NoTerrain
End If
End If
Next I
If j = 0 Then
' terrains tous affectés
MsgBox "Aucun Terrain nouvellement attribué pour le" & pNoTour & "ème Tour"
Exit Sub
End If
ReDim Preserve TabTerrain(1 To j)

ReDim TabNo(1 To UBound(TabTerrain))
k = 0
For I = LBound(TabTerrain) To UBound(TabTerrain)
If Not IsEmpty(TabTerrain(I)) Then
Fin = False
While Not Fin
Randomize
alea = WorksheetFunction.RandBetween(1, UBound(TabTerrain))
Trouve = False
For j = 1 To k
If TabNo(j) = alea Then
Trouve = True
Exit For
End If
Next j
If Not Trouve Then
k = k + 1
TabNo(k) = alea
Fin = True
End If
Wend
End If
Next

'on affecte le tableau du tour
I = 0
For k = PREMLIG To Derlig2
'If ActiveSheet.Cells(k, ColTourSuiv) = "" And Cells(k, ColJoueSuiv) <> 0 And Cells(k, ColJoueSuiv).Offset(0, 2) <> 0 And UCase(Cells(k, ColJoueSuiv)) <> "X" And UCase(Cells(k, ColJoueSuiv).Offset(0, 2)) <> "X" Then
If ActiveSheet.Cells(k, ColTourSuiv) = "" And Cells(k, ColJoueSuiv) <> 0 And Cells(k, ColJoueSuiv).Offset(0, 2) <> 0 And IsNumeric(Cells(k, ColJoueSuiv)) And IsNumeric(Cells(k, ColJoueSuiv).Offset(0, 2)) Then
I = I + 1
ActiveSheet.Cells(k, ColTourSuiv) = TabTerrain(TabNo(I))
ActiveSheet.Cells(k, ColTourSuiv).Interior.Color = vbWhite ' Fond en cyan pour mise en évidence
End If
Next k
If I = 0 Then
MsgBox "Aucun Match connu pour le " & pNoTour & "ème Tour"
Else

End If
 

Pièces jointes

Dernière édition:
un essai avec seulement une feuille.
on ajoute les équipes dans le tableau "Tabel1" à gauche.
Puis on pousse la flèche "Tour1". La macro crée les matchs et les terrains.Un "BYE", c'est quand une équipe n'a pas d'adversaire. On ajoute "P" ou "G" dans la 3ième colonne et la 5ième colonne s'adapte.
Puis on pousse la flèche "Tour2" et on continue de la même façon.
PS. Cellule AK1 est maintenant "X" et pour cette raison, la macro dit déjà aléatoirement un "G" ou un "P" pour accélerer les tests
 

Pièces jointes

un essai avec seulement une feuille.
on ajoute les équipes dans le tableau "Tabel1" à gauche.
Puis on pousse la flèche "Tour1". La macro crée les matchs et les terrains.Un "BYE", c'est quand une équipe n'a pas d'adversaire. On ajoute "P" ou "G" dans la 3ième colonne et la 5ième colonne s'adapte.
Puis on pousse la flèche "Tour2" et on continue de la même façon.
PS. Cellule AK1 est maintenant "X" et pour cette raison, la macro dit déjà aléatoirement un "G" ou un "P" pour accélerer les tests
J'ai testé
Merci de votre aide
mais dans mon cas toutes les feuilles sont déjà faites avec les gains et tout ce qui touchent au concours
Placement des équipes afin qu'elle ne se rencontre qu' une fois
Le refaire complètement serait trop compliqué
je rentre les résultats au fur et a mesure
donc même si un tour n'est pas fini je peut rentrer les résultats des suivant
Dans l'exemple ci joint
Au deuxième tour il reste un résultat non marqué en M4 si je rentre G/P et lance la macro " bouton 3 " l équipe 57 rejoue sur le même terrain
Pourrait on rajouter une condition dans la macro existante
soit attendre un autre terrain libre si le même déjà joué
soit ajouter un terrain non joué
 

Pièces jointes

un essai, mais je ne comprends pas ceci :
donc même si un tour n'est pas fini je peut rentrer les résultats des suivant
Normallement, on ne sait pas encore leur terrain
😇
Bonsoir
je m'excuse des réponses tardives un peu surbooker au niveau club
dans le fichier original / la macro les terrains sont attribués si libre et par rapport au fait que l'équipe est un adversaire
Je viens de tester votre essai et cela semble fonctionnel et me plais bien je vais tester sur le fichier d'origine et je vous tiens au courant
Si c'est possible d'améliorer après que les terrains s'affiche avant ne me gène pas mais a l'écran extérieur risque de confusion
peut on masquer le numéro de terrain si pas couvert part un adversaire
Soit par la macro
soit par par MFC
Merci
 
Dernière édition:
Le match sans "adversaire" ( ces "X") n'a pas un terrain, cette cellule est vide et donc il n'a rien à cacher. 101 equipes = 50 terrains.
Si ce n'est pas cela que vous voulez dire, voulez-vous le montrer dans le fichier, parce que je le comprends pas.
PS. La macro vérifie les terrains pour les 4 tours, chaque équipe aura 4 terrains différents, donc par exemple le terrain du 4ième tour ne sera pas le même du premier tour.
PS2. Avec 101 équipes, c'est un problème qui est très facile à résoudre, pour 10 équipes, ce sera plus compliqué. Vous pouvez me donner cette feuille ?
 
Dernière édition:
Le match sans "adversaire" ( ces "X") n'a pas un terrain, cette cellule est vide et donc il n'a rien à cacher. 101 equipes = 50 terrains.
Si ce n'est pas cela que vous voulez dire, voulez-vous le montrer dans le fichier, parce que je le comprends pas.
PS. La macro vérifie les terrains pour les 4 tours, chaque équipe aura 4 terrains différents, donc par exemple le terrain du 4ième tour ne sera pas le même du premier tour.
PS2. Avec 101 équipes, c'est un problème qui est très facile à résoudre, pour 10 équipes, ce sera plus compliqué. Vous pouvez me donner cette feuille ?
Bonjour
Votre macro est très bien
je vous joint le fichier avec feuille 10
Je pensais si c'est possible de mettre une MFC sur les cellules terrains du genre
Dans l'exemple une formule en M4 (affiché T25)
si V4 ou X4 sont vides ou vu la formule un 0 / M4 écriture en couleur blanche afin de masquer temporairement le terrain tant que les deux adversaires ne sont pas attribués
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
1 K
C
Réponses
1
Affichages
2 K
Cekankonvaou
C
N
Réponses
11
Affichages
2 K
NathalieQSE
N
B
Réponses
4
Affichages
2 K
benoitoleron
B
Réponses
2
Affichages
822
S
Réponses
9
Affichages
2 K
F
Réponses
5
Affichages
3 K
fleet21
F
Retour