Transponer automáticamente registros con macros

26/04/2010 - 19:00 por CARLOS CARNERO | Informe spam
Buenas a todos. Un saludo especial a Héctor a quien me dirijo para
solicitarte que por favor me ayudes en mi entrampamiento, ya que estoy
probando distintas variables para descifrar la siguiente sintaxis,
pero lastimosamente no logro el objetivo.

Tengo en un Excel 2007 con dos hojas protegidas y sólo algunas celdas
habilitadas que realizan esta operación: una es “Formulario” que es el
origen y la otra “tabla_detalle” que es el destino: En formulario
quiero copiar ó transponer automáticamente el rango “C4:C15” (C13 y
C14 tiene formato “dd/mm/yyyy” y “dd/mm/yyyy hh:mm” respectivamente),
con el mensaje de confirmación "¿Desea guardar los cambios?" (y luego
del mensaje de confirmación borrarlos), a la otra hoja
“tabla_detalle” B2:M2, siendo B1, C1, D1, autonuméricos, a modo que
cada vez que se registre un expediente en el formulario este se
traslade automáticamente a la otra hoja.

Sub Rectánguloredondeado_Haga_clic_en()
Dim Consultas As Byte
Consultas = Application.CountA(Range("c4"))
If Consultas = 0 Then Exit Sub
If MsgBox("¿Desea guardar los cambios?", vbYesNo, "Confirmación") vbNo _
Then Exit Sub
With Worksheets("tabla_detalle").Range("a65536").End(xlUp).Offset(1,
5)
.Resize(Consultas, 2).Value = Range("c4").Resize(Consultas).Value
.Offset(, -4).Resize(Consultas, 4).Value = Array( _
Range("C4").Value, Range("C5").Value, Range("C6").Value,
Range("C7").Value)
With .Offset(, -5).Resize(Consultas)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
End With
Range("c4:c15").Resize(Consultas).ClearContents
End Sub


Gracias,

Carlos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
27/04/2010 - 01:54 | Informe spam
hola, Carlos !

1) para la parte de la consulta donde necesitas transponer algunos datos, y luego del mensaje (similar al de tu codigo)
puedes probar con una instruccion +/- como la siguiente:

Worksheets("tabla_detalle").Range("b2:m2").Value = _
Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)

puedes (RE)aplicar los formatos de fecha antes o despues de esta instruccion

2) por lo que respecta a "dirigir" tu consulta a "persona en especial", considera que corres un riesgo...
que no obtengas propuestas de quien se sienta "excluido" de tu peticion de ayuda :-((

saludos,
hector.

__ OP __
Tengo en un Excel 2007 con dos hojas protegidas y solo algunas celdas habilitadas
que realizan esta operacion: una es “Formulario” que es el origen y la otra “tabla_detalle” que es el destino:
En formulario quiero copiar o transponer automaticamente el rango “C4:C15”
(C13 y C14 tiene formato “dd/mm/yyyy” y “dd/mm/yyyy hh:mm” respectivamente)
con el mensaje de confirmacion "Desea guardar los cambios?" (y luego del mensaje de confirmacion borrarlos)
a la otra hoja “tabla_detalle” B2:M2, siendo B1, C1, D1, autonumericos
a modo que cada vez que se registre un expediente en el formulario este se traslade automaticamente a la otra hoja.

Sub Rectanguloredondeado_Haga_clic_en()
Dim Consultas As Byte
Consultas = Application.CountA(Range("c4"))
If Consultas = 0 Then Exit Sub
If MsgBox("Desea guardar los cambios?", vbYesNo, "Confirmacion") = vbNo _
Then Exit Sub
With Worksheets("tabla_detalle").Range("a65536").End(xlUp).Offset(1, 5)
.Resize(Consultas, 2).Value = Range("c4").Resize(Consultas).Value
.Offset(, -4).Resize(Consultas, 4).Value = Array( _
Range("C4").Value, Range("C5").Value, Range("C6").Value, Range("C7").Value)
With .Offset(, -5).Resize(Consultas)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
End With
Range("c4:c15").Resize(Consultas).ClearContents
End Sub
Respuesta Responder a este mensaje
#2 CARLOS CARNERO
27/04/2010 - 17:27 | Informe spam
Hola Héctor un gusto en saludarte: Ante todo no ha sido mi intención
de excluir absolutamente a nadie, todo lo contrario admiro al capital
humano que existe en este Foro y de hecho que no expresado
correctamente mi planteamiento, a razón que en una consulta anterior
tú gentilmente me facilitaste este código para otro ejercicio, por lo
que presento las excusas del caso.
Acabo de incluir la sugerencia que me planteaste, pero me sale una
ventana de alerta que sombrea al “.Parent” y dice el mensaje, Error de
compilación: Referencia no valida o sin clasificar.
Sub Rectánguloredondeado_Haga_clic_en()
Dim Consultas As Byte
Consultas = Application.CountA(Range("c4"))
If Consultas = 0 Then Exit Sub
If MsgBox("¿Desea guardar los cambios?", vbYesNo, "Confirmación") vbNo _
Then Exit Sub
Worksheets("tabla_detalle").Range("b2:m2").Value = _

Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
End With
Range("c4:c15").Resize(Consultas).ClearContents
End Sub

En el código inicial, el tema era como seleccionar ó indicar en la
sintaxis que copie el rango de origen (“C4:C15” , siendo C13 y C14 que
tienen formato “dd/mm/yyyy” y “dd/mm/yyyy hh:mm” respectivamente), al
destino “tabla_detalle” B2:M2, luego que se vuelva aplicar esta macro
será B3:M3, luego B4:M4, sabiendo que la columna A en las celdas A1,
A2, A3, , son auto numéricos que se generan. (OJO, por error mío
consigne mal este dato en la columna).

Saludos,

Carlos
Respuesta Responder a este mensaje
#3 CARLOS CARNERO
28/04/2010 - 19:33 | Informe spam
Please...
Respuesta Responder a este mensaje
#4 Héctor Miguel
28/04/2010 - 20:40 | Informe spam
hola, Carlos ! (no hay sincronia en los "moribundos" grupos nntp y los de "web") :-((
esto es lo que ya te habia contestado (a ver si ahora si lo dejan pasar ?????)

1) lamento no haber sido claro al recpecto, pero... al decir en la propuesta anterior:
"... luego del mensaje (similar al de tu codigo)... probar con una instruccion +/- como la siguiente"
me referia a "sustituir" (no a incluir ademas de lo que ya tenias en el codgo expuesto)

ademas, al dejar intactas las instrucciones "End With" y haber eliminado sus inicios (With <objeto>...)
le rompes la estructura para poder usar dentre de esos bloques los sub-objetos o colecciones de cada "With xyz..."

2) el codigo "inicial", lo adaptaste de una consulta entre abril y mayo de 2008 ("copiar consultas y pegar en registros")
por lo que las adaptaciones que haces no siguen el criterio de resolucion de "aquella" situacion (p.e.)
=> Consultas = Application.CountA(Range("c4")) <= esta parte siempre devolvera 1 o 0 (segun si [C4] tiene algo o no)
cuando la situacion a resolver buscaba cuantas celdas en un rango tenian "algo":
=> Consultas = Application.CountA(Range("c2:c15"))

otro punto importante es conocer la estructura de datos en la hoja "tabla_detalle" y rango [B:M] p.e.
- que hay en la columna A y que hay despues de la columna M (?)
- tienes filas "preparadas" en la columna A (autonumericas) por si llegas a necesitarlas ?
- cual es el rango que se selecciona te posicionas en [B1] y pulsas: <ctrl> [shift] * (?) (la region actual)

saludos,
hector.

__ 1 __
Acabo de incluir la sugerencia que me planteaste
pero me sale una ventana de alerta que sombrea al “.Parent” y dice el mensaje
Error de compilacion: Referencia no valida o sin clasificar.
Sub Rectánguloredondeado_Haga_clic_en()
Dim Consultas As Byte
Consultas = Application.CountA(Range("c4"))
If Consultas = 0 Then Exit Sub
If MsgBox("¿Desea guardar los cambios?", vbYesNo, "Confirmación") = vbNo _
Then Exit Sub
Worksheets("tabla_detalle").Range("b2:m2").Value = _
Application.Transpose(Worksheets("formulario").Range("c4:c15").Value)
.Value = Application.Max(.Parent.Range("a:a")) + 1
End With
End With
Range("c4:c15").Resize(Consultas).ClearContents
End Sub



__ 2 __
En el codigo inicial, el tema era como seleccionar o indicar en la sintaxis
que copie el rango de origen (“C4:C15” , siendo C13 y C14 que tienen formato “dd/mm/yyyy” y “dd/mm/yyyy hh:mm” respectivamente)
al destino “tabla_detalle” B2:M2, luego que se vuelva aplicar esta macro sera B3:M3, luego B4:M4
sabiendo que la columna A en las celdas A1, A2, A3, , son auto numericos que se generan...
Respuesta Responder a este mensaje
#5 CARLOS CARNERO
29/04/2010 - 00:11 | Informe spam
Disculpa Héctor pero ahora si estoy más perdido que nunca. Veamos: En
la hoja original que es “Formulario” desde B3 a D15, tengo lo
siguiente:
A3:A15 son los títulos de los campos. N° de Incidencia
Serie Documental
Subserie_Correspondencia
Número de Documento
Empresa / Institución Remitente
* Sumario
Remitente
Destinatario
Área del Destinatario
Gerencia Destino
Fecha de la Correspondencia
Fecha de Recepción
Observaciones
B3 =tabla_detalle!A2+1, para que calcule el correlativo de cada
incidencia que se ejecutaría en esta hoja (“Formulario”)
B4:B15 Son datos que voy a ingresar y que estos son los que requiero
que se copien ó transpongan a la otra hoja destino, llamada
“tabla_detalle”. En una primera incidencia ó ejecución de esta macro,
lo registros ingresados se trasladarán a tabla_detalle!B2:M2 (más alla
de la columna M, no existe nada). En una segunda incidencia al
ejecutar la macro se trasladaran esto a tabla_detalle!B3:M3 y asi
sucesivamente. Es bueno recalcar que la columna A, con la macro que
copie del 2008, precisamente me genera un autonúmerico, siendo A2=1,
luego A3=2, A4=3, … pero esto lo hace la macro.
C4:C15 son comentario de los títulos de la columna A.

Saludos y reitero mis disculpas por ser un tanto duro de aprender.

Gracias,

Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida