Pegar en la última línea

Resuelto
Gayoutte85 Mensajes publicados 2 Fecha de registro   Estado Miembro Última intervención   -  
gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   -
Bonjour à tous, et merci pour votre disponibilité et vos réponses qui m'ont beaucoup fait progresser.

J'ai tenté d'assembler plusieurs macro (qui fonctionnaient) et de les simplifier concernant :
une condition sur une plage de cellules,
qui déclenche un copier depuis une feuille,
et coller vers la dernière ligne d'une autre feuille,
tout ça en un seul module dans ma feuille 2... (j'ai peut-être visé haut pour mon niveau)
Problème : j'ai une erreur 1004 à la fin de ma commande lorsque je viens selectionner la dernière ligne, en l'occurence l'emplacement du "coller".

J'ai beau fouiller, je n'arrive pas à solutionner le problème.
C'est peut-être juste une erreur de syntaxe?
Je vous remercie d'avance pour l'aide que vous m'apporterez.

Ci-dessous mon code (module attaché à la feuille2):

Private Sub Worksheet_Change(ByVal Target As Range)
'se déclenche quand on entre une valeur dans une cellule

Dim r As Range ' ligne
'si on entre une valeur dans une cellule n'appartenant pas à la plage H3:H500
'on arrête la macro
If Intersect(Target, [H3:H500]) Is Nothing Then Exit Sub
'si la valeur de la cellule modifiée n'est pas nulle
For Each r In Target.EntireRow.Rows 'Il peut y avoir plusieurs lignes de modifiées..
If r.Cells(1, 8) <> "" Then 'Si colonne H différente de guillemets
'alors on copie la ligne entière de cette cellule
Rows(Target.Row).Copy
' on active la feuille1 et on sélectionne la dernière ligne de la feuille1
Sheets("Feuil1").Activate
Cells(65535, 1).End(xlUp)(2).Select 'c'est cette ligne qui déconne

ActiveCell.Paste 'on colle à l'endroit séléctionné

End If
Next r

'
End Sub

J'espère que les commentaires vous permettront de comprendre facilement les étapes que j'ai tenté de réunir dans ce module.
Merci d'avance !

3 respuestas

  1. Maurice
     
    Hola
    Aquí está la modificación
     Hoja("Feuil1").Celdas(Filas.Contar, 1).Fin(xlArriba)(2).PegarEspecial xlPegarValores Modo.CortarCopiarAplicación = Falso 

    ¡Hasta luego!
    Maurice
    0
  2. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    Hola,

    Para que tu macro haga lo que deseas, hay varias modificaciones que realizar:
    Private Sub Worksheet_Change(ByVal Target As Range) 'se activa cuando se introduce un valor en una celda Dim r As Range ' fila 'si se introduce un valor en una celda que no pertenece al rango H3:H500 'se detiene la macro If Intersect(Target, [H3:H500]) Is Nothing Then Exit Sub 'si el valor de la celda modificada no es nulo For Each r In Target.Rows 'Puede haber varias filas modificadas.. If r <> "" Then 'Si la columna H es diferente de comillas 'entonces copiamos toda la fila de esta celda r.EntireRow.Copy ' activamos la hoja1 y seleccionamos la última fila de la hoja1 'pegamos en el lugar seleccionado With Sheets("Feuil1") .Paste .Rows(.Cells(Rows.Count, 1).End(xlUp).Row + 1) End With End If Next r ' End Sub 

    --
    Siempre zen
    La perfección se alcanza, no cuando ya no hay nada que agregar, sino cuando no hay nada que quitar. Antoine de Saint-Exupéry
    0
  3. Gayoutte85 Mensajes publicados 2 Fecha de registro   Estado Miembro Última intervención  
     
    ¡Gracias, Maurice y gbinforme!

    No solo responden rápidamente, ¡sino que sus soluciones funcionan!

    La solución de Maurice corrige LA línea que fallaba y responde perfectamente a mi problema.

    La macro de gbinforme también es completamente funcional.
    El valor añadido son las correcciones realizadas en las otras líneas.
    ¡Muchas gracias, porque eso me muestra cómo simplificar y limpiar el código manteniéndolo comprensible!

    Al probarlo, el resultado no difiere entre las 2 soluciones.

    ¡Muchas gracias, me están haciendo progresar!

    Si otros novatos como yo usan estos comandos...
    este código prueba un "no vacío" en la columna A de la hoja 1 para encontrar LA última línea donde pegar.
    En nuestro caso, tenía una fuente (hoja 2) con la columna A vacía.

    Además, aunque todo esto se desencadene automáticamente y sea un módulo,
    repetir modificaciones en la fuente (columna H de la hoja 2) solo sobrescribirá la línea creada en la hoja de destino.
    => esto siempre llevará a contener la fuente, por lo que la celda A estará vacía.

    Esto permite, posteriormente, la creación de un mensaje o cuadro de diálogo, para obligar al usuario a llenar la celda A recién creada...

    De todos modos, ¡gracias de nuevo!
    Publicaré soluciones yo también bastante pronto (a este ritmo de progreso gracias a ustedes).

    ¡Hasta luego!
    0
    1. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
       
      Hola,

      En la prueba, el resultado no varía entre las 2 soluciones.
      No has visto del todo:
      - Para LA línea, la solución de Maurice copia los valores, mientras que con lo que he puesto tú también copias los formatos: tú decides lo que quieres.
      - Las otras modificaciones que te hice en tu código hacen que "si varias líneas son modificadas" copies las líneas modificadas, mientras que tu código copia varias veces la primera línea.

      Son matices que hay que integrar bien cuando se comienza para crear un código que corresponda precisamente al resultado buscado.
      0