Option Explicit
Sub Presence_PABX()
' Déclaration des variables
Dim i As Long
Dim l As Long
Dim c As Variant
Dim d1 As Object, d2 As Object, d3 As Object, d4 As Object
' Définition des dictionnaires
Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Set d3 = CreateObject("scripting.dictionary")
Set d4 = CreateObject("scripting.dictionary")
' Définition de la dernière ligne
l = Cells.Find("*", , , , xlByRows, xlPrevious).Row
' On boucle les deux premiers tableaux
For i = 2 To l ' A partir de la deuxième ligne à la dernière
d1(Cells(i, 1).Value & ":" & Cells(i, 2).Value) = "" ' On ajoute la clé colA et colB ligne i dans le dico1 exemple: A:Alexandre
d2(Cells(i, 4).Value & ":" & Cells(i, 5).Value) = "" ' On ajoute la clé colD et colE ligne i dans le dico2
Next i
' On boucle toutes les clés du dico 1
For Each c In d1.Keys
If Not d2.exists(c) Then d3(c) = "" ' Si la clé n'existe pas dans les clés du dico 2 on l'ajoute au dico 3
Next c
' On boucle toutes les clés du dico 2
For Each c In d2.Keys
If Not d1.exists(c) Then d4(c) = "" ' Si la clé n'existe pas dans les clés du dico 1 on l'ajoute au dico 4
Next c
i = 2 ' On définit le numéro de ligne de départ
For Each c In d3.Keys ' On boucle toutes les clés du dico 3 (celles du dico 1 non présentes dans le dico 2)
Cells(i, 7).Resize(, 2) = Split(c, ":") ' On se place sur la colonne G ligne i + 1 colonne (resize), et on coupe la clé à chaque ":"
i = i + 1 ' On incrémente le numéro de ligne
Next c
i = 2 ' Pareil que ci-dessus sauf pour le dico 4 et colonne J
For Each c In d4.Keys
Cells(i, 10).Resize(, 2) = Split(c, ":")
i = i + 1
Next c
End Sub