Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…