En ocasiones, para cambios automáticos en celda, no se reconoce dicho cambio en la celda puesto que el evento Worksheet_Change sólo detecta cambios manuales.
La verdad es que hay varias opciones para resolver esto:
1. Si el pegado se hace de manera automática mediante una macro lo único que tienes que hacer es pegar el código de la macro Worksheet_Change al final de la macro de pegado.
Para ello copia el código sin la condición IF al final de la macro de pegado. Es decir:
<pre class="prettyprint" style="width: 555px; height: 211px;">NoFilas = WorksheetFunction.Subtotal(3, Range("C2:C2000")) + 3
Range("C2:C" & NoFilas).Copy Range("D2")
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("D2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Hoja1").Sort
.SetRange Range("D2:D" & NoFilas)
.Header = xlNo .MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With</pre>
Para este mismo caso puedes crear una macro con este código y llamarlo desde la otra macro al final escribiendo:
Call Nombre_de_la_macro
donde Nombre_de_la_macro es el nombre que le has puesto, por ejemplo:
Sub Ordenar()
'el código...
End sub
En esta caso la llamada desde la macro de pegado sería:
Sub Pegado()
'Código de pegado desde bloc de notas
Call Ordenar
End Sub
2. Crear un botón para hacer creer al evento WorkSheet_Change que la introducción es manual. En el código de dicho botón lo único que tienes que hacer es hacer un copia_pega de la primera celda.
Para crear el botón vas a la pestaña Programador (en la parte superior) y seleccionas en Controles (subdivisión de Programador) la opción insertar. En la opción insertar le das a la opción Botón.
Desgraciadamente no conozco la forma de que ante un evento automático se detecte el cambio en la celda, llevo tiempo intentando saber cómo hacerlo pero no hay forma... XD
Esto es porque generalmente un evento automático está asociado a una macro por lo que tu código lo podrás ejecutar desde dicha macro (1a opción). Se supone que tiene que existir dicho evento pero por si algún motivo no lo detectas la segunda opción también es válida aunque cutre...
Si tienes alguna duda ya sabes...