Sub Bouton1_Cliquer()
'déclaration des variables : a de type variant (par défaut), i de type entier long, txt de type texte, dico comme objet
Dim a, i As Long, txt As String, dico As Object
'définit le dictionnaire dici
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
'définit le tableau a (l'ensemble des cellules non vides adjacentes à A1 du premier onglet du classeur
a = Sheets(1).Range("a1").CurrentRegion.Value
'boucle sur toutes les lignes i du tableau a (en partant de la seconde)
For i = 2 To UBound(a, 1)
'condition : si la donnée ligne i, colonne 3 de a est différente de 2018
If a(i, 3) <> 2018 Then
'définit la variable txt : la paire Mag/Réf
txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
'alimente le dictionnaire dico avec la variable txt (sans doublon)
dico(txt) = VBA.Array(a(i, 1), a(i, 2))
'fin de la condition
End If
'prochaine ligne de la boucle
Next
'boucle sur toutes les lignes i du tableau a (en partant de la seconde)
For i = 2 To UBound(a, 1)
'condition 1 : si la donnée ligne i, colonne 3 de a est égale à 2018
If a(i, 3) = 2018 Then
'définit la variable txt : la paire Mag/Réf
txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
'condition 2 : si la paire existe em 2018
If dico.exists(txt) Then
'suprime cette paire
dico.Remove txt
'fin de la condition 2
End If
'fin de la condition 2
End If
'prochaine ligne de la boucle
Next
'prend en compte l'ensemble des l'ensemble des cellules non vides adjacentes à A1 du second onglet du classeur en le redimensionnant aux deux premières colonnes uniquement
With Sheets(2).Range("a1").Resize(, 2)
'efface le contenu d'éventuelles anciennes données
.CurrentRegion.Clear
'si le dictionnaire dico (la liste des txt sans doublons) n'est pas vide
If dico.Count > 0 Then
'écrit "Magasin" en A1 et Article en B1
.Value = Array("Magasin", "Article")
'reprend en compte l'ensemble au dessus en se décalant d'une ligne vers le bas en redimensionnant d'autant de ligne que dico a d'éléments
With .Offset(1).Resize(dico.Count)
'renvoie dans ces cellules le tableau dico transposé
.Value = Application.Transpose(Application.Transpose(dico.items))
'fin de la seconde prise en compte
End With
'fin de la condition
End If
'fin de la première prise en compte
End With
'vide l'objet dico
Set dico = Nothing
End Sub