Macro para posicionar en una celda.

Resuelto
BPAUD Mensajes publicados 79 Estado Miembro -  
michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   -
Hola,
No soy un experto, ni en VB ni en Excel.
Sin embargo, me parece que lo que busco no debería ser demasiado "difícil":
Por un lado tengo una hoja de datos, y por el otro una hoja más funcional.
Puedo (BuscarV) traer cualquier valor de la fila cuyo campo de encabezado satisfaga una condición, pero no logro hacer que el 'cursor' se posicione en la citada celda.
Quiero poder, a través de una macro simple, posicionar (Range.Select o algo así) el puntero en la celda de la hoja de datos para poder realizar modificaciones en la fila...
Gracias por su ayuda... me quedan apenas unas horas para resolver este problema y continuar...
Configuración: Windows XP Internet Explorer 6.0

13 respuestas

michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
 
¿Podrías ser más claro?
1
BPAUD Mensajes publicados 79 Estado Miembro
 
Hola y gracias por tu contacto.
Intentaré ser claro, pero resulta que solo he dormido dos horas, así que...
Digamos que tengo una hoja que llamaremos BdD en la que figuran unos registros.
En otra hoja, tengo una pantalla de consulta y entrada de nuevos registros.
Funciona: creo, consulto, recupero para consulta todos los datos de detalle, etc.
DONDE SE COMPLICA es si quiero MODIFICAR o completar un registro...
Si aplico mi procedimiento de registro, creo un NUEVO registro y por tanto un duplicado....

Me decía a mí mismo "Fácil", conozco los elementos clave del registro a modificar... una BúsquedaV que me devuelva el 'contenido' de la línea, debe haber una forma de señalarme en el campo de encabezado de la línea en la Base... y luego pegar el contenido de la pantalla de entrada (para hacerlo simple) con los datos modificados...
Pero aquí estoy, no encuentro cómo hacerlo.

Gracias por tu interés y tu ayuda... Me comprometí a preparar algo para mi hija que viene de paso este fin de semana... y se va a ir "sin que yo..." no es muy cómodo.
B.
0
Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
 
Hola,

si tu celda es fija
este código selecciona la celda B13

Range("B13").select

si quieres sujetarla a una condición
este código controla B13; si contiene toto, selecciona F13. También puedes escribir diferente <> "toto"

if Range("B13") = "toto" then
Range("F13").select
end if

A+
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Hola y gracias por tu interés.
Mi problema es el siguiente:
Estoy en una hoja que llamaremos "F1"
En esta hoja quiero copiar un (o varios) valores y llevarlos a otra hoja llamada F2 en un lugar particular cuya referencia tengo en una celda conocida de F1.
Es decir, en F1
Celda A: Contenido a copiar
Celda B: Dirección de F2 a la que quiero "apuntarme"

La "macro buscada" (o un equivalente en función de Excel) se apunta a la celda X (referencia que figura en F1-Celda B) y pega (Valor) el contenido de F1 celda A...
¿He sido claro...? No estoy seguro... no he dormido mucho.
Gracias de todas formas y hasta luego.
B
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Mike :
No estoy seguro de haber entendido:

Rango("B13").seleccionar
efectivamente se posiciona en B13
Pero no sé cómo escribir directamente en mi macro la referencia B13.
La referencia a la que quiero apuntar está en otra celda de la hoja
Además, la referencia se encuentra en una hoja diferente de aquella en la que quiero apuntar.
0
michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
 
Re, hola Mike,

Veo más o menos lo que quieres hacer: si la referencia clave existe modificas algunos campos, ¿sino es un nuevo registro?
Si eso es lo que buscas, en ambos casos se trata de una búsqueda de fila...
Bueno, lo mejor es que pongas un extracto de tu libro en el archivo adjunto sin datos confidenciales
para ello
www.cjoint.com

eventualmente, lo comprimes con .zip (no .rar)
0
BPAUD Mensajes publicados 79 Estado Miembro
 
¿Recibió o no finalmente mi envío de archivo de ejemplo?
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola,

aquí tienes un ejemplo para guiarte:
http://www.cijoint.fr/cjlink.php?file=cj200805/cijplB6uv2.xls

eric
0
BPAUD Mensajes publicados 79 Estado Miembro
 
