Comment afficher le contenu de la bonne cellule

Bonjour,

Dans le fichier joint j'ai 20 équipes qui se rencontrent dans un championnat dont j'ai listé les 6 premières journées.

Le but est d'afficher l'adversaire de l'équipe donnée à la journée donnée.

Dans l'exemple joint je cherche donc à trouver une formule qui permette d'afficher dans la cellule G2 l'adversaire de l'Italie à la journée 4 (c-à-d Brésil), ou en cellule G5 l'adversaire de l'Iran à la journée 5 (c-à-d Ukraine).

Bien entendu, le but est d'avoir une formule permettant d'afficher l'adversaire quelles que soient l'équipe et la journée désignées.

Merci par avance de votre aide précieuse !

evilwell

35exemple-teams.zip (8.50 Ko)

Bonjour,

formule matriciel, valider avec ctrl+maj+enter

=SI(ESTERREUR(EQUIV(F3&F2;A:A&B:B;0));INDEX(B:B;EQUIV(F3&F2;A:A&C:C;0));INDEX(C:C;EQUIV(F3&F2;A:A&B:B;0)))

Merci sabV ça marche très bien !!

Et est-ce qu'il y a aussi la possibilité de le faire sans formule matricielle ?

Et est-ce qu'il y a aussi la possibilité de le faire sans formule matricielle ?

une possibilité avec une fonction perso,

en cellule la formule =adversaire(F3;F2)

Function adversaire(joute As String, team As String)
Dim x1 As Long, x2 As Long
Dim c As Range, plg As Range
x1 = Application.Match(joute, Range("A:A"), 0)
x2 = Application.Match(joute, Range("A:A"), 1)
Set plg = Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = Cells(c.Row, 3)
  Case 3: adversaire = Cells(c.Row, 2)
  End Select
 End If
Next
End Function

bonjour

un essai sans "matricielle" tridactyle

26evilwell.xlsx (14.48 Ko)

cordialement

sabV a écrit :

Et est-ce qu'il y a aussi la possibilité de le faire sans formule matricielle ?

une possibilité avec une fonction perso,

en cellule la formule =adversaire(F3;F2)

Function adversaire(joute As String, team As String)
Dim x1 As Long, x2 As Long
Dim c As Range, plg As Range
x1 = Application.Match(joute, Range("A:A"), 0)
x2 = Application.Match(joute, Range("A:A"), 1)
Set plg = Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = Cells(c.Row, 3)
  Case 3: adversaire = Cells(c.Row, 2)
  End Select
 End If
Next
End Function

Très bonne solution aussi merci !

Et que faudrait-il ajouter à cette fonction si je veux l'utiliser sur une autre feuille que celle où sont définies les journées de championnat ?


tulipe_4 a écrit :

bonjour

un essai sans "matricielle" tridactyle

cordialement

oui ça fonctionne très bien également, merci beaucoup !!

Et que faudrait-il ajouter à cette fonction si je veux l'utiliser sur une autre feuille que celle où sont définies les journées de championnat ?

j'ai ajouté une variable pour sélectionner la feuille source, mais on pourrait aussi ajouter d'autre variable pour la sélection des colonnes

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long
Dim c As Range, plg As Range, sh
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joute, sh.Range("A:A"), 1)
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function
sabV a écrit :

Et que faudrait-il ajouter à cette fonction si je veux l'utiliser sur une autre feuille que celle où sont définies les journées de championnat ?

j'ai ajouté une variable pour sélectionner la feuille source, mais on pourrait aussi ajouter d'autre variable pour la sélection des colonnes

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long
Dim c As Range, plg As Range, sh
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joute, sh.Range("A:A"), 1)
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function

Bizarre, je n'arrive pas à la faire fonctionner....

Tu pourrais l'ajouter au fichier avec un exemple d'utilisation stp ?

Bonjour,

voici le fichier avec un exemple,

sabV a écrit :

Bonjour,

voici le fichier avec un exemple,

Merci ça marche très bien dans l'exemple, mais maintenant si je créé des journées au-delà de J10 ça ne marche plus correctement !!!!

Une idée ??

Bonjour,

pouvez-vous joindre un nouveau fichier ?

le voici !

Bonjour,

voici la correction,

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long, x As Integer
Dim c As Range, plg As Range, sh, n As Long
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
n = sh.Cells(Rows.Count, 1).End(xlUp).Row
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joute, sh.Range("A" & x1 & ":A" & n), 1) + x1
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function
sabV a écrit :

Bonjour,

voici la correction,

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long, x As Integer
Dim c As Range, plg As Range, sh, n As Long
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
n = sh.Cells(Rows.Count, 1).End(xlUp).Row
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joute, sh.Range("A" & x1 & ":A" & n), 1) + x1
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function

Merci mais cette fois ça semble ne plus fonctionner pour les journées avant J10

J'ai mis les 38 journées dans le fichier joint avec des tests, et ceux avant J10 ne donnent pas le bon résultat.

Bonjour,

voici la modification,

j'ai délimité la plage de recherche avec la variable joute et joutesuivante

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long, x As Integer
Dim c As Range, plg As Range, sh, n As Long, joutesuivante As String
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
n = sh.Cells(Rows.Count, 1).End(xlUp).Row
joutesuivante = "J" & CDbl(Right(joute, Len(joute) - 1) + 1)
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joutesuivante, sh.Range("A:A"), 0) - 2
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function
sabV a écrit :

Bonjour,

voici la modification,

j'ai délimité la plage de recherche avec la variable joute et joutesuivante

Function adversaire(joute As String, team As String, FeuilSource As String)
Dim x1 As Long, x2 As Long, x As Integer
Dim c As Range, plg As Range, sh, n As Long, joutesuivante As String
Set sh = Sheets(Left(FeuilSource, Len(FeuilSource) - 1))
n = sh.Cells(Rows.Count, 1).End(xlUp).Row
joutesuivante = "J" & CDbl(Right(joute, Len(joute) - 1) + 1)
x1 = Application.Match(joute, sh.Range("A:A"), 0)
x2 = Application.Match(joutesuivante, sh.Range("A:A"), 0) - 2
Set plg = sh.Range("B" & x1 & ":C" & x2)
For Each c In plg
 If c = team Then
  Select Case c.Column
  Case 2: adversaire = sh.Cells(c.Row, 3)
  Case 3: adversaire = sh.Cells(c.Row, 2)
  End Select
 End If
Next
End Function

Merci pour la mise à jour, maintenant il n'y a que pour la dernière journée que cela ne fonctionne pas.

Est-ce parce qu'il n'y a pas de 'joutesuivante' pour J38 ?

Donc je dois ajouter une "fausse" J39 pour que cela fonctionne, n'est-ce-pas ?

Rechercher des sujets similaires à "comment afficher contenu bonne"