Copie de données à partir d'un classeur fermé

Bonsoir,

J'ai trouvé plusieurs exemples sur le forum de copie de donnée d'un classeur sur un autre et malgré cela je n'arrive pas encore à trouver une façon propre et élégante de faire ce qui semble être tout simple.

1. chaque année, j'ai un classeur qui est archivé avec son nom original + l'année de clôture ex: xxxx yyyy 2014.abcd dans un repertoire qui a le nom du fichier xxxx yyyy.

2. le classeur actif xxxx yyyy.abcd contient une feuille cachée aaaaa dans laquelle sont enregistrées des données récurrents que j'utilise chaque année. ex: nom, prénom, date de naissance, ... parmi d'autres infos qui changent tout au long de l'année d'une feuille à l'autre. ex: heure, coût, ....

3. cette feuille cachée aaaaa existe dans chaque classeur et est protégée et déprotégée par appel à une macro.

4. Ce que j'essaye de faire, c'est de copier une partie [ .range( CB60..CB73) et .range(CB246..CB327) ] de la feuille archivée à la feuille active.

  • J'ai commencé par la fonction de sélection du fichier archivé.
  • Une fois le fichier sélectionné, la macro doit lire et copier les info dans ces plages puis aller les coller dans la feuille cachée du dosiier actif.

Je joints le code que j'ai écrit en me basant sur plusieurs exemples mais malheureusement cela plante.

Sub Importer_Dn()

Const RD As String = "RawData"

Const SH As String = "Aaaaaaaaa.xls"

Dim InputFile As Workbook

Dim OutputFile As Workbook

Dim Inputpath As String

Dim Outputpath As String

Dim Fichier_traité As String

folderPath = Application.ActiveWorkbook.Path

myPath = Application.ActiveWorkbook.FullName

Application.Dialogs(xlDialogOpen).Show

If ActiveWorkbook.Name = ThisWorkbook.Name Then

MsgBox ("Aucun fichier n'a été sélectionné, la macro est interrompue")

Exit Sub

Else

Fichier_traité = ActiveWorkbook.Name

MsgBox ("Le fichier choisi se nomme : " & Fichier_traité)

Set InputFile = Workbooks.Open("Fichier_traité")

Set OutputFile = Active.Workbooks.Open()

Déprotéger_la_Feuille

ActiveSheet.Range("CB60:CB73").Value = Worksheets(SH).Range("CB60:CB73")

ActiveSheet.Range("CB246:CB327").Value = Worksheets(SH).Range("CB246:CB327")

' Copier ce que j’ai choisi de l’ InputFile:

InputFile.ActiveSheets().Activate

InputFile.ActiveSheets().Range("CB36:CB73").Copy

' Coller ce qui a été copié sur la feuille active:

OutputFile.ActiveSheets().Activate

OutputFile.ActiveSheets().Range("CB36:CB73").PasteSpecialOutputFile.Save

InputFile.ActiveSheets().Activate

InputFile.ActiveSheets().Range("CB246:CB327").Copy

OutputFile.ActiveSheets().Activate

OutputFile.ActiveSheets().Range("CB246:CB327").PasteSpecialOutputFile.Save

'Fermer InputFile & OutputFile:

InputFile.Close

OutputFile.Close

Protéger_la_Feuille

End If

End Sub

Hello !

A quel niveau ça plante ? C'est une erreur de syntaxe, ou la macro ne fait pas ce que tu souhaites ?

Et à quoi correspond

Set OutputFile = Active.Workbooks.Open()

Sinon, à moins que ta feuille ne s'appelle "aaaaaaa.xls", il faut que tu redéfinisse ta variable "SH" par le nom effectif de ta feuille ("Feuil1" ou autre)

Essaie de modifier le début par ça

Sub Importer_Dn()

Const RD As String = "RawData"
Dim InputFile As Workbook
Dim OutputFile As Workbook
Dim Inputpath As String
Dim Outputpath As String

