Cambiar evento worksheet por la de un rango limitado

Quiero que al modificar una celda, no me lo tome de cualquier lugar en la hoja el cambio sino solo al cambiar en un "rango"(ej:"b5:b5000")(escribo un valor en una hoja y lo copia y pega en la otra a continuacion del ultimo anotado;esto ahora lo hace, salvo el cambio que solicito;gracias

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Selection.Copy _
Sheets("SEGUIMIENTO VENTAS").Range("b65536").End(xlUp).Offset(1, 0)
End Sub

2 Respuestas

Respuesta
1
$$\begin{align}& \end{align}$$

Creo que en lugar del evento SelectionChange, deberías hacerlo en el Evento Change, pero eso te lo dejo a vos que conocés el proceso mejor que cualquiera...

El cambio que podrías hacer es

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not (Intersect(Target, Range("B5:B5000")) Is Nothing) Then
  Selection.Copy _
    Sheets("SEGUIMIENTO VENTAS").Range("b65536").End(xlUp).Offset(1, 0)
End If
End Sub
'Aunque insisto que sería mejor
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("B5:B5000")) Is Nothing) Then
  Selection.Copy _
    Sheets("SEGUIMIENTO VENTAS").Range("b65536").End(xlUp).Offset(1, 0)
End If
End Sub

Nota:

1. Habría que ver que pasa cuando cambiar un rango, y parte está en la intersección y parte no (no se si eso es posible en tu caso)

2. Veo que usas Excel 95 (extensión .xls), si ya pasaste a la versión .xlsx, entonces el copy creo que sería mejor

Sheets("SEGUIMIENTO VENTAS"). Range("B1000000").End(xlUp).Offset(1, 0)

Salu2

jajaj, hola, me encanto lo de "conocés el proceso mejor que cualquiera..."mentira, soy uno más del monton;gracias por tu pronta respuest;ahora estoy yéndome al medico que tengo hora,más tarde vuelvo y reviso lo que mandaste y si me quedan dudas lo consulto de nuevo;gracias mil

gustavo:

Ante todo la extensión es xlsm (para macros)

La 1er opción no hace nada y la 2da (y 3era)dan error de compilación

Para mi lo ideal seria que luego de apretar enter, ejecute la accion;yo elijo un dato de una lista desplegable y bien puede ejecutarse ahí la acción o bien luego de apretar enter;si te sirve o hace falta te mandaría el archivo;decime

gustavo:ahi volvi a probar y con la 2da opcion anda pero medio raro ya que luego de elegir el dato debo volver y hacerle click con el mouse para que aparezca;si se puede lograr lo que puse antes seria lo ideal

Si el archivo es .xlsm (habilitado para macros), entonces tu archivo tiene un millon de filas, por lo que tranquilamente creo que podés hacer lo que te digo yo respecto a la modificación de la macro, revisá el siguiente cambio

Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("B5:B5000")) Is Nothing) Then
  Target.Copy _
    Sheets("SEGUIMIENTO VENTAS").Range("B1000000").End(xlUp).Offset(1, 0)
End If
End Sub

Salu2

Hola gustavo;ahora si anda solo que tuve un problema(y te pido 1000 disculpas) y tuve que cambiar algo(además me hace conflicto con otro evento que tenia que me coloca la fecha automáticamente, te resumo:

a)Quiero que al escribir "si" en una CELDA de la columna "p"(range p5:p5000) de la hoja "SEGUIMIENTO PRESUPUESTOS", se copie el dato de la columna "b" de esa fila a la otra hoja,"SEGUIMIENTO VENTAS"en columna "a" a continuación del ultimo dato pegado(desde a5:a5000)

b)Por otro lado(se que es otro tema, pero es para la misma planilla) necesitaría si en una lista desplegable de donde tomo los datos desde la base puede usar la función autocompletar ya que es muy larga la base( LA BASE DE DATOS ESTA EN OTRO LIBRO!, SINO SERIA MÁS FÁCIL)

x si hace falta, te paso el otro evento que use para el cambio de fecha con el cual me hace conflicto el tuyo

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B5:B1800")) Is Nothing Then Cells(Target.Row, "A") = Now

End Sub

Del punto 1, supongo que es modificar la macro actual y que lo que quieres es que en lugar de cuando cambie el rango B5:B5000, sea cuando en el rango P5:P5000 ponga "SI" que haga lo que hacía antes... si esto es así, entonces creo que podría servir el siguiente código

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub       'solo funciona cuando modifica 1 sola celda
If Not (Intersect(Target, Range("P5:P5000")) Is Nothing) Then
  If Target.Value = "si" Then
    Application.EnableEvents = False    'para que no interfiera con otros eventos
    Target.Offset(0, -14).Copy _
      Sheets("SEGUIMIENTO VENTAS").Range("A1000000").End(xlUp).Offset(1, 0)
    Application.EnableEvents = True     'dejo todo como estaba
  End If
End If
End Sub

Del 2° punto no llego a entender del todo la pregunta, igualmente te diría para no enredar las cosas que si el punto 1 está bien, entonces cierres este tema acá y abras otro con la segunda parte de la pregunta

Salu2

por un lado,ahora no hace nada;por otro lado,cuando pongo "si" en la columna p,quiero que me copie los datos de la celda "b"de esa fila en la otra hoja de datos 

2)ok con lo de la 2da consulta

Presioná la tecla F9 sobre la instrucción

Private Sub Worksheet_Change...

Eso hará que cambie de color para que puedas ejecutar la instrucción 'paso a paso' y ver lo que está haciendo. Luego ve al libro y sobre la columna P escribe "si", entonces vas a ver como se van ejecutando las instrucciones (mediante la tecla F8 vas avanzando a la siguiente instrucción)

Te digo todo esto porque yo lo puse en un archivo mío (aunque vacio) y me funcionó sin inconvenientes

Salu2

siiii, resulto que e tenia fórmulas en esa columna y en la fila 5000,algún dato,así que borre todo y ahí si lo hace perfecto;una cosa, si además quiero que aparte de copiarme el dato que esta en la columna "A" como lo hace ahora,además me copie el dato de esa hoja que esta en la columna "Q" y lo pegue en la columna "c" de la otra,¿así como ahora lo hace (serian 2 datos que copia en vez de uno solo)se complica mucho? No me di cuenta antes de decírtelo,discúlpame (copiaría de b y de que y lo pegaría en a y en c de seguimiento ventas)Igualmente desde ya mil gracias si esto se complica

Estoy asumiendo que la información está 'pareja' (lo que hará que la instrucción .End en ambos casos te lleve a la misma celda), si no es así revisalo

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub       'solo funciona cuando modifica 1 sola celda
If Not (Intersect(Target, Range("P5:P5000")) Is Nothing) Then
  If Target.Value = "si" Then
    Application.EnableEvents = False    'para que no interfiera con otros eventos
    Target.Offset(0, -14).Copy _
      Sheets("SEGUIMIENTO VENTAS").Range("A1000000").End(xlUp).Offset(1, 0)
    Target.Offset(0, 1).Copy _
      Sheets("SEGUIMIENTO VENTAS").Range("C1000000").End(xlUp).Offset(1, 0)
    Application.EnableEvents = True     'dejo todo como estaba
  End If
End If
End Sub

y cierro la pregunta, ya que esto se extendió mucho más de la cuenta...cualquier consulta adicional haz una nueva pregunta

Salu2

Respuesta
1

If target.column=2 and target.row >5

Visita http://programarexcel.com

La pregunta no admite más respuestas

Más respuestas relacionadas