XL 2019 Demande d'aide pour comprendre un code (manque de commentaires explicatifs)

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
Je viens vous demander un petit coup de main pour comprendre comment marche un code.
Il y a quelque temps j'ai posé une demande pour un code qui extrairait les différence entre deux colonnes sur deux feuilles différentes.
J'ai bien reçu une réponse qui fonctionne à merveille.
Et maintenant je voudrais comprendre comment cela fonctionne, car j'aurais très certainement à refaire le même genre de choses dans le futur, et j'aimerais bien apprendre plutôt que de demander à chaque fois.
Voici donc le code en question :
VB:
' Comparaison de deux colonnes sur deux feuilles différentes, et création d'une feuille de résultats

Sub comp_colA()
Dim a, e, n As Long, t As Long
With Sheets("post_cura") 'feuille en 1ere position
    a = .Range("a2", .Range("a" & Rows.Count).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For Each e In a
        If e <> "" Then .Item(e) = VBA.Array(e, Empty)
    Next
    With Sheets("reference") 'feuille en 2eme position
        a = .Range("a2", .Range("a" & Rows.Count).End(xlUp)).Value
    End With
    For Each e In a
        If e <> "" Then
            If Not .exists(e) Then
                .Item(e) = VBA.Array(Empty, e)
            Else
                .Item(e) = Empty
            End If
        End If
    Next
    ReDim a(1 To .Count + 1, 1 To 2)
    For Each e In .keys
        If Not IsEmpty(.Item(e)) Then
            If IsEmpty(.Item(e)(0)) Then
                n = n + 1
                a(n, 1) = .Item(e)(1)
            Else
                t = t + 1
                a(t, 2) = .Item(e)(0)
            End If
        Else
            .Remove e
        End If
    Next
    OutPut "Differences", .Count, a    'feuille de résultats
End With
End Sub

Private Sub OutPut(sn As String, n As Long, x)
With Sheets(sn).Range("a1").Resize(, 2)
    .CurrentRegion.ClearContents
    .Value = Array("Pas dans " & Sheets(1).Name, "Pas dans " & Sheets(2).Name)
    If n > 0 Then
        .Offset(1).Resize(n).Value = x
    Else
        MsgBox "No change"
    End If
    .CurrentRegion.Columns.AutoFit
End With
End Sub

Voilà donc mon problème.
D'avance je remercie celui, ou celle qui aura la gentillesse de m'aider.
Bonne soirée à toutes et tous.
 

Statistiques des forums

Discussions
313 279
Messages
2 096 780
Membres
106 748
dernier inscrit
Abdel93