Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [N:O], UsedRange) 'plage à adapter
If Target Is Nothing Then Exit Sub
Dim tablo, i&, v#
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
If FilterMode Then ShowAllData 'si la feuille est filtrée
For Each Target In Intersect(Target.EntireRow, [N:O]).Areas 'si entrées multiples (copier-coller)
tablo = Target 'matrice, plus rapide
For i = 1 To UBound(tablo)
If IsNumeric(CStr(tablo(i, 1))) Then
v = tablo(i, 1)
tablo(i, 1) = Format(v, IIf(v = Int(v), "0", "0.00")) & " hab/km²"
End If
If IsNumeric(CStr(tablo(i, 2))) Then
v = tablo(i, 2)
tablo(i, 2) = Format(v, IIf(v = Int(v), "0", "0.00")) & " km²"
End If
Next i
Target = tablo 'restitution
Next Target
Application.EnableEvents = True 'réactive les évènements
End Sub