Sub test()
'declaration variables correspondantes aux N° de colonnes
Dim colP As Integer
Dim colN As Integer
Dim colNat As Integer
Dim colAn As Integer
'declaration de la collection
'utilisée car elle n'accepte pas de doublons
Dim athletes As Collection
Set athletes = New Collection
'parcours de toutes les feuilles a l'exception de la feuille Athletes
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Athlètes" Then
'parcours de la premier ligne de la feuille pour definir
'le N° des colonnes
For x = 1 To Sheets(n).Range("IV1").End(xlToLeft).Column
If Sheets(n).Cells(1, x) = "Prénom" Then colP = x
If Sheets(n).Cells(1, x) = "Nom" Then colN = x
If Sheets(n).Cells(1, x) = "Code nationalité" Then colNat = x
If Sheets(n).Cells(1, x) = "Année course" Then colAn = x
Next x
'parcours de toutes les lignes de la feuille
'jusqu'a la derniere remplie en colonne A
For m = 2 To Sheets(n).Range("A65536").End(xlUp).Row
'mise en collection des contenus de cellules interessantes séparées par "_"
'les on error sont traditionnels pour remplir la collection sans doublon
On Error Resume Next
'nota (la fonction Trim supprime les espaces)
athletes.Add Sheets(n).Cells(m, colAn) & "_" & Trim(Sheets(n).Cells(m, colP)) & "_" & Trim(Sheets(n).Cells(m, colN)) & "_" & Trim(Sheets(n).Cells(m, colNat)), CStr(Trim(Sheets(n).Cells(m, colP)) & "_" & Trim(Sheets(n).Cells(m, colN)) & "_" & Trim(Sheets(n).Cells(m, colNat)))
On Error GoTo 0
'ligne suivante
Next m
End If
'feuille suivante
Next n
'exploitation de la collection
For n = 1 To athletes.Count
'creation d'un tableau en 'explosant' le contenu de la ligne de la collection
tableau = Split(athletes(n), "_")
'ecriture dans la feuille athlete
Sheets("Athlètes").Range("A" & n + 1) = tableau(0)
Sheets("Athlètes").Range("B" & n + 1) = tableau(1)
Sheets("Athlètes").Range("C" & n + 1) = tableau(2)
Sheets("Athlètes").Range("D" & n + 1) = tableau(3)
Next n
End Sub