folderPath = Application.ActiveWorkbook.Path
myPath = Application.ActiveWorkbook.FullName

Set OutputFile = ThisWorkbook

Application.Dialogs(xlDialogOpen).Show
If ActiveWorkbook.Name = ThisWorkbook.Name Then
MsgBox ("Aucun fichier n'a été sélectionné, la macro est interrompue")
Exit Sub
Else
Set InputFile = ActiveWorkbook
MsgBox ("Le fichier choisi se nomme : " & InputFile.Name)

EDIT : En fait, y'a tellement de "ActiveWorkbook" et de "Activesheet" que je sais plus lequel est la source et lequel est la destination.

Donc évite les activeworkbook et les activeworksheet, à la limite utilise le en début de code pour attribuer le classeur à une variable (WB1 ou autre). Le second classeur tu le fous en variable via le code d'ouverture.

Bref, essaie ça : (où wb1 est le fichier source, F1 la feuille source; wb2 fichier destination, F2 feuille destination)

Sub Importer_Dn()

Const RD As String = "RawData"
Const SH As String = "Aaaaaaaaa.xls"
Dim Inputpath As String
Dim Outputpath As String

Set wb1 = ThisWorkbook
Set F1 = wb1.Worksheets("Feuil1")

folderPath = Application.ActiveWorkbook.Path
myPath = Application.ActiveWorkbook.FullName

TheFile = Application.GetOpenFilename("Classeurs Excel(*.*),*.*")
Set wb2 = Workbooks.Open(TheFile)
Set F2 = wb2.Worksheets("Feuil2")

If wb2.Name = wb1.Name Then
MsgBox ("Aucun fichier n'a été sélectionné, la macro est interrompue")
Exit Sub
Else
MsgBox ("Le fichier choisi se nomme : " & wb2.Name)

Déprotéger_la_Feuille
F1.Range("CB60:CB73").Value = F2.Range("CB60:CB73")
F1.Range("CB246:CB327").Value = F2.Range("CB246:CB327")

' Copier ce que j’ai choisi de l’ InputFile:
F2.Range("CB36:CB73").Copy

' Coller ce qui a été copié sur la feuille active:
F1.Range("CB36:CB73").PasteSpecialOutputFile.Save

F2.Range("CB246:CB327").Copy
F1.Range("CB246:CB327").PasteSpecialOutputFile.Save

'Fermer InputFile & OutputFile:
wb1.Close
wb2.Close

Protéger_la_Feuille

End If
End Sub

Bonjour SoumZoum,

Merci beaucoup pour tes remarques. Je dois avouer qu'à partir d'un certain moment et à force de faire des tests qui n'aboutissent pas, on commence par faire n'importe quoi!!!

J'ai créé un fichier source et un fichier cible pour le test.

Lorsque j'execute la macro, je recois un message d'erreur d’exécution 438 à la ligne:

F1.Range("K1:K30").PasteSpecialOutputFile.Save

J'ai une autre question pour cette macro dans mon fichier réel:

La feuille qui contient les informations à copier de mon fichier source est cachée et protégée par mot de passe, la cible aussi.

Comment dois-je procéder pour insérer mes codes afin de déprotéger et rendre visible momentanément mes feuilles lors du traitement?

Cordiales Salutations

Complètement d'accord ! Sur des petits codes parfois il vaut mieux "reprendre à zero"

Joins-nous tes fichiers qu'on puisse voir ça en live.

Pour la 438, je pense que c'est le OutpuFile qui bug, si tu as récupéré le code que je t'ai donné, il me semble que c'est wb1. Idem pour Inputfile.

Pour les lock/unlock, tu unlock à l'ouverture du fichier (ou execution de la macro pour l'un d'eux), et tu lock à la fermeture.

Le problème est devenu très clair après une pose café!!!

C'était une erreur de syntaxe

Encore une fois merci

Rechercher des sujets similaires à "copie donnees partir classeur ferme"