Copier le contenu d'une feuille dans un classeur fermé

Résolu/Fermé
muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017 - Modifié le 13 nov. 2017 à 15:49
muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017 - 17 nov. 2017 à 16:31
Bonjour,

pour copier le contenu de la feuille d'un des classeurs actifs dans un classeur fermé j'ai utilisé ce code trouvé sur le net et celà marchait très bien jusqu'au moment j'ai lié le classeur en tant que Data base dans power pivot . Lors de la compilation une erreur se produit et je ne comprends pas ce que l'aide me dit , l'erreur dit " Run-time error '1004': PasteSpecial method of range class failed"

Merci d'avance pour votre aide
mon code ci dessous

Workbooks.Open Filename:="C:\Daily_report\COD_Metrics\WorkDataFinal.xlsx"
Windows("WorkDataFinal.xlsx").Activate

Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Windows("WorkDataFinal.xlsx").Close savechanges:=True
Application.DisplayAlerts = False
WDte.Close savechanges:=True
Kill ("C:\Daily_report\COD_Metrics\Bookdata.xlsx")


A voir également:

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
13 nov. 2017 à 17:14
Bonjour,

1) ce code est incomplet
2) il n'écrit pas dans un classeur fermé
3) utiliser Activate et Select est une mauvaise méthode
4) le second pastespecial est inutile
5) au lieu de travailler sur toutes les cellules il est préférable de se limite à la plage utilisée (usedrange)
6) plutôt que pastespecial values, utiliser range.value = range.value
1
muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017
14 nov. 2017 à 09:30
Bonjour Patrice,
Merci j'ai essayé de modifier d'après vos conseils et ça marche sans problème. Je mets au cas où le code après modif et si il y a encore des améliorations dites le moi svp et je le ferai. Si la modif peut aider d'autres, voci le code



WDte.Activate
ActiveSheet.UsedRange.Select
Selection.Copy

Workbooks.Open Filename:="C:\Daily_report\COD_Metrics\WorkDataFinal.xlsx"
Windows("WorkDataFinal.xlsx").Activate


ActiveSheet.UsedRange.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("WorkDataFinal.xlsx").Close savechanges:=True
Application.DisplayAlerts = False
WDte.Close savechanges:=True
Kill ("C:\Daily_report\COD_Metrics\Bookdata.xlsx")



Merci beaucoup
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776 > muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017
Modifié le 14 nov. 2017 à 14:00
Il faut éviter d'utiliser Activate et Select :
' Il est inutile d'activer le classaur WDte
'    WDte.Activate
    
' Déclarations (à placer de préférence en tête de procédure)
Dim wbk As Workbook
Dim org As Range
Dim dst As Range
    
  ' Ouvrir le fichier destination
  Set wbk = Workbooks.Open(Filename:= "C:\Daily_report\COD_Metrics\WorkDataFinal.xlsx")
  ' Définir la plage de destination utilisée
  Set dst = wbk.Worksheets(1).UsedRange
  ' Effacer les données pré-existantes
  dst.ClearContents
  ' Définir la plage origine des données
  Set org = WDte.ActiveSheet.UsedRange
  ' Redéfinir la taille de plage de destination (même que org)
  Set dst = dst.Resize(org.Rows.Count, org.Columns.Count)
  ' Copier les données
  dst.Value = org.Value
  ' Fermer le fichier destination (avec sauvegarde)
  wbk.Close savechanges:=True
    
' Suite du code (sans rapport avec la copie) .........
    WDte.Close savechanges:=True
    Kill ("C:\Daily_report\COD_Metrics\Bookdata.xlsx")
0
muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017
Modifié le 15 nov. 2017 à 14:25
Bonjour Patrice,
d'accord c'est compris. Merci beaucoup.
Par contre lors de l'enregistrement ça ouvre une boite de dialogue et crée plutôt une copie du fichier appelé au lieu de faire juste une sauvegarde.

Pouvez-vous m'aider?

Merci d'avance
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
15 nov. 2017 à 15:15
Le fichier n'est-il pas en lecture seule ?
0
muiigisha Messages postés 61 Date d'inscription lundi 25 septembre 2017 Statut Membre Dernière intervention 6 décembre 2017 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
16 nov. 2017 à 11:09
Bonjour Patrice,
j'ai regardé mais c'est le dossier (dans lequel est le fichier) qui s'entête à être en lecture seule.
0