Voici le code commenté :
Option Explicit
Sub Trier()
Dim WsS As Worksheet, WsC As Worksheet
Dim Dico, C
Dim DerLig As Long, Ligne As Long
Dim Cel As Range
Dim Col As Integer
'désactivation de la mise à jour de l'écran
Application.ScreenUpdating = False
'Attribution de la référence de la Feuil1 à la variable WsS (Feuille source)
Set WsS = Worksheets("Feuil1")
'Attribution de la référence de la Feuil2 à la variable WsC (Feuille cible)
Set WsC = Worksheets("Feuil2")
'Création d'un dictionnaire (pour élaboration de la liste des comptes sans doublons)
Set Dico = CreateObject("Scripting.Dictionary")
'Détermination du numéro de la dernière ligne renseignée dans la colonne M (Comptes)
DerLig = WsS.Range("M" & Rows.Count).End(xlUp).Row
'Balayage des comptes
For Each Cel In WsS.Range("M2:M" & DerLig)
'Si le compte n'a pas été inclus au dictionnaire, on l'ajoute
If Not Dico.Exists(Cel.Value) Then Dico.Add Cel.Value, Cel.Value
Next Cel
'Balayage du dictionnaire
For Each C In Dico.keys
Ligne = 1
Col = Col + 1
'On note le numéro du compte en en-tête de colonne
WsC.Cells(Ligne, Col) = C
'Balayage des comptes
For Each Cel In WsS.Range("M2:M" & DerLig)
'Si Le numéro de compte correspond à celui du dictionnaire
If Cel.Value = C Then
'Si le code associé au compte n'a pas encore été noté dans la feuil2
If Application.CountIf(WsC.Columns(Col), Cel.Offset(, -6)) = 0 Then
Ligne = Ligne + 1
'On note le code associé au compte dans la feuil2
WsC.Cells(Ligne, Col) = Cel.Offset(, -6).Value
End If
End If
Next Cel
Next C
WsC.Activate
Set Dico = Nothing: Set WsS = Nothing: Set WsC = Nothing
End Sub
Dis-moi si tu as besoin d'autres éclaircissements.
A+