Coller sur la dernière ligne

Résolu/Fermé
Gayoutte85 Messages postés 2 Date d'inscription mardi 5 janvier 2016 Statut Membre Dernière intervention 6 janvier 2016 - 5 janv. 2016 à 21:16
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 6 janv. 2016 à 08:28
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 réponses

Bonjour
Voila la modife
Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp)(2).PasteSpecial xlPasteValues
Application.CutCopyMode = False

A+
Maurice
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
5 janv. 2016 à 22:13
Bonjour,

Pour que ta macro fasse ce que tu souhaites, il y a plusieurs modifications à faire :
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.Rows 'Il peut y avoir plusieurs lignes de modifiées..
If r <> "" Then 'Si colonne H différente de guillemets
'alors on copie la ligne entière de cette cellule
r.EntireRow.Copy
' on active la feuille1 et on sélectionne la dernière ligne de la feuille1
  'on colle à l'endroit séléctionné
With Sheets("Feuil1")
    .Paste .Rows(.Cells(Rows.Count, 1).End(xlUp).Row + 1)
End With
End If
Next r

'
End Sub
0
Gayoutte85 Messages postés 2 Date d'inscription mardi 5 janvier 2016 Statut Membre Dernière intervention 6 janvier 2016
6 janv. 2016 à 00:03
Merci Maurice et gbinforme!

Non seulement, vous répondez vite, mais surtout vos solutions fonctionnent!

La solution de Maurice corrige LA ligne qui plantait et répond parfaitement à mon problème.

La macro de gbinforme est tout aussi fonctionnelle.
La plus value, c'est les corrections apportées sur les autres lignes.
Merci beaucoup, car ça me montre comment on simplifie et assainit du code tout en le gardant compréhensible.

A l'essai, le résultat ne diffère pas entre les 2 solutions.

Merci beaucoup,vous me faites progresser!


Si d'autres novices comme moi utilisent ces commandes...
ce code teste un "non-vide" dans la colonne A de la feuille 1 pour trouver LA dernière ligne où coller.
Dans notre cas, j'avais une source (feuiile 2) avec la colonne A vide.

Aussi, même si tout celà se déclenche tout seul et est un module,
répéter des modifs dans la source (colonne H de la feuille 2), ne fera qu'écraser la ligne créée dans la feuille de destination.
=> ça amenera toujours une contenant la source, donc avec la cellule A vide.

Celà permet - par la suite- la création d'un message ou boite de dialogue, pour forcer l'utilisateur à remplir la cellule A fraichement créée...

En tout cas Encore MERCI!
Je posterai des solutions à mon tour assez rapidement (à ce rythme de progression grâce à vous.)

Topette!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
6 janv. 2016 à 08:28
bonjour,

A l'essai, le résultat ne diffère pas entre les 2 solutions.
Tu n'as pas tout à fait tout vu :
- pour LA ligne, la solution de Maurice copie les valeurs alors qu'avec ce que j'ai mis tu copies aussi les formats : à toi de choisir ce que tu veux.
- les autres modifications que je t'ai fait dans ton code font que "si plusieurs lignes de modifiées" tu copies les lignes modifiées alors que ton code copie plusieurs fois la première ligne.

Ce sont des nuances à bien intégrer lorsque l'on commence pour créer du code correspondant précisément au résultat recherché.
0