http://www.cijoint.fr/cjlink.php?file=cj200805/cijrP51M55.xls
Sigo intentando...
Pero su silencio me inquieta...
Debo haber cometido algunos errores... bien involuntarios, se lo aseguro, que debieron irritarles a los tres.
En cualquier caso, y aunque he abusado de su paciencia, gracias...
Intentaré volver a este foro un día en el que tenga menos estrés y presión de urgencia para aclarar mis ideas y familiarizarme con las estructuras y modalidades.
Mil disculpas y GRACIAS de todos modos... intentaré seguir buscando, pero creo que he agotado mis cartuchos disponibles... Voy a dejarlo y truncar mi solución... Qué pena por esta vez...
Pero la pregunta sigue en pie... me parece que la respuesta debe ser de una facilidad infantil... y que debe estar a la vista. Debe ser la presión.
Saludos.
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Eriic,
¡Muchas GRACIAS...!
Pero no entiendo nada en absoluto.
Creo que quiero jugar en un terreno que no es el mío...
les agradezco su preocupación y voy a abandonar este foro.
Ustedes son demasiado técnicos para mí.

¡GRACIAS IGUALMENTE POR SU ATENCIÓN Y BUENA VOLUNTAD!
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281 > BPAUD Mensajes publicados 79 Estado Miembro
 
He cometido algunos errores... muy involuntarios, te lo aseguro, que debieron irritaros a los tres.
Pero no, para nada. No te preocupes, si todos fueran como tú, todo iría muy bien ;-)

Dicho esto, la solución propuesta por michel_m a las 17:52 funciona muy bien y está adaptada a tu libro (que no tenía cuando hice mi respuesta).
Prueba en su libro y verás que está bien. Haz clic derecho en la pestaña feuil2 y 'visualizar el código' para ver. Y también tienes un procedimiento en el módulo 1

eric
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Buenas noches...
¿Existe una instrucción de macro simple para:
Una vez que se ha hecho un "select" en una celda,
desplazarse N filas y M columnas y realizar un nuevo "select"
Los parámetros N y M figuran en celdas en la hoja
????
Si encuentro eso creo que resolveré mi problema a mi nivel de competencia.
Gracias de nuevo
B.
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281 > BPAUD Mensajes publicados 79 Estado Miembro
 
sí, tienes .offset(fila,col) que recalcula tu referencia.
Si fila = 0: misma fila, si fila > 0: desplazamiento hacia abajo de fila líneas, si fila < 0 desplazamiento hacia arriba.
Si col = 0: misma columna, col > 0: a la derecha, col < 0: a la izquierda.
Por supuesto, el offset debe mantenerse dentro de los límites de la hoja.
Ej:
Range("B2").offset(1,2).select selecciona la celda D3
o
Activecell.offset(0,3).value = "toto" coloca toto en la 3ª celda a la derecha de la celda activa, misma fila.

eric
0
Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
 
Hola BPAUD,

Si quieres ayuda, sigue tu discusión y como nuestro amigo michel_m te lo pidió, publica en el foro un ejemplo de tu problema.

https://www.cjoint.com/

Somos tres miembros en ofrecerte nuestra ayuda, entre ellos eriic y michel_m, muy activos y apreciados en el foro, a quienes saludo de paso. Así que haz un esfuerzo o marca tu estado como resuelto si ya no nos necesitas, con un pequeño gracias, siempre se agradece.

¡Hasta luego!
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Hola de nuevo,
No dejo caer a nadie y agradezco su ayuda !!!
Pero o no entiendo, o me he explicado mal.... en cualquier caso, todavía no funciona.
Efectivamente me tuve que ausentar unas horas, pero antes de eso, envié (o al menos intenté enviar) un pequeño ejemplo....
Gracias por su ayuda, la necesito con urgencia !

B.
0
michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
 
OK, BPAUD para intentar ayudarte, pero cierra las otras solicitudes planteadas en otras secciones de este foro:
es innecesario;
poco elegante (¿no confías en las personas de esta sección?);
reduce la eficacia de las ayudas...

Michel
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Visiblemente no entiendo cómo funciona la distribución de las secciones....
Intento no contaminar, pero evidentemente he fallado.
Trataré de mejorar.
He intentado reenviar el archivo solicitado
https://www.cjoint.com/?flq3Y2JORC
renuevo aquí.
¡LO SIENTO!
Me estoy esforzando....
0
BPAUD Mensajes publicados 79 Estado Miembro
 
0
michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
 
propuesta adjunta

https://www.cjoint.com/?flrYrfh8UA

para ver el código principal, haz clic derecho en la pestaña hoja 2 y ver el código

validación de los cambios o nueva referencia en módulo1 del VBE

Michel

Edit:
1/ ¡eliminar las fórmulas de hoja1!

2/ mejora de la validación de una creación o modificación

Sub validar()
Sheets(1).Cells(lig, 2) = Range("C7")
Sheets(1).Cells(lig, 3) = Range("D7")
Sheets(1).Cells(lig, 4) = Range("E7")
Sheets(1).Cells(lig, 5) = Range("F7")
MsgBox " actualización realizada en la base de datos"

End Sub

