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