BOnjour,
Une autre piste par macro, hello Steelson , avec une feuille ajoutée nommée "Données triées" :
Sub Test()
Dim Fe As Worksheet
Dim Dico As Object
Dim Cle As Variant
Dim Plage As Range
Dim Cel As Range
Dim T As Variant
Dim Annee As Integer
Dim I As Integer
Dim J As Integer
Set Dico = CreateObject("Scripting.Dictionary")
'plage des dates
With Worksheets("SYB60_T25_Carbon Dioxide Emissi"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
'ajoute une feuille nommée "Données triées" si elle n'existe pas déjà
On Error Resume Next
Set Fe = Worksheets("Données triées")
If Fe Is Nothing Then Set Fe = Worksheets.Add
On Error GoTo 0
Fe.Name = "Données triées"
'récupère les dates uniques...
For Each Cel In Plage: Dico(Cel.Value) = "": Next Cel
'...et les inscrit en première ligne
For Each Cle In Dico.Keys: I = I + 1: Fe.Cells(1, I + 1).Value = Cle: Next Cle
Dico.RemoveAll
'plage des noms de pays
With Worksheets("SYB60_T25_Carbon Dioxide Emissi"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
'stocke dans le dictionnaire les noms des pays et couple l'année avec la valeur (séparé par un tiret bas) el les ensembles séparés par une virgule
For Each Cel In Plage: Dico(Cel.Value) = Dico(Cel.Value) & Cel.Offset(, 1).Value & "_" & Cel.Offset(, 2).Value & ",": Next Cel
I = 0
'défini la plage sur la ligne 1 pour la recherche des dates
With Fe: Set Plage = .Range(.Cells(1, 2), .Cells(1, .Columns.Count).End(xlToLeft)): End With
For Each Cle In Dico.Keys
'inscrit le nom du pays
I = I + 1: Fe.Cells(I + 1, 1).Value = Cle
'extrait les ensembles...
T = Split(Dico(Cle), ",")
'...et boucle
For J = 0 To UBound(T) - 1
'extrait l'année de l'ensemble
Annee = Split(T(J), "_")(0)
'la recherche dans la plage
Set Cel = Plage.Find(Annee, , xlValues, xlWhole)
'et si trouvée, inscrit la valeur
If Not Cel Is Nothing Then Fe.Cells(I + 1, Cel.Column).Value = Split(T(J), "_")(1)
Next J
Next Cle
End Sub