Saltar al contenido

Copiar valores de celdas para pegarlos en otra página


Recommended Posts

Buenas tardes.

Tengo una macro hecha para que copie los datos de una hoja y los pegue en otra. (nombrehoja1 es una variable que recibe el nombre de la hoja en la que se desea copiar los valores) Adjunto el código:

Sub Copiar()
Sheets(nombrehoja1).Range("G25").Copy
Sheets("Hoja administrador2").Range("A2").PasteSpecial xlValues
Application.CutCopyMode = False
Sheets(nombrehoja1).Range("G42").Copy
Sheets("Hoja administrador2").Range("A3").PasteSpecial xlValues
Application.CutCopyMode = False
Sheets(nombrehoja1).Range("G59").Copy
Sheets("Hoja administrador2").Range("A4").PasteSpecial xlValues
Application.CutCopyMode = False
Sheets(nombrehoja1).Range("G76").Copy
Sheets("Hoja administrador2").Range("A5").PasteSpecial xlValues
Application.CutCopyMode = False
End Sub

Pero tengo dos problemas.

El primero es que no es muy eficiente este código, ya que más adelante me gustaría copiar más datos y tendría muchas líneas de código y, a parte, cuando ejecuto la macro puedo ver los valores que va copiando. Es decir, estoy en la hoja A, y en esa hoja tengo la macro. Al activarla veo cómo copia los valores de nombrehoja1 (aun estando en la hoja A). Espero explicarme.

Entonces me gustaría saber cómo puedo realizar copias de valores de celdas disjuntas (solo valores, no fórmulas) y pegarlas en otra hoja de manera eficiente y sin que me salga ese error.

Gracias de antemano.

Enlace a comentario
Compartir con otras webs

En 27/6/2021 at 22:30 , JSDJSD dijo:

Prueba el adjunto y comenta

Private Sub CommandButton1_Click()
    Hoja1.Range("G25,G42,G59,G76").Copy _
    Hoja2.Cells(Rows.Count, "a").End(xlUp).Offset(1)
End Sub

 

GIF.gif

Prueba 1.xlsm 20.71 kB · 1 descarga

Perdona por no responder antes, no había podido pasarme por el foro.

Me ha servido, muchas gracias ^^

Enlace a comentario
Compartir con otras webs

Prueba con esto, que es independiente del los datos que tengas (he visto que hay datos cada 17 filas). Es decir recoge los datos que haya cada 17 filas y luego los copia seguido en la otra hoja. Deja de recoger datos cuando ya no hay nada en la n*17 fila. Te adjunto fichero que funciona con ese código incluido. Veras que solo hay en numero de datos que tu indicas, pero si añades más 17 filas más abajo también te lo copiará.

Sub Copiar()
    Dim datos As String
    Dim contador As Integer
    Application.ScreenUpdating = False
    Sheets("nombrehoja1").Select
    Range("G25").Select
    cont = 0
    datos = ""
    Do While ActiveCell.Offset(cont * 17, 0) <> ""
        datos = datos & ActiveCell.Offset(cont * 17, 0).FormulaR1C1 & "-"
        cont = cont + 1
    Loop
    contenido = Split(datos, "-")
    Sheets("Hoja administrador2").Select
    Range("A2").Select
    For i = 0 To cont - 1
        ActiveCell.Offset(i, 0).FormulaR1C1 = contenido(i)
    Next i

End sub

copia datos.xlsm

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 98 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • La que te muestra en el video es la que yo modifiqué, pero es indiferente prueba lo que te indica Antoni en la que el te mando o en la modificada la cuestión es seguir el paso a paso para ver donde esta el error para que no te funcione tanto una como la otra.
    • La macro del video es la de JSDJSD, que igualmente funciona sin problemas. La mía la puedes descargar de mi primera respuesta.
    • Me puse a observar la macro del video y no es igual a la macro que usted me envió sera que me puede enviar nuevamente por favor.    Esta fue la que usted me envio: Sub ResumenMensual() Dim Hoja As String, Acumulado(5, 6) As Double Application.ScreenUpdating = False With Sheets("RESUMEN MENSUAL")    For x = 12 To .Range("D" & Rows.Count).End(xlUp).Row Step 6       '--       'Borramos Acumuladomulados semanales       For f = 1 To 5          For c = 1 To 6             Acumulado(f, c) = 0          Next       Next       '--       'Por cada hoja de la semana       For y = .Range("F" & x) To .Range("H" & x)          Hoja = Replace(y, "/", "-")          '--          'Acumuladomulamos cada día de la semana si existe          If ExisteHoja(Hoja) Then             f = 0: c = 0             For fila = 14 To 18                f = f + 1                c = 0                For columna = 4 To 14 Step 2                   c = c + 1                   Acumulado(f, c) = Acumulado(f, c) + Sheets(Hoja).Cells(fila, columna)                Next             Next             '--             'Actualizamos RESUMEN             For f = 1 To 5                For c = 1 To 6                   .Cells(x + f - 1, c + 11) = Acumulado(f, c)                Next             Next             '--          End If       Next    Next End With End Sub Private Function ExisteHoja(Hoja As String) As Boolean 'Función para comprobar si existe la hoja a Acumuladomular With Sheets("RESUMEN MENSUAL")    For Each h In Sheets       If h.Name = Hoja Then          ExisteHoja = True          Exit Function       End If    Next End With End Function    
    • ¿No estarás intentando ejecutar la macro desde la hoja SERVICIOS?, porqué el botón RESUMEN MENSUAL no tiene ninguna macro asignada. En cualquier caso puedes seguir la maco paso a paso,  
    • Mil gracias por tu gran ayuda, Dios te siga bendiciendo con mas conocimiento
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.