Excel - Macro para copiar y pegar registros filtrados

 
Vista:
sin imagen de perfil

Macro para copiar y pegar registros filtrados

Publicado por Daniel Benitez (3 intervenciones) el 24/06/2024 18:29:46
Hola buenas tardes:

Tengo la sig. situación, asocie una Macro a un botón, el cual al dar clic copia y pega información de una tabla que tiene filtros (generado previo por una segmentación de datos), el código funciona pero me genera 2 problemas:

1. Al copiar hacia la nueva ubicación, lo hace con todo y los títulos de los campos, lo cual no debería porque el cuadro donde se copia la información ya cuenta con los títulos.

2. Al dar un nuevo clic en el botón debería copiar un nuevo registro de información en la fila inmediata vacía de abajo, pero no lo hace.

Código:

Sub Copiar()
'
' Copia la seleccion de los filtros
' Acceso directo: CTRL+f
'
Dim Mensaje As Integer
Dim Registros As Range

Mensaje = MsgBox("¿Pegar registro?", vbQuestion + vbYesNo, "Confirmar")

If Mensaje = vbNo Then Exit Sub

Range("N12:U12").Select
Selection.Copy
Range("N13").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("N12:U12").Select
Selection.ClearContents

Range("E43").Select
ActiveWindow.SmallScroll Down:=17
Range("B70:I70").Select
ActiveSheet.AutoFilter.Range.Copy
ActiveWindow.SmallScroll Down:=-17
Range("N11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub

De antemano muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para copiar y pegar registros filtrados

Publicado por Antoni Masana (2540 intervenciones) el 25/06/2024 22:43:16
Mejor subes el libro para ver lo que hace.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para copiar y pegar registros filtrados

Publicado por Nolberto (128 intervenciones) el 26/06/2024 00:01:45
Puedes cambiar esto:
Selection.Copy
Por esto para copiar solo celdas visibles del rango seleccionado:
Selection.SpecialCells(xlCellTypeVisible).Copy

Aclarar que seleccionar y copiar rangos es sumamente ineficiente, lo mejor seria hacer todo el procesamiento de los datos en memoria.

En la mayoría de los casos es mas rápido recorrer datos en memoria, es decir, convertir un rango en una matriz de datos y recorrer esa matriz.

Este ejemplo puede ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub recorre()
    Dim uf, j As Long
    Dim data() As Variant
 
    uf = Hoja1.Cells(Rows.Count, 1).End(xlUp).Row
    data = Hoja1.Range("A2:C" & uf).Value
 
    For i = 1 To UBound(data)
        If data(i, 2) = 9007 Then
            j = 1
            Hoja1.Cells(i + 1, 4).Value = j
        Else
            j = Hoja1.Cells(i, 4).Value
            Hoja1.Cells(i + 1, 4).Value = j + 1
        End If
    Next i
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para copiar y pegar registros filtrados

Publicado por Daniel (3 intervenciones) el 26/06/2024 06:59:17
Hola, copie el codigo y trate de usarlo pero no me quedo claro que hace, ya que me marca un error, aun asi agradezco la respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

<a href="#" class="google-anno" style="border: 0px !important; box-shadow: none !important;

Publicado por Nolberto (128 intervenciones) el 29/06/2024 05:42:02
El código no es especifico para tu caso particular, es un ejemplo de como se puede procesar la información desde la memoria en lugar de hacerlo directamente en las celdas, hacerlo en la memoria es abismalmente mas rápido.

Lo que hace es poner todos los datos en el rango A2:C hasta la ultima fila con datos, pone eso en la variable data y luego se procesa en memoria dentro del ciclo for, si ese mismo procesamiento se hace directo en las celdas como tu ejemplo, seria enormemente mas lento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar