Macro copia celdas con una condición‏

Estimado Dante, la cuestión es la siguiente: tengo un libro llamado "base", con varias hojas, desde la hoja "detalle" quiero hacer una macro que si en la hoja "curso", Celda A1 dice "estudiante" copie las celdas B1, C5 y D9 de dicha hoja (o sea hoja "curso") y las pegue en las Celdas F9, F12 y S3 respectivamente de la hoja "detalle"  y que si alguno de los destinos esta ocupado lo haga en la celda inmediata inferior y si esta ocupado a su vez en la siguiente inferior. Que además si la Celda A1 está vacia o con otro texto diferente de "estudiante" no haga nada (o sea no copie ni pegue).  Desde ya te agradezco y valoro tu ayuda.

1 Respuesta

Respuesta
1

Veo que esta consulta no ha recibido respuesta así que te envío mi aporte. Si ya la tenés resuelta no olvides valorarla de todos modos atento a que dediqué tiempo a desarrollarte la macro para resolverla.

Como mencionas que debe ser ejecutada desde la hoja Detalles, entiendo que allí colocarás un botón o la ejecutarás en algún evento. Por ahora la macro va en un módulo y luego la llamás con:

Call pasaDatos

Sub pasaDatos()
'x Elsamatilde
'se ejecuta desde hoja Detalles
Sheets("detalle").Select
'si contenido de A1 en hoja Curso <> texto cancela
If Sheets("curso").Range("A1") <> "estudiante" Then Exit Sub
'pasa datos a hoja detalle
ActiveSheet.Range("F9") = Sheets("curso").Range("B1")
ActiveSheet.Range("F12") = Sheets("curso").Range("C5")
ActiveSheet.Range("S13") = Sheets("curso").Range("D9")
End Sub

Lo que aún no está contemplada es la parte de tu solicitud:

'---Si alguno de los destinos esta ocupado lo haga en la celda inmediata inferior...'

Aclara un poco más porque si un dato va en F9 y otro en F12, en algun momento estando ocupado F9 si sigo bajando me toparé con F12... quizás quieras reveer o explicar un poco más esta parte. Mejor deja una imagen de tu hoja Detalles con algo de datos.

Gracias Elsa por tu respuesta, el tema lo pude resolver con un aporte anterior de Dante y algunas visitas en la Web. No se si es correcto que puedas aportarme algo mas, me ocurre que tengo el siguiente tramo de una macro

  Sheets("beca50").Select
Range("n43").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Detalle").Select
Range("q23").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
filalibre = ActiveCell.Row
ActiveSheet.Paste

Quiero modificarlo para que en caso que la Celda Q23 de destino esté ocupada no ejecute esta parte de la macro o que solo pegue

en la misma si dicha celda esta desocupada.  Desde ya te agradezco tu aporte y tiempo. Gustavo

Reconozco algunas instrucciones... como el uso de la variable 'filalibre' ;)

Esa parte del código te quedará así entonces:

Sheets("beca50").Select
Range("N43").Copy
Sheets("Detalle").Select
If Range("Q23") = "" Then
     Range("Q23").Select
     ActiveSheet.Paste
End If

Observa que no es necesario seleccionar cada celda antes de copiarla... te evitas muchas líneas copiando directamente como la de N43.

PD) Tenés más opciones para valorar no solo 'Buena respuesta'.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas