1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
Sub Reciproque()
Dim Cellule As Range
Dim Tableau
Dim Dico As Object
Dim i As Integer
Dim Plage As Range
Dim CelluleArrivee As Range
Set Dico = CreateObject("scripting.dictionary")
Set Plage = Range("a1:a" & Range("a" & Rows.Count).End(xlUp).Row)
Set CelluleArrivee = Range("d1")
' Remplissage du dictionnaire
For Each Cellule In Plage
Tableau = Split(Cellule(1, 2).Value, ";")
For i = 0 To UBound(Tableau)
If Not Dico.exists(Tableau(i)) Then Dico.Add Tableau(i), Tableau(i)
Next i
Next Cellule
' Conversion du dictionnaire en tableau
Tableau = Dico.items
' Restitution des éléments du tableau
For i = 0 To UBound(Tableau)
CelluleArrivee.Value = Tableau(i) ' Remplissage avec Y
CelluleArrivee(1, 2).ClearContents ' vidange de la cellule de droite
For Each Cellule In Plage ' Itération sur la plage source
' Si Y présent dans la cellule de droite de la plage source, on ajoute le X
If InStr(1, Cellule(1, 2).Value, Tableau(i)) <> 0 Then _
CelluleArrivee(1, 2).Value = CelluleArrivee(1, 2).Value & ";" & Cellule.Value
Next Cellule
' Nettoyage du premier ;
CelluleArrivee(1, 2).Value = Right(CelluleArrivee(1, 2).Value, Len(CelluleArrivee(1, 2).Value) - 1)
' On descend d'une ligne pour le nouvel Y
Set CelluleArrivee = CelluleArrivee(2)
Next i
End Sub |
Partager