XL 2019 Saisie de Résultats avec UserForm

Caninge

XLDnaute Accro
Bonjour à tous,

une météo plutôt à rester à la maison derrière l'ordinateur.
Justement j'en profite pour regarder mon fichier de tournoi de scrabble.
Il y a 7 joueurs dans ce tournoi qui doivent rencontrer les 6 autres en 4 parties.
A chaque fois je dois chercher dans le tableau les rencontres et inscrire les résultats.
Pas trop facile d'autant plus que si le tournoi s'étoffe en joueurs la recherche peut devenir fastidieuse.
J'ai pensé que je pourrais saisir les résultats à partir d'un module USERFORM.
Je clique sur le bouton bleu pour appeler la boite de saisie.
Un coup arrivé sur cette boite je cherche les deux joueurs et je note les résultats.
J'ai créé un USERFORM dans la feuille des codes.
Par contre je m'arrête là parce que la suite je ne sais pas faire.

Mais vous oui !

Merci de se pencher sur mon projet.

CANINGE
 

Pièces jointes

  • Tournoi de Scrabble à 7 joueurs à Avermes.xlsm
    45.3 KB · Affichages: 9

Dan

XLDnaute Barbatruc
Bonjour,
En colonne Z le nombre de joueurs est de 7.
Peut-il y a avoir plus de 7 joueurs ou pas ?
Crdlt

Edit : après il faut savoir comment vous savez la ligne dans laquelle on ajoute les résultats notamment parce que je vois en colonne B et N que les joueurs jouent plusieurs fois ensemble.
on peut faire une recherche sur les valeurs des deux combo en cliquant sur un bouton sur l'usf
 
Dernière édition:

Caninge

XLDnaute Accro
Bonsoir Dan,
Pour ce tournoi il y a 7 Joueurs.
Dans le prochain il pourrait éventuellement y en avoir d'autres qui s'inscriront mais ça je ne le sais pas pour l'instant.
Les joueurs font 4 rencontres contre chacun des joueurs.
C'est dans les colonnes C et O que j'écris les résultats de chaque rencontre.
Voilà Dan
CANINGE
 

Dan

XLDnaute Barbatruc
Pour ce tournoi il y a 7 Joueurs.
Donc c'est la colonne Z qui va s'allonger ?
-----------------------------------------------
Faites déjà ceci
1. allez dans l'éditeur VBA puis insérer un Module
2. Collez ce code dans le module
VB:
Sub ouverture_usf()
UserForm1.Show
End Sub
3. Sur votre feuille "Participants", click droite sur le bouton
4. choisir "Associer à une macro" et sélectionnez le code ci-dessus
5. ensuite allez dans votre Userform et ajoutez ce code
Code:
Private Sub UserForm_Initialize()
Dim i As Byte

i = 4
While Range("Z" & i) <> vbNullString 'boucle depuis Z4 et tant que Zx n'est pas vide
    ComboBox1.AddItem Range("Z" & i).Value
    ComboBox2.AddItem Range("Z" & i).Value
    i = i + 1
Wend
End Sub
6. Toujours dans l'Usf, ajoutez ces deux codes qui vont servir à ce que vous ne choisissiez pas deux fois le même nom
Code:
Private Sub ComboBox1_Change()
If ComboBox1.Value = ComboBox2.Value Then
    MsgBox "Vous ne pouvez avoir deux joueurs identiques !", vbInformation, "Erreur choix joueur": ComboBox1 = vbNullString: Exit Sub
End If
End Sub

Private Sub ComboBox2_Change()
If ComboBox2.Value = ComboBox1.Value Then
    MsgBox "Vous ne pouvez avoir deux joueurs identiques !", vbInformation, "Erreur choix joueur": ComboBox2 = vbNullString: Exit Sub
End If
End Sub
7. Dessinez un bouton qui servira à confirmer les scores

Dites si ok lorsque vous cliquez sur le bouton bleu

EDIT : j'ai modifié le code Initialize puisque la liste peut s'agrandir en colonne Z
 
Dernière édition:

Caninge

XLDnaute Accro
J'ai l'impression que vous me donnez un cours de VBA. C'est bien. Ca apprend mais enfin l'anglais pour moi !!!!
Je me suis arrêté à Dessinez un Bouton je ne sais pas comment faire !
Une question : Est-ce que les résultats vont se mettre à leur place dans le tableau ensuite ?
Exemple Claudette en C7 et Michel O7
A +
 

Pièces jointes

  • Tournoi de Scrabble à 7 joueurs à Avermes (1).xlsm
    49.7 KB · Affichages: 1

Dan

XLDnaute Barbatruc
Je me suis arrêté à Dessinez un Bouton je ne sais pas comment faire !
Facile à faire.

- Allez dans l'éditeur VBA et cliquez sur l'userform
- Allez dans le menu Affichage et choisir "Boite à outils"
- passez votre souris sur les icones afin de trouver "Bouton de commande"
- Cliquez dessus et dessiner sur votre userform
Une fois dessiné, double clik sur le bouton et donnez moi le nom de la private sub. cela devrait être Command1_click.


Une question : Est-ce que les résultats vont se mettre à leur place dans le tableau ensuite ?
Oui bien entendu. Je vous donne les instructions progressivement

-------------------------
Remarques :
- Attention que j'ai modifié le code Initialize dans mon post précédent. Je vous l'ai signalé dans l'EDIT. Reprenez celui-là. Si vous voulez vous pouvez aussi garder aussi celui que je vois dans votre fichier mais le chargement des combo sera limité à Z10.
- Au dessus des codes supprimez Private Sub ComboBox3_Change() et le END SUB. il n'y a pas besoin de cela
- Au dessus de tous les codes (donc en première ligne) ajoutez aussi "Option explicit"
 
Dernière édition:

Dan

XLDnaute Barbatruc
Bonjour,

Ok mais le code initialize que je vous ai donné ici --> https://excel-downloads.com/threads/saisie-de-resultats-avec-userform.20080285/post-20621301 n'est pas dans le fichier

Mais vous n'avez pas de souci avec "option explicit". l'instruction est bien placée

Donc en premier remettez le code initialize et dites moi si les combo sont bien chargées à l'ouverture de l'usf
Après je vous donne le reste, donc ne me remettez pas votre fichier pour l'instant
 

Dan

XLDnaute Barbatruc
Ok là il y est. C'est bon
Voici la suite à placer dans l'userform

1. Juste en dessous de "Option explicit" ou au dessus, mettez cette instruction
Dim flag as boolean

---------------------------
Ensuite collez les codes ci-dessous dans l'userform

2. Code lié directement au bouton
VB:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Boolean

Call controle

If flag = True Then Exit Sub

For i = 5 To Range("B" & Rows.Count).End(xlUp).Row
    If Range("B" & i) = ComboBox1.Value And Range("N" & i) = ComboBox2.Value Then
        If Range("C" & i) = vbNullString And Range("O" & i) = vbNullString Then
            Range("C" & i) = TextBox1.Value
            Range("O" & i) = TextBox2.Value
            MsgBox "Socres ajoutés", vbInformation, "Scores rencontre": j = 1: Exit For
        End If
    End If
Next i
If j = 0 Then MsgBox "Rencontres déjà terminées. Pas de scores ajoutés", vbInformation, "Scores rencontre" '

Call effacer
End Sub


3. Code Controle. Ce code vérifie que vous avez bien rempli les 2 combobox et les 2 textbox.
Code:
Private Sub controle()
Dim c As Control

For Each c In Me.Controls
    If TypeName(c) <> "Label" Then
    Select Case TypeName(c)
        Case "TextBox"
            If c.Value = vbNullString Then MsgBox "veuillez compléter la rubrique " & c.Tag, , "Rubrique incomplète": flag = True: Exit Sub
        Case "ComboBox"
            If c.Value = vbNullString Then MsgBox "veuillez compléter la rubrique " & "Combobox " & c.Tag, , "Rubrique incomplète": flag = True: Exit Sub
    End Select
    End If
Next c
flag = False
End Sub

La valeur TAG concerne une info que vous pourriez rajouter dans la propriété de chaque objet en cliquant dessus puis en allant de la propriété TAG. en général j'y mets le nom du label mais dans votre cas vous n'avez pas mis de label dans votre USF

4. Code Effacer. Le code sert à vider les combobox et textbox lorsque les données ont été enregistrées
Code:
Private Sub effacer()
ComboBox1 = vbNullString
ComboBox2 = vbNullString
TextBox1 = vbNullString
TextBox2 = vbNullString
End Sub

Cela n'a pas beaucoup d'importance dans le fonctionnement mais pour suivre l'exécution je placerais les codes des pt 3 et 4 à la fin de l'Userform. ces deux codes sont appelés depuis les autres

Crdlt
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35