Private Sub Worksheet_Change(ByVal Target As Range)
Dim ul As Integer 'déclaração da variável ul (Última Lihna)
Dim A As Integer 'déclaração da variável A (incrementação)
Dim dest As Range 'déclaração da variável dest (célula de DESTinação)
If Target.Address <> "$E$5" Or Selection.Count > 1 Then Exit Sub 'si a modificação é feita en outro lugar que a célula E5 ou si a seleção têm mais de uma célula, sai da macro
Set dest = IIf(Range("B8") = "", Range("B8"), Cells(Application.Rows.Count, 2).End(xlUp).Offset(1, 0)) 'definição da célula de destinação
For x = 0 To 3 'laço (não sei a palavra en português "boucle") de 0 a 3
dest.Offset(0, x).Value = Range("B5").Offset(0, x).Value 'récupera os dados da linha 5
Next x 'proxima célula do laço
Range("B5:E5").Clear 'limpa a faxa B5:E5
'sortea
Range("B8").CurrentRegion.Sort Key1:=Range("B8"), Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B5").Select 'séleciona B5
'renumerar a coluna A
ul = Cells(Application.Rows.Count, 2).End(xlUp).Row - 6
For A = 1 To ul
Cells(A + 7, 1).Value = A
Next A
End Sub