Du coup tu m'as fait faire un petit effort en VBA ! Petit car j'allais partir sur un plus grand mais je me suis ravisé pour revenir à une fonction qui s'appuie sur le numéro WBS précédent pour fournir le nouveau...
Function NUMWBSSUIV(préc, lgn As Range) As String
Dim i%, h, P
Application.Volatile
For i = 1 To lgn.Columns.Count
If lgn.Cells(1, i) <> "" Then Exit For
Next i
If préc = "" Then préc = "0"
If i <= lgn.Columns.Count Then
P = Split("." & préc, ".")
If i = UBound(P) + 1 Then
P(UBound(P)) = P(UBound(P)) & ".1"
ElseIf i <= UBound(P) Then
h = CInt(P(i)) + 1: P(i) = CStr(h)
If i < UBound(P) Then
For h = i + 1 To UBound(P)
P(h) = "@"
Next h
End If
End If
If i <= UBound(P) + 1 Then
P = Replace(Join(P, "."), ".", "", 1, 1)
P = Replace(P, ".@", "")
NUMWBSSUIV = P
Exit Function
End If
End If
NUMWBSSUIV = CVErr(xlErrNA)
End Function
Il lui faut deux arguments :
- la valeur précédente, donc on lui met la réf de la cellule de la ligne au-dessus (pour le premier où elle doit produire "1", il faut que la cellule "précédente" sur laquelle on la fait pointer soit vide)
- et en 2e argument la ligne qu'elle doit numéroter, sous forme de référence de plage.
L'essai est en colonne M.
Cordialement.