Sub spirale()
fin = Range("A65536").End(xlUp).Row
'on force pour les 3 premiers éléments
AdDépart = Range("B1")
Range(AdDépart).CurrentRegion.Clear
Range(AdDépart) = [A1].Value
from = AdDépart
Range(from).Select
Range(from).Offset(0, -1) = [A2]
from = Range(from).Offset(0, -1).Address
Range(from).Offset(-1, 0) = [A3]
from = Range(from).Offset(-1, 0).Address
'pour i de 3 jusqu'à fin
For i = 4 To fin
'dispo à gauche et non vide au dessus (=changement de direction)
verslagauche = Range(from).Offset(0, -1) = "" And Range(from).Offset(-1, 0) <> ""
'dispo à droite et non vide en dessous (=changement de direction)
versladroite = Range(from).Offset(0, 1) = "" And Range(from).Offset(1, 0) <> ""
'dispo en bas et non vide à gauche (=changement de direction)
verslebas = Range(from).Offset(1, 0) = "" And Range(from).Offset(0, -1) <> ""
'dispo en haut et non vide à droite(=changement de direction)
verslehaut = Range(from).Offset(-1, 0) = "" And Range(from).Offset(0, 1) <> ""
If versladroite Then
verslehaut = False
verslagauche = False
Range(from).Offset(0, 1) = Range("A" & i)
from = Range(from).Offset(0, 1).Address
ElseIf verslebas Then
verslehaut = False
versladroite = False
Range(from).Offset(1, 0) = Range("A" & i)
from = Range(from).Offset(1, 0).Address
'MsgBox "bas"
ElseIf verslagauche Then
Range(from).Offset(0, -1) = Range("A" & i)
from = Range(from).Offset(0, -1).Address
'MsgBox "gauche"
ElseIf verslehaut Then
Range(from).Offset(-1, 0) = Range("A" & i)
from = Range(from).Offset(-1, 0).Address
'MsgBox "haut"
End If
Next i
End Sub