Bonjour à tous,

L'erreur "1004: Erreur définie par l'application ou par l'objet" se déclenche ou pas selon que la syntaxe "Range("A1:B1").copy" ou "Range(Cells(1,1), Cells(2,1)).copy" est déclenchée depuis la feuille de destination ou la feuille de copie des données

Le besoin est de coller sur Feuil1 une plage de données issue de Feuil2,
de sélectionner une plage de données de taille variable sur Feuil2,
de déclencher le code lorsque Feuil1 est active (idéalement depuis worksheet_change)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub CollerSurFeuil1()
 
 Dim dernierecolonne As Integer
 Dim derniereligne As Integer
 
 dernierecolonne = Sheets("Feuil2").Range("D22").SpecialCells(xlCellTypeLastCell).Column
 derniereligne = Sheets("Feuil2").Range("D22").End(xlDown).Row
 
 ' les 2 lignes ci-dessous déclenchent une erreur si exécutées depuis Feuil1 mais ok depuis Feuil2
 ' Sheets("Feuil2").Range(Cells(21, 4), Cells(derniereligne, dernierecolonne)).Copy
 ' Sheets("Feuil2").Range(Cells(21, 4), Cells(31, 10)).Copy
 
 ' La ligne ci-dessous ne déclenche pas d'erreur quand exécutée depuis Feuil1 ou Feuil2
  Sheets("Feuil2").Range("D21:J31").Copy
 
 ' Idem ligne ci-dessus, pas d'erreur pour les lignes suivantes
 ' plage = "D21" & ":" & "J" & derniereligne
 ' Sheets("Feuil2").Range(plage).Copy
 
 
 Sheets("Feuil2").Range("B27").PasteSpecial Paste:=xlPasteValues
 
End Sub

Pourquoi la syntaxe Range+Cells ne peut pas être utilisée depuis la feuille de destination (Feuil1 dans l'exemple) alors que Range() est ok ?

Je précise que le problème est le même si le code est exécuté depuis un module ou un événement (ex: worksheet_change, ce que je souhaite faire en l’occurrence)
Autre précision, le problème est le même si par exemple .address est utilisé à la place de .copy. Je pense donc donc que ce n'est pas .copy qui pose problème
De plus, je souhaite vraiment utiliser Range+Cells car je sélectionne une plage de données de taille variable, et cette syntaxe le permet facilement
Peut-être qu'il y a une autre syntaxe qui permet de sélectionner une plage de données de taille variable, et dans ce cas je serai content de la connaitre, mais j'avoue qu'avant tout j'aimerais bien comprendre ce qui ne fonctionne pas dans ce code. Je crois que ça me permettrait d'avancer!

Merci d'avance pour votre aide
Et pour l'aide précieuse de ce forum en général!
C'est mon premier post