Pour gérer une compétition

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Je fais appel à vous pour finaliser une application qui doit permettre de gérer une compétition de tir à l'arc.

Vous trouverez dans le fichier ci-joint les explications des compléments qu'il me faudrait réussir à réaliser.

Je ne demande bien entendu pas que vous fassiez l'intégralité du travail pour moi, mais de me mettre sur la piste et de m'aider à rédiger les bons codes.

merci beaucoup
 

Pièces jointes

  • Arc1.xls
    147 KB · Affichages: 64
  • Arc1.xls
    147 KB · Affichages: 58
  • Arc1.xls
    147 KB · Affichages: 65

titiborregan5

XLDnaute Accro
Re : Pour gérer une compétition

Bonjour fb, le forum,

je pense que pour la quasi totalité de tes demandes le filtre avancé fait l'affaire!!!
Il va te permettre de créer tes groupes (une petite macro à la fin de toutes les saisies pour écrire le groupe sur la ligne de chaque archer) puis ensuite de te faire le classement par catégorie d'une façon très rapide!!! regarde comment marche le filtre élaboré dans un 1er temps puis pour l'adapter à la macro c'est taplagededonnées.advancedfilter et les critères dans le même ordre (même emplacement ou copie, zone de données, critères, zone de destination)...

Pour le binôme, qu'est ce qui est rempli dans la colonne binôme? le nom de l'autre binôme ou le nom du binôme (dans le sens binôme = groupe de 2 personnes)?? en gros si je suis A et que je suis en binôme avec B et que notre équipe s'appelle robin des bois, en colonne binôme pour ma ligne c'est B ou robin des bois? Robin des bois sera plus facile à retravailler...

Pour la fiche individuelle, tu récupèreras les données selon les différentes feuilles remplies...

Très bon lien d'aide sur le filtre élaboré : Les filtres avancs ou labors dans Excel

Bon courage
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

Bonjour titiborregan5,

Pour les binômes :
Le premier portera le nom de B1, le second B2 et ainsi de suite, je pourrais aussi utiliser Binôme 1, Binôme 2...

Pour les filtres élaborés, je sais les faire mais pas en vba.
De plus je ne vois pas comment reporter les données sur les feuilles adéquates et procéder aux différents calculs en vba.

Merci pour les remarques.
 

titiborregan5

XLDnaute Accro
Re : Pour gérer une compétition

re,
pour la moyenne et l'affectation dans les groupes 1 & 2 voici un code qui marche chez moi

Code:
Sub groupe()
With Sheets("Match 1")
.Range("g1") = "Groupe"
moyenne = Application.Average(Range("f1:f31"))
For i = 2 To 31
    If Cells(i, 6) >= moyenne Then
        Cells(i, 7) = "Groupe 1"
    Else
        Cells(i, 7) = "Groupe 2"
    End If

Next

.Rows(1).Copy Sheets("Groupe 1").Range("a1")
.Rows(1).Copy Sheets("Groupe 2").Range("a1")

Sheets("Groupe 1").Range("l1") = "Groupe"
Sheets("Groupe 1").Range("l2") = "Groupe 1"
Sheets("Groupe 2").Range("l1") = "Groupe"
Sheets("Groupe 2").Range("l2") = "Groupe 2"


.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, Sheets("Groupe 1").Range("l1:l2"), Sheets("Groupe 1").Range("a1:g1"), False
.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, Sheets("Groupe 2").Range("l1:l2"), Sheets("Groupe 2").Range("a1:g1"), False
End With

End Sub

et comme ça tu vois l'utilisation hyper facile du filtre élaboré en VBA (1 ligne!!!)
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

Merci cela fonctionne aussi chez moi mais je ne comprends pas tout.


Code:
moyenne = Application.Average(Range("f1:f31")) 'L'inconvénient c'est que j'ignore la taille de la plage tant que tous les résultats 'n'ont pas été saisis
...
.Rows(1).Copy Sheets("Groupe 1").Range("a1")
.Rows(1).Copy Sheets("Groupe 2").Range("a1") 'Je ne comprends pas la présence de cette ligne 2 fois

Sheets("Groupe 1").Range("l1") = "Groupe" 'Je ne comprends pas cette partie du code 
'il me semble que ça doit être l'intitulé de colonne mais je ne comprends pas l'emploi de l1, l2
Sheets("Groupe 1").Range("l2") = "Groupe 1"
Sheets("Groupe 2").Range("l1") = "Groupe"
Sheets("Groupe 2").Range("l2") = "Groupe 2"
 

titiborregan5

XLDnaute Accro
Re : Pour gérer une compétition

1/ Quand vas-tu faire tes groupes? quand tu auras saisi tous tes résultats j'imagine? du coup au lieu du 31 tu mets un
Code:
.range("a1").end(xldown).row

2/ on copie sur chaque feuille (groupe 1 et groupe 2) les intitulés de colonnes qu'on souhaite (je les ai tous mis mais tu peux changer) d'où les 2 lignes!

3/ j'écris en L1 de chaque feuille (groupe 1 & groupe 2) la colonne de mon critère (ici Groupe) et la valeur du critère choisi (groupe 1 sur feuille groupe 1 et groupe 2 sur feuille groupe 2)...

Du coup, tu pourras répéter les étapes 2&3 pour les catégories d'age en changeant les valeurs présentes en L1 par la colonne de critère (age) et la valeur (<8, < 11 etc...)

J'espère avoir répondu à tes questions?
 

titiborregan5

XLDnaute Accro
Re : Pour gérer une compétition

essaie avec
Code:
moyenne = Application.Average(Range(Range("a2"), Range("a1").End(xlDown)))
il ne faut pas que tu prennes le titre dans ta moyenne sinon ça bug et il ne te faut pas le row car il te renvoie le numéro de la ligne (utile pour une variable)...
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

Je crois voir d'où vient le problème

J'ai créé un bouton sur un onglet Feuil1 (sur lequel je souhaite placer tous les boutons qui exécuterons les différentes macro).

Et en l'exécutant ainsi j'ai une erreur alors que si je l'exécute depuis la feuille match1 je n'ai pas de problème.

Une idée pour rendre le code opérationnel sur le bouton ?

Voici le code actuel :
Code:
Private Sub CommandButton2_Click()
marep = MsgBox("Les groupes ne sont à créer que si tous les résultats du match 1 pour tous les archers sont saisis. Confirmez vous la création des 2 groupes ?", vbYesNo)
If marep = vbYes Then
Call groupe
Else
Exit Sub
End If
End Sub
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

Le voilà :

Code:
Sub groupe()
With Sheets("Match 1")
.Range("g1") = "Groupe"
moyenne = Application.Average(Range(Range("a2"), Range("a1").End(xlDown)))
MsgBox moyenne
For i = 2 To 31
    If Cells(i, 6) >= moyenne Then
        Cells(i, 7) = "Groupe 1"
    Else
        Cells(i, 7) = "Groupe 2"
    End If

Next

.Rows(1).Copy Sheets("Groupe 1").Range("a1")
.Rows(1).Copy Sheets("Groupe 2").Range("a1")

Sheets("Groupe 1").Range("l1") = "Groupe"
Sheets("Groupe 1").Range("l2") = "Groupe 1"
Sheets("Groupe 2").Range("l1") = "Groupe"
Sheets("Groupe 2").Range("l2") = "Groupe 2"

.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, Sheets("Groupe 1").Range("l1:l2"), Sheets("Groupe 1").Range("a1:g1"), False
.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, Sheets("Groupe 2").Range("l1:l2"), Sheets("Groupe 2").Range("a1:g1"), False
End With

End Sub
 

titiborregan5

XLDnaute Accro
Re : Pour gérer une compétition

Essaie en remplaçant
Code:
moyenne = Application.Average(Range(Range("a2"), Range("a1").End(xlDown)))
par
Code:
moyenne = Application.Average(Range(.Range("a2"), .Range("a1").End(xlDown)))

Enfin si le problème vient bien de la moyenne? Ton msgbox moyenne fonctionne? te renvoie la bonne valeur?
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

Avec la ligne modifiée,

Le calcul de la moyenne s'exécute correctement.

Par contre, les feuilles Groupe 1 et Groupe 2 ne sont pas alimentées.

Et par contre, sur la feuille (Feuil1) depuis laquelle j'appelle l'exécution, le texte "Groupe 2" est recopiée dans la colonne G de la ligne 2 à la ligne 31 (ça je suppose que c'est liée à la ligne de code :
Code:
For i = 2 To 31
qu'il faudrait corriger pour que le i prenne la valeur de la ligne 2 au nombre total d'individus dans les 2 groupes
 

fb62840

XLDnaute Impliqué
Re : Pour gérer une compétition

J'ai trouvé un début de solution

Dans le code du bouton qui appelle l'exécution j'ai ajouté l'activation de la feuille Match1

Il me reste le problème des lignes qui ne doivent pas être de 1 à 31 mais pour tous les membres des 2 groupes.

Voici le code sur le bouton :
Code:
Private Sub CommandButton2_Click()
marep = MsgBox("Les groupes ne sont à créer que si tous les résultats du match 1 pour tous les archers sont saisis. Confirmez vous la création des 2 groupes ?", vbYesNo)

If marep = vbYes Then
Sheets("Match 1").Activate
Call groupe
Else
Exit Sub
End If

End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 022
Messages
2 104 732
Membres
109 116
dernier inscrit
RALAIZANAKA