Type ToExtract
NomP As String
trackDistance As Integer
End Type
Sub Macro1()
Dim liste() As ToExtract 'déclare un tableau de type "ToExtract"
Sheets("name").Cells.Clear 'efface la feuille destination
Sheets("Json_extrait").Activate 'on bascule sur la feuille Json_Extrait
Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row).Select 'selection de toute la zone de données
'on applique le filtre personnalisé
Selection.AutoFilter
Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, Criteria1:="=name", Operator:=xlOr, Criteria2:="=track_distances"
'compte le nombre de lignes
nb = (Selection.SpecialCells(xlVisible).Count) / 2 - 1
'dimensionne le tableau
ReDim liste(1 To nb)
i = 1
'pour chaque element filtré
For Each ele In Selection.Resize(, 1).SpecialCells(xlVisible)
If ele = "name" Then liste(i).NomP = ele.Offset(0, 1) 'si c'est le nom, on le récupère en colonne B
If ele = "track_distances" Then 'si le track distance, on récupère le NUMERO de ligne (l'accès à la ligne masquée en dessous est impossible)
liste(i).trackDistance = ele.Row
i = i + 1
End If
Next ele
'desactive le filtre, pour démasquer les lignes qui nous interressent: Track Distance
Selection.AutoFilter
'on bascule sur la feuille Name
Sheets("name").Activate
'pour chaque element du tableau (sans la première qui contient les intitulés "players" )
For i = 2 To nb
'on copie le nom
Sheets("name").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = liste(i).NomP
'si la ligne dessous le numéro enregistré contient un nombre (et pas track ou autre chose)
If IsNumeric(Sheets("Json_extrait").Range("A" & liste(i).trackDistance + 1)) Then
Sheets("name").Range("A" & Rows.Count).End(xlUp).Offset(0, 1) = Sheets("Json_extrait").Range("A" & liste(i).trackDistance + 1)
Sheets("name").Range("A" & Rows.Count).End(xlUp).Offset(0, 2) = Sheets("Json_extrait").Range("B" & liste(i).trackDistance + 1)
End If
Next i
End Sub