bonjour,
2 propositions une fonction personnalisée et une macro.
Function level(tabid)
' attribue un numéro hierarchique la cellule en fonction d'une table de niveaux qui contient la séquence des niveaux jusqu'à et y compris la cellule concernée.
' exemple pour mettre en colonne C : le numéro hiérarchique de la ligne 2, mettre en C2 la fonction = level($A$2:$A2) et tirer vers le bas
Dim tabn(1 To 10) 'max 10 niveaux hiérarchiques.
For Each ID In tabid
If tabn(ID) = "" Then
If ID = 1 Then
tabn(ID) = ".1"
Else
tabn(ID) = tabn(ID - 1) & ".1"
End If
Else
tabn(ID) = Left(tabn(ID), InStrRev(tabn(ID), ".")) & Mid(tabn(ID), InStrRev(tabn(ID), ".") + 1) + 1
For j = ID + 1 To 10
tabn(j) = ""
Next
End If
r = Mid(tabn(ID), 2)
Next ID
level = r
End Function
Sub numlevel()
'macro
' attribue un numéro hiérarchique sur base de niveaux en situés en colonne A à partir de la ligne 2
etape = "C2" ' à adapter colonne dans laquelle mettre la numérotation par niveau
dl = Cells(Rows.Count, 1).End(xlUp).Row
Dim tabr()
ReDim tabr(1 To dl, 1 To 1)
Dim tabn(1 To 10)
For i = 2 To dl
ID = Cells(i, 1)
If tabn(ID) = "" Then
If ID = 1 Then
tabn(ID) = ".1"
Else
tabn(ID) = tabn(ID - 1) & ".1"
End If
Else
tabn(ID) = Left(tabn(ID), InStrRev(tabn(ID), ".")) & Mid(tabn(ID), InStrRev(tabn(ID), ".") + 1) + 1
For j = ID + 1 To 10
tabn(j) = ""
Next
End If
tabr(i - 1, 1) = "'" & Mid(tabn(ID), 2)
Next i
Range(etape).Resize(dl - 1, 1) = tabr
End Sub