Rechercher un nom sur la même ligne qu'un nom donné
Bonjour,
Je vous prie de bien vouloir m'excuser pour mon titre pas très explicite mais je ne savais pas comment dire
Je cherche à faire un Classeur pour organiser de tournois e-sport le plus vite possible.
Je cherche à savoir s'il existe un moyen pour que dans ma feuille "Résultat DUO 12-05-2020", je remplisse le nom d'un joueur "joueur_chercheur" soit dans joueur 1 ou joueur 2 (on prévoit les bêtises) et qu'automatiquement ça me remplisse l'autre nom du joueur qui est à coté du nom du "joueur_chercheur" dans la feuille "Tournoi DUO 12-05-2020".
Par exemple si j’inscris Max en D3 en B3 doit apparaitre Bart. Mais attention en D3 il peut y avoir aussi Bart ou Redboy par exemple.
A savoir il n'y a que 4 duos mais je peux monter à 50 duos par exemple. Et comme vous pourrez le voir sur mon fichier je peux avoir des Trio et des Squad (4 joueurs)
PS: Mes feuilles sont générées par des macros et un UserForm que je n'ai pas inclut dans mon exemple.
Merci à vous tous d'avance
Bonjour et bienvenue sur le forum
Un essai à tester.
Il ne concerne que la partie DUO. Pour le reste, il faut compléter en s'en inspirant.
Cela te convient-il ?
Bye !
Merci à toi gmb je viens de découvrir le système d'événement avec ton exemple, déjà un grand merci.
Alors si je peux titiller la chose, dans la feuille "résultat...", je dois pouvoir dans joueur 1 mettre soit Max ou Bart par exmple et que dans joueur 2 ça me mette l'équivalent.
Si c'est trop complexe à faire ne t’embête pas c'est déjà très bien comme ça.
Encore merci à toi et à ce forum
C'est super bien, merci beaucoup.
Je voudrais juste que tu m'expliques un peu le code car c'est un peu compliqué pour moi de comprendre
Je comprends pas comment tu définis le tableau des joueurs car dans mon exemple tu as 5 Duo mais je peux aussi en avoir 50 ou 23.
Et par rapport à ça est-il possible de récupérer ma variable de mon UserForm pour lui indiquer le nombre de Groupe ou est ce que c'est plus simple de compter le nombre de ligne non vide dans la colonne B ?
J'ai aussi un soucis pour comprendre ça (pourquoi un step de 6, ...)
Set plage = Range("B3")
For j = 2 To 14 Step 6
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
Et si tu m'expliquer aussi le fonctionnement et à quoi les fonctions servent dans ça :
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
Désolé de te poser toutes ses questions mais je suis un tout jeune développeur en BTS donc j'aime comprendre les programmes et pas faire du copier/coller bêtement.
Un grand merci à toi
Salut le fil....
Set plage = Range("B3")
' je présume que tes données sont dans les colonnes 2;8; et 14
' donc 2 + 6 = 8 + 6 = 14
For j = 2 To 14 Step 6
' là on fait l'union de plusieurs plages
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
'Intersect = intersection de deux plages..
'si l 'intersection de Target et Plage n'est pas égale à rien et qu Target contient une valeur on fait:
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
'On défini cell on aurais pu dire Set cell = range("A1") par exemple
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
'Si cell n'est pas égale à rien
If Not cell Is Nothing Then
'La cellule qui se trouve sur la même ligne (0,) et 2 colonne à droitre (,2) sera égale à la cellule même ligne et une colonne après
Target.Offset(0, 2) = cell.Offset(0, 1)
'si cell est égale à rien alors :
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
'on sort de la condition
GoTo fin
End If
Je comprends pas comment tu définis le tableau des joueurs car dans mon exemple tu as 5 Duo mais je peux aussi en avoir 50 ou 23.
Cette instruction définit le numéro de la dernière ligne de ton tableau :
derln = Range("A" & Rows.Count).End(xlUp).Row
Quant aux instructions qui suivent, elles définissent les plages, de la ligne 3 à la iigne derln) dans lesquelles si tu saisies un nom et que tu valides, la recherche du deuxième (ou premier) joueur se déclenche.
est-il possible de récupérer ma variable de mon UserForm pour lui indiquer le nombre de Groupe
Je ne comprends pas : je ne vois pas où est cet UserForm ni à quoi il pourrait servir pour ce qui nous préoccupe ici. De plus, je ne sais pas non plus ce que tu appelles « Groupe »
Pour le reste, je pense que les explications de PépéMax, merci à lui, devraient te satisfaire…
Bye !
GMB tu vas mieux comprendre de quoi je parlai ...
Et je viens de ré-essayer sur ton fichier d'ajouter deux duo mais la macro sort en erreur car il ne voit pas mes deux nouvelles lignes.
Merci JP pour tes réponses.
Modification :
Je suis entrain d'ajouter ton code VBA à mon fichier excel, le problème comme tu pourras le voir je crée mes feuilles à partir de l'UserForm et que le nombre de parties est une variable, du coup comment je peux faire pour que ton for le sache ?
'Trio
For j = 2 To 14 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
Si tu ajoutes 2 nouvelles lignes dans la feuille Tounoi DUO, il te faut aussi ajouter 2 nouvelles cellules dans les colonnes A, G et M de la feuille Résultat DUO pour que ça marche.je viens de ré-essayer sur ton fichier d'ajouter deux duo mais la macro sort en erreur car il ne voit pas mes deux nouvelles lignes.
Bye !
Effectivement ça fonctionne maintenant tu as une idée pour le For ?
Je vais essayer quelques choses et je verrais ce que tu me propose
Ok pas de soucis je pense utiliser Application.WorksheetFunction.CountIf(Range("A:H"), "=Game*").
Et pourquoi ton code tu ne l'as pas mis dans un Module, c'est pour une bonne raison où il y a pas d'importance ?
Ah oui et je galère pour faire le TRIO et SQUAD, j'ai fait ça tu pourrais me donner le code pour le joueur 3 dans TRIO s'il te plaît car y a de la fumée qui sort de mes oreilles
Option Explicit
Dim fb As Worksheet, plage As Range, cell As Range
Dim j&, dte$, derln&
Dim nb_game As Integer
Dim ToFor As Integer
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
dte = Right(Sh.Name, 11)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
nb_game = Application.WorksheetFunction.CountIf(Range("A1:R1"), "=Game*") - 1
Debug.Print nb_game
'DUO
If Mid(Sh.Name, 10, 3) = "DUO" Then
Set fb = Sheets("Tournoi DUO" & dte)
derln = Range("A" & Rows.Count).End(xlUp).Row
'Joueur 1 est saisi
Set plage = Range("B3")
For j = 2 To nb_game * 6 + 2 Step 6
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 2 est saisi
Set plage = Range("D3")
For j = 4 To nb_game * 6 + 4 Step 6
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, -1)
Else
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, 1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'TRIO
ElseIf Mid(Sh.Name, 10, 4) = "TRIO" Then
Set fb = Sheets("Tournoi TRIO" & dte)
'faire un copier-coller de la partie DUO et l'adapter
derln = Range("A" & Rows.Count).End(xlUp).Row
'Joueur 1 est saisi
Set plage = Range("B3")
For j = 2 To nb_game * 8 + 2 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 2 est saisi
Set plage = Range("D3")
For j = 4 To nb_game * 8 + 4 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, -1)
Else
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, 1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 3 est saisi
Set plage = Range("F3")
For j = 6 To nb_game * 8 + 2 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'SQAD
ElseIf Mid(Sh.Name, 10, 5) = "SQUAD" Then
Set fb = Sheets("Tournoi SQUAD" & dte)
derln = Range("A" & Rows.Count).End(xlUp).Row
'Joueur 1 est saisi
Set plage = Range("B3")
For j = 2 To nb_game * 10 + 2 Step 10
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 2 est saisi
Set plage = Range("D3")
For j = 4 To nb_game * 10 + 4 Step 10
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, -1)
Else
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, 1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 3 est saisi
Set plage = Range("F3")
For j = 6 To nb_game * 10 + 2 Step 10
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 4 est saisi
Set plage = Range("H3")
For j = 8 To nb_game * 10 + 2 Step 10
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
End If
fin:
Application.EnableEvents = True
End Sub
Sub Evenement()
Application.EnableEvents = True
End Sub
Bonjour
Je l'ai mis dans la feuille VBA attachée au classeur pour qu'elle soit événementielle. Elle se déclenche dès qu'on valide une cellule.pourquoi ton code tu ne l'as pas mis dans un Module, c'est pour une bonne raison où il y a pas d'importance ?
Elle commence alors par repérer la feuille active puis si la cellule validée est dans une plage de nom à saisir et fait son travail.
A noter que pour bien faire ce travail, il faut, entre autres que les feuilles Tournoi et Résultat soient correctement renseignées et se correspondent 2 à 2 avec même nombre de lignes et de colonnes dûment renseignées.
Bye !
Ok je comprends mieux par contre je n'arrive pas à finir le code pour renseigner le 3ème joueur, je ne comprends pas
J'ai fais quelques choses mais je n'ose pas car je ne comprends pas trop :
'TRIO
ElseIf Mid(Sh.Name, 10, 4) = "TRIO" Then
Set fb = Sheets("Tournoi TRIO" & dte)
'faire un copier-coller de la partie DUO et l'adapter
derln = Range("A" & Rows.Count).End(xlUp).Row
'Joueur 1 est saisi
Set plage = Range("B3")
For j = 2 To nb_game * 8 + 2 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 2 est saisi
Set plage = Range("D3")
For j = 4 To nb_game * 8 + 4 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, -1)
Else
Set cell = fb.Range(fb.Cells(3, 3), fb.Cells(derln, 3)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, -2) = cell.Offset(0, 1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
'Joueur 3 est saisi
Set plage = Range("F3")
For j = 6 To nb_game * 8 + 2 Step 8
Set plage = Union(plage, Range(Cells(3, j), Cells(derln, j)))
Next j
If Not Intersect(Target, plage) Is Nothing And Target.Value <> "" Then
Set cell = fb.Range(fb.Cells(3, 5), fb.Cells(derln, 5)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, 1)
Else
Set cell = fb.Range(fb.Cells(3, 4), fb.Cells(derln, 4)).Find(Target.Value, lookat:=xlWhole)
If Not cell Is Nothing Then
Target.Offset(0, 2) = cell.Offset(0, -1)
Else
MsgBox Target.Value & " ne figure paa sur la liste des joueurs.", 16
End If
End If
GoTo fin
End If
Le problème ici c'est qu'il ne me renseigne pas le troisième joueur.
Et j'allais oublié ci par exemple en Trio il y a une équipe qui n'as que deux joueurs est-ce que ça va renvoyer une erreur ?
Merci
Salut GMB je te fais un retour par rapport à ton programme.
Ce matin j'ai eu cours avec un prof qui nous a apprit le VBA, je lui ai demandé de l'aide pour compléter ton programme.
Malheureusement nous n'y sommes pas arrivés. pourrais-tu me montrer le code pour le Trio pour que je comprennes comment ça marche et normalement je pourrais faire le SQUAD sans problème.
Merci à toi
Super sympa de ta part.
Un grand merci à toi
Merci à toi mais j'ai réussi à comprendre.
Regarde ce que j'ai fait et dis moi ce que tu en penses, j'ai fait en sorte que l'événement se répète en fonction du nombre de games