¡Marca en el foro de programación que la discusión de tu problema tiene lugar en el foro de ofimática!
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Gracias Michel...
Salvo que debo ser o nulo o demasiado cansado...
No funciona: Tengo un mensaje de error que dice "Error de ejecución 1004"
Gracias de todas formas
Hasta luego
0
BPAUD
 
Buenas noches Michel,
No sé si te acuerdas de mí...
Hace algún tiempo tenía varios problemas...
Entre ellos, la actualización de una base de datos desde una pantalla de entrada que tú habías resuelto, me parecía.
Desde entonces, he tratado de resolver mis otros problemas y creía que estaba por el buen camino...
Por lo tanto, retomo tu ejemplo para ponerlo en práctica y ahí, mala suerte:
1- parece que a pesar de tu declaración: ""lig = .Range("B4:B1000").Find(Target).Row"" no puedo registrar ningún dato más allá de 9
2- trato de entender cómo adaptar y, en particular, agregar campos adicionales a la entrada y no funciona (sin embargo, he añadido Range("G7")=... al código intentando respetar la sintaxis que habías aplicado...
Range("D7") = .Cells(lig, 3)
Range("E7") = .Cells(lig, 4)
Range("F7") = .Cells(lig, 5)
Range("G7") = .Cells(lig, 6)

He intentado volver a enviar el archivo:

http://www.cijoint.fr/cjlink.php?file=cj200806/cijfU3AIKM.xls

¡Estoy perdido!
¡Gracias!
0
Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
 
Hola,

Me he divertido haciéndote unas pequeñas macros para que puedas entenderlas.

Por supuesto, es posible escribirlas de manera diferente y sobre todo más condensadas, pero es un buen enfoque.

Si pones tu zona de búsqueda en la misma hoja, aquí tienes lo que puede dar.

Clic derecho en la pestaña de la hoja 1 para ver el código asociado al botón y en el BVA las macros con las explicaciones en cada línea después del apóstrofe '

https://www.cjoint.com/?flxrMpJIoJ

¡Hasta luego!
_________________________________________________________________________

Estabas buscando ayuda. Los miembros del foro, de forma voluntaria, estaban a tu lado. Te agradeceríamos que nos dijeras si tu problema está resuelto. Para clasificar la
Solicitud.
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Mike ¡Gracias!
He echado un vistazo...
supongo que tendré que encontrar mi felicidad...
pero lo veré en detalle más tarde... estoy demasiado cansado... solo dos horas de sueño anoche...
Renuncié por mi hija... ¡demasiado tarde!
Lo intentaré de nuevo más tarde para tratar de estar menos C... la próxima vez
De todos modos, ¡GRACIAS a TODOS!
0
BPAUD Mensajes publicados 79 Estado Miembro
 
https://www.cjoint.com/?fnaWqqSXJX

Buenas noches Eric,
parece que el Offset en el contenido de la celda no funciona...
He intentado descomponerlo en fases sucesivas para intentar entender... pero ???
Bernard
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
En tu ejemplo, tus datos de desplazamiento están en A2 y A3 y pones
Range("A1").Offset([E10], [E11]).Select que están vacíos...

y añade .value, es más limpio
Range("A1").Offset([A2].value, [A3].value).Select

eric
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Hola,
He intentado...
Pero la macro sigue pegando el valor en A1... como si el Offset estuviera ignorado.
¡Hasta luego!
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola,

porque lo intentaste mal....
Es la última línea de tu macro la que hay que corregir.

Por otro lado, comenzaste a limpiar las líneas innecesarias (scrolling...) generadas por el grabador de macros.
Está bien, pero hay que ir aún más lejos.
El grabador pega un montón de .select innecesarios que pesan el código, dificultan la lectura y además ralentizan considerablemente.
Además, el copiado/pegado generado por la macro puede ser sustituido ventajosamente fijando directamente el valor de la celda.
Te he añadido 2 ejemplos que hacen exactamente lo mismo que tu código.
El segundo no devuelve los valores de offset en la hoja1, es innecesario a menos que consideres importante que sea visible aquí.
http://www.cijoint.fr/cjlink.php?file=cj200805/cijwgYBKjp.xls

Buena continuación y sobre todo no te desanimes, incluso después de 5 años siempre aprenderás algo nuevo sobre Excel.
eric
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Eric
¡Gracias por tu ayuda!
¡Tu "test2" es estupendo!
Ahora ... pregunta c...
¿cómo hago para crear un botón en mi 'verdadera hoja' y adjuntar una macro inspirada en tu propuesta?
¡Lo siento ... hay que empezar desde cero!!! (;-)))))
¡Hasta luego, voy a cortar el césped y vuelvo ... parece que va a llover esta tarde!
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Escribes tu macro y luego menú 'vista / barras de herramientas... / formularios'.
Haz clic en el control 'Botón',
lo dibujas en tu hoja con un clic/arrastre,
asignas el botón a tu macro, validas
y editas el texto que aparece en el botón.
0
BPAUD Mensajes publicados 79 Estado Miembro
 
Eric,
Perdona...
Casi se me olvida....
Tengo tres problemas más antes de poder jugar...
PB 1
¿Es posible sortear la aparente imposibilidad de validar un dato (elegir de una tabla) listado fuera de la hoja activa?
De hecho, creí que estaba haciendo lo correcto y agrupe todas mis tablas en una única pestaña (una hoja), lo que me permite asegurar un mantenimiento simple y centralizado, pero la limitación mencionada me obliga a copiar (con enlace, por supuesto) todas las tablas que necesito en la hoja de 'trabajo'...

PB2
A menudo uso las funciones 'BuscarV' y 'BuscarH', que son muy prácticas para traer información de una hoja a otra... Sin embargo, esto tiene una limitación aparente: solo puedo traer un dato!
Supongamos que en una hoja2, solicito traer información sobre una clave de búsqueda.
Así, por ejemplo, quiero traer LA LISTA de coches de AAA-Pierre.
BuscarV apunta a la primera ocurrencia encontrada en la zona de búsqueda y me trae la información de esa línea... Punto.
Sé que en interactivo el filtro automático da respuesta, pero no es el objetivo...

PB3
Utilizo criterios en tablas que a veces están vinculados en 'filialidad', podríamos decir que hay listas y sublistas.
¿Cómo hago para que, cuando selecciono el criterio de nivel 1 (en este ejemplo, la Marca del coche), la selección del criterio de nivel 2 (modelo) solo me presente en la lista a elegir las opciones válidas en filialidad...?

Sí... puede que sea mucho tema en un solo mensaje...
No debe estar en la normativa eso, imagino....
¿Qué debo hacer?
¿Abro tres nuevos temas?
¿O... esto está bien así?
Adjunto el archivo de ejemplo...

http://www.cijoint.fr/cjlink.php?file=cj200805/cijpS7j9ES.xls


Atentamente
Bernard
0
chtilou Mensajes publicados 1704 Estado Miembro 523 > BPAUD Mensajes publicados 79 Estado Miembro
 
Hola,

PB3
Uso criterios en tabla que a veces están relacionados en 'filiación', podríamos decir que hay listas y sublistas.
¿Cómo puedo hacer para que cuando elijo el criterio de nivel 1 (en este ejemplo, la Marca de coche), la selección del criterio de nivel 2 (modelo) solo me presente en la lista de opciones las elecciones válidas por filiación...?


Hay que nombrar el grupo de celdas (nivel 2) con el nombre de la marca (nivel 1).
Por ejemplo:
selecciona las marcas y luego nombra el grupo "marca"
selecciona los modelos y luego nombra el grupo "mercedes" (la ortografía debe ser exactamente la misma que la del grupo "marca".

En la celda A1 "validación de datos" "lista" =marca

en B1 "validación de datos" "lista" =INDIRECTO(A1)
0
BPAUD Mensajes publicados 79 Estado Miembro > chtilou Mensajes publicados 1704 Estado Miembro
 
Hola Chtilou,
Bien recibido pero no satisfactorio:
En el momento de la escritura, las « marcas » aún no son conocidas, los « modelos » tampoco, de hecho.
Esto es informado por el usuario en la inicialización... y mantenido (ampliado, por ejemplo) con el tiempo.
Es por eso que estoy creando la hoja de enlaces « Marcas » - « Modelos » que también se enriquece con el tiempo.
Creo que la solución, si existe, probablemente deba basarse en esta tabla... más que en las áreas de tablas base...
Pero miraré tu sugerencia con interés y especialmente investigaré el aspecto « indirecto ».
¡Gracias de todos modos!
Bernard
0
BPAUD Mensajes publicados 79 Estado Miembro > chtilou Mensajes publicados 1704 Estado Miembro
 
Re...
Creo que si resuelvo el problema 2...
Debo poder extraer interactivamente las parejas y así crear listas "filiales" sobre las que debo poder basarme...
Bernard
0
chtilou Mensajes publicados 1704 Estado Miembro 523 > BPAUD Mensajes publicados 79 Estado Miembro
 
Hola Bpaud,

PB2 Así que, por ejemplo, quiero traer LA LISTA de los coches de AAA-Pierre...

Aquí hay una técnica que responde a tu solicitud, pero exige que la matriz esté ordenada alfabéticamente.

http://www.cijoint.fr/cjlink.php?file=cj200805/cijndXNOhh.xls
0