XL 2019 Méthode PasteSpecial de la classe range à échoué

thespeedy20

XLDnaute Occasionnel
Bonjour à tous,

Lors d'un transfert de lignes d'un fichier vers un autre fichier j'ai une erreur de ce type , tous ce passe bien si dans le second fichier, je n'efface pas les données du tableau....

Merci pour votre aide

OLi


VB:
Sub testcopier()

'Fichier source
derlig = Workbooks("Convertion données pour registre_2023.xlsm").Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
Workbooks("Convertion données pour registre_2023.xlsm").Worksheets("Feuil1").Range("A2:L" & derlig).Copy

'Fichier cible

derlig2 = Workbooks("Extraction registre 2022.xlsm").Worksheets("BD").Cells(Rows.Count, 1).End(xlUp).Row
Workbooks("Extraction registre 2022.xlsm").Worksheets("BD").Range([A2], Cells(derlig2, 13)).ClearContents
Workbooks("Extraction registre 2022.xlsm").Worksheets("BD").Range("Tableau1").Delete


Workbooks("Extraction registre 2022.xlsm").Worksheets("BD").Range("A2").End(xlDown).PasteSpecial Paste:=xlPasteAllUsingSourceTheme




End Sub
 
Solution
Bonjour

Test ok sur mon fichier de test
2 classeurs ouverts non enregistrés
1 tableau structuré sur la feuille 1 du classeur 2
des données à copier sur la feuille 1 du classeur 1
la macro est dans le classeur 1
VB:
Sub test_V_ok()
Dim F As Worksheet, r As Range
'la macro est dans le classeur 1
'Les données à copier sur le feuille 1
Set F = ThisWorkbook.Sheets(1)
Set r = F.Range(F.Cells(2, 1), F.Cells(Rows.Count, "L").End(3))
'le classeur 2 est ouvert dans Excel
'et il y un tableau structuré et un seul
'sur la feuille 1 du classeur 2
Application.ScreenUpdating = False
    With Workbooks("Classeur2").Sheets(1)
        With .ListObjects(1).DataBodyRange
        .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete 'on supprime...

Staple1600

XLDnaute Barbatruc
Re

J'essaierai ainsi
VB:
Sub testcopier_II()
Dim wBKa As Workbook, wBKb As Workbook, F As Worksheet
'Fichier source
Set wBKa = Workbooks("Convertion données pour registre_2023.xlsm")
derlig = wBKa.Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
wBKa.Sheets("Feuil1").Range("A2:L" & derlig).Copy
'Fichier cible
Set wBKb = Workbooks("Extraction registre 2022.xlsm")
Set F = wBKb.Worksheets("BD")
derlig2 = F.Cells(Rows.Count, 1).End(xlUp).Row
wBKb.F.Range(F.[A2], F.Cells(derlig2, 13)).ClearContents
wBKb.F.Range("Tableau1").Delete
wBKb.F.Cells(Rows.Count, 1).End(3)(2).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
End Sub
 

thespeedy20

XLDnaute Occasionnel
Bonsoir Staple1600,

Je viens d'essayer ton code, merci . mais j'ai une erreur à partir des 3 dernières lignes :

VB:
wBKb.F.Range(F.[A2], F.Cells(derlig2, 13)).ClearContents
wBKb.F.Range("Tableau1").Delete
wBKb.F.Cells(Rows.Count, 1).End(3)(2).PasteSpecial Paste:=xlPasteAllUsingSourceTheme

erreur : propriété ou méthode non gérée par cet objet... 😔
 

Staple1600

XLDnaute Barbatruc
Re

Et comme ceci?
VB:
Sub testcopier_II()
Dim wBKa As Workbook, wBKb As Workbook, F As Worksheet
'Fichier source
Set wBKa = Workbooks("Convertion données pour registre_2023.xlsm")
derlig = wBKa.Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
wBKa.Sheets("Feuil1").Range("A2:L" & derlig).Copy
'Fichier cible
Set wBKb = Workbooks("Extraction registre 2022.xlsm")
Set F = wBKb.Worksheets("BD")
derlig2 = F.Cells(Rows.Count, 1).End(xlUp).Row
F.Range(F.[A2], F.Cells(derlig2, 13)).ClearContents
F.Range("Tableau1").Delete
F.Cells(Rows.Count, 1).End(3)(2).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

test ok chez moi
(avec deux classeurs ouverts non enregistrés
Je te laisse faire les adaptations par rapport à ton code d'origine.
VB:
Sub test()
Dim wKa As Workbook, wKb As Workbook
Set wKa = ThisWorkbook
Set wKb = Workbooks("Classeur3")
Set F = wKa.Sheets(1)
Application.ScreenUpdating = False
F.Range(F.Cells(2, 1), F.Cells(Rows.Count, "L").End(3)).Copy
wKb.Activate
Sheets(1).Cells(Rows.Count, 1).End(3)(2).Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme
Application.CutCopyMode = False
wKa.Activate
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Dans mon code de test, nulle part je ne parle de Tableau1
Tu vois ce mot "Tableau1" écrit quelque part dans le code du message#9 , ;)

J'ai écrit que ce n'était qu'un code de test
Et qu'il te fallait l'adapter

En relisant le fil, si la recopie doit se faire dans un tableau structuré alors il faut un autre code pour la partie collage des données
Mais là, il est tard il est temps d'aller au dodo. ;)
 

Staple1600

XLDnaute Barbatruc
Bonjour

Test ok sur mon fichier de test
2 classeurs ouverts non enregistrés
1 tableau structuré sur la feuille 1 du classeur 2
des données à copier sur la feuille 1 du classeur 1
la macro est dans le classeur 1
VB:
Sub test_V_ok()
Dim F As Worksheet, r As Range
'la macro est dans le classeur 1
'Les données à copier sur le feuille 1
Set F = ThisWorkbook.Sheets(1)
Set r = F.Range(F.Cells(2, 1), F.Cells(Rows.Count, "L").End(3))
'le classeur 2 est ouvert dans Excel
'et il y un tableau structuré et un seul
'sur la feuille 1 du classeur 2
Application.ScreenUpdating = False
    With Workbooks("Classeur2").Sheets(1)
        With .ListObjects(1).DataBodyRange
        .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete 'on supprime les lignes du tableau existant
        .Cells(.Rows.Count, 1).Offset(1).Resize(r.Rows.Count, 12).Value = r.Value
        End With
        .ListObjects(1).ListRows(1).Delete
    End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Et la même en version "light"
VB:
Sub test_VI_ok_light()
Dim F As Worksheet, r As Range, o As Range
Set F = ThisWorkbook.Sheets(1): Set r = F.Range(F.Cells(2, 1), F.Cells(Rows.Count, "L").End(3))
Set o = Workbooks("Classeur2").Sheets(1).ListObjects(1).DataBodyRange
Application.ScreenUpdating = 0
o.Offset(1).Resize(o.Rows.Count - 1, o.Columns.Count).Rows.Delete
o.Cells(o.Rows.Count, 1).Offset(1).Resize(r.Rows.Count, 12).Value = r.Value
Workbooks("Classeur2").Sheets(1).ListObjects(1).ListRows(1).Delete
End Sub
 

thespeedy20

XLDnaute Occasionnel
Bonjour Staple1600, le Forum,

Ton code fonctionne nickel, j'ai juste un petit problème de format dans deux colonnes du tableau , je dois avoir des hh.mm et ici c'est du texte...

J'ai essaye de rajouter .Columns("F:G").NumberFormat = "hh.mm" à ton code mais rien n'y fait...

OLi
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 133
Membres
112 667
dernier inscrit
foyoman