Private Sub Worksheet_Activate()
Dim P As Range, ncol%, t, d As Object, d1 As Object, i&, j%, x$, a, b, resu(), e, n As Byte, lig&, col%
Application.ScreenUpdating = False
Cells.ClearContents 'RAZ
Set P = Feuil1.[A1].CurrentRegion 'CodeName Feuil1
ncol = Application.Ceiling(P.Columns.Count, 2) 'sécurité (nombre pair)
t = P.Resize(, ncol)
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
'---liste des noms sans doublon et concaténation n° ligne et colonne---
For i = 2 To UBound(t)
d1.RemoveAll 'RAZ à chaque ligne
For j = 1 To ncol Step 2
x = t(i, j)
If x <> "" Then
d(x) = d(x) & "." & IIf(d1.exists(x), "", i & " ") & j + 1
d1(x) = ""
End If
Next j, i
If d.Count = 0 Then GoTo 1
'---tableau des résultats---
a = d.keys: b = d.items
ReDim resu(1 To d.Count + 1, 1 To 1 + ncol / 2)
For i = 0 To UBound(a)
resu(i + 2, 1) = a(i)
For Each e In Split(Mid(b(i), 2), ".")
n = InStr(e, " ")
If n Then lig = Left(e, n)
col = Mid(e, n + 1)
resu(i + 2, 1 + col / 2) = t(lig, col)
Next e, i
'---titres---
resu(1, 1) = "Nom"
For j = 2 To UBound(resu, 2)
resu(1, j) = t(1, 2 * j - 3)
Next
'---restitution---
[A1].Resize(UBound(resu), UBound(resu, 2)) = resu
1 Columns.AutoFit 'ajustement largeur
With Me.UsedRange: End With 'actualisation des barres de défilement
End Sub