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 :
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.
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.