Copier ligne à dernière ligne d'une feuille (avec variable)

Bonjour,

Je bloque de nouveau sur un petit problème. J'essaye de rechercher si une cellule de la colonne J de la feuille "Tableau" = "No match", je copie ensuite la ligne de la colonne "A" jusqu'à "K" pour venir la coller dans la dernière ligne de la feuille "No Match teliway".

L'erreur se produit à : ActiveSelection.Paste

L'erreur est : Erreur d'exécution 424: Objet requis

1. Les variables sont-elles bien déclarées?

Il ne me semble avoir aucune erreur concernant celle ci, elles prennent bien une valeur une fois la macro lancée

2. Les plages/sélecteurs existent-elles?

La feuille "No Match teliway" existe bel et bien, la colonne/ligne en A est vide et sous format standard.

Mon hypothèse: Dans le tableau des variables locales, ActiveSelection est vide, ce qui implique que la ligne précédente ne fais pas la sélection correctement. Y-aurait-il une erreur dans l'expression: Sheets("No Match teliway").Range("A" & derniereLigne).Select ?

Je reste à votre disposition pour tout renseignements éventuels,

Merci,

PS: Je suis conscient que la fonction .Select est à éviter en VBA, je ne l'ai rajouté qu'afin de bien comprendre mon souci

Sub IMPAYE_TELIWAY()
Application.ScreenUpdating = False
Dim i As Integer
Dim derniereLigne As Integer, derniereLigne2 as Integer
derniereLigne2 = 8400
derniereLigne = Cells(rows.Count, 1).End(xlUp).Row
    For i = 2 To derniereLigne2 'Dernière ligne feuille "Tableau" calculée dans macro précedente
        If Sheets("Tableau").Range("J" & i) = "No Match" Then
        Sheets("Tableau").Range("A" & i, "K" & i).Copy
        Sheets("No Match teliway").Activate
        Sheets("No Match teliway").Range("A" & derniereLigne).Select
        ActiveSelection.Paste
        derniereLigne = Cells(rows.Count, 1).End(xlUp).Row 'Dernière ligne feuille "No Match teliway" qui s'actualise à chaque ajout de ligne
        End If
    Next
End Sub

Bonjour,

Je crois surtout que ActiveSelection n'existe pas sous VBA mais c'est Selection.

Si en executant en pas à pas votre code, via F8 sur votre clavier, votre ligne est bien sélectionnée lorsque vous arrivez sur cette ligne :

Sheets("No Match teliway").Range("A" & derniereLigne).Select

Alors c'est après que ça plante, donc :

Selection.Paste

Cdlt,

Edit : A voir si il ne faut pas définir dernièreligne comme

derniereLigne = Cells(rows.Count, 1).End(xlUp).Row + 1

Car sinon vous allez toujours coller sur la même plage de ce que je comprend du code ..

Bonjour Ergotamine,
En mettant Selection.Paste, je me retrouve devant une nouvelle erreur: Erreur d'éxécution 438: Propriété ou méthode non gérée par cet objet. elle arrive exactement à la même ligne.

Il me semble donc que la sélection ou même la copie de la ligne n'est pas valide. J'ai fait en sorte de réduire les risques (ex: aucune colonne cachée, format adaptée à la valeur de la cellule ect...).

Concernant dernière ligne, effectivement, c'est un oubli de ma part, merci bien.

Bonjour,

Avec la méthode PasteSpecial (qui en valeur par défaut correspond à la même chose que Paste si je ne dis pas de bêtises) ça fonctionne donc :

Sub IMPAYE_TELIWAY()
Application.ScreenUpdating = False
Dim i As Integer
Dim derniereLigne As Integer, derniereLigne2 As Integer
derniereLigne2 = 8400
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne2 'Dernière ligne feuille "Tableau" calculée dans macro précedente
    If Sheets("Tableau").Range("J" & i) = "No Match" Then
    Sheets("Tableau").Range("A" & i, "K" & i).Copy
    Sheets("No Match teliway").Activate
    Sheets("No Match teliway").Range("A" & derniereLigne).Select
    Selection.PasteSpecial
    derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row 'Dernière ligne feuille "No Match teliway" qui s'actualise à chaque ajout de ligne
    End If
Next
End Sub

Et en "optimisé" :

Sub IMPAYE_TELIWAY()
Dim i As Integer, derniereLigne As Integer, derniereLigne2 As Integer
derniereLigne2 = 8400
For i = 2 To derniereLigne2 'Dernière ligne feuille "Tableau" calculée dans macro précedente
    derniereLigne = Worksheets("No Match teliway").Cells(Rows.Count, 1).End(xlUp).Row + 1
    If Worksheets("Tableau").Range("J" & i) = "No Match" Then Worksheets("Tableau").Range("A" & i & ":K" & i).Copy Destination:=Worksheets("No Match teliway").Range("A" & derniereLigne)
Next
End Sub

Cdlt,

Le code "optimisé" marche à merveille, je vous remercie, ce n'est pas la première fois que vous m'aidez en plus :) Je vous souhaite une très bonne journée

Rechercher des sujets similaires à "copier ligne derniere feuille variable"