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

Nouvelle version.

Bye !

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.

7tournoi.xlsm (36.89 Ko)

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

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.

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.

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

tu as une idée pour le For ?

Non, désolé

Et je voudrais rectifier car quand j'ai écrit :

Pour le reste, je pense que les explications de PépéMax, merci à lui, devraient te satisfaire…

Je voulais parler de Jean-Paul bien sûr ! Qu'il me pardonne !

Bye!

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

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 ?

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.

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

Bonjour

Voilà pour le TRIO

Bye !

Super sympa de ta part.

Un grand merci à toi

Bonjour

Et pour finir, le SQAD

Bye !

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

4tournoi-copie.xlsm (63.94 Ko)

Super !

Bye !

Rechercher des sujets similaires à "rechercher nom meme ligne donne"