est ici une autre option, cette fois en utilisant dictionnaires (ajoutez une référence à Microsoft Scripting Runtime, qui a aussi plusieurs autres objets extrêmement utiles - ne commencez pas à codage VBA sans)
Comme écrit, la sortie n'est pas triée - cela pourrait être un peu un showstopper. Quoi qu'il en soit, il y a quelques petites astuces ici:
Option Explicit
Public Sub OutputLists()
Dim list1, list2
Dim dict1 As Dictionary, dict2 As Dictionary
Dim ky
Dim cel As Range
Set dict1 = DictionaryFromArray(Array("a", "b", "c", "e"))
Set dict2 = DictionaryFromArray(Array("b", "e", "c", "d"))
Set cel = ActiveSheet.Range("A1")
For Each ky In dict1.Keys
PutRow cel, ky, True, dict2.Exists(ky)
If dict2.Exists(ky) Then
dict2.Remove ky
End If
Set cel = cel.Offset(1, 0)
Next
For Each ky In dict2
PutRow cel, ky, False, True
Set cel = cel.Offset(1, 0)
Next
End Sub
Private Sub PutRow(cel As Range, val As Variant, in1 As Boolean, in2 As Boolean)
Dim arr(1 To 2)
If in1 Then arr(1) = val
If in2 Then arr(2) = val
cel.Resize(1, 2) = arr
End Sub
Private Function DictionaryFromArray(arr) As Dictionary
Dim val
Set DictionaryFromArray = New Dictionary
For Each val In arr
DictionaryFromArray.Add val, Nothing
Next
End Function
-ce que les listes dans une feuille Excel? ou seront-ils lus à partir d'une autre source? –
Les données proviennent de deux feuilles de travail et j'écris la liste combinée à un tiers. –