Sauf erreur de ma part, je pense que vous m'avez parlé qu'il ne fallait pas supprimer de ligne sous peine de ne plus avoir la renumérotation mais j'ai effectuer un essai et celle-ci fonctionne toujours !
Non c'était juste une question que je vous avais posée en pensant à un souci mais là non, avec la suppression de ligne cela fonctionnera toujours
Si vous avez plus de 256 lignes avec xxx ( ce qui serait beaucoup tout de même...) , pensez à remplacer Byte par Integer dans les déclarations de variables byte
J'ai tout de même regardé pour le code pour le rendre plus court et éviter d'utiliser une boucle sur toutes les lignes. Le voici :
Sub renumerotation2()
Dim c As Range
Dim prem
Dim newnum As Byte, oldnum As Byte
With Feuil1
.Unprotect
With .Range("C5:C" & Range("C" & Rows.Count).End(xlUp).Row)
Set c = .Find("*X*", LookIn:=xlValues)
If Not c Is Nothing Then
prem = c.Address
Do
With Feuil1
.Range("C" & c.Row) = Replace(.Range("C" & c.Row), "-", "_")
On Error Resume Next
oldnum = Right(Range("C" & c.Row).Value, Len(Range("C" & c.Row).Value) - InStrRev(Range("C" & c.Row).Value, "_")) 'ancien numero
On Error GoTo 0
newnum = newnum + 1 'nouveau numero
If IsNumeric(oldnum) And oldnum <> 0 Then 'verifier si oldnum est numerique
.Range("C" & c.Row) = Replace(.Range("C" & c.Row).Value, oldnum, newnum)
Else: .Range("C" & c.Row) = .Range("C" & c.Row) & "-" & newnum
End If
oldnum = 0
End With
Set c = .FindNext(c)
Loop While Not c Is Nothing And prem <> c.Address
End If
End With
.Protect
End With
End Sub
Si un jour vous avez beaucoup de lignes dans votre tableau (je parle de centaines bien entendu), cela pourrait être intéressant et serait plus rapide. Mais avec le code actuel cela fonctionne aussi bien.