Copier coller entre deux classeurs dont l'un est une variable

Bonjour,

Je souhaite copier le contenu d'une feuille d'un classeur fermé quelconque (son nom est donc variable) et le coller dans le classeur ouvert nommé Template2 (celui qui contient la macro).

J'ai utilisé un code utilisé à cette effet dans un précédent sujet mais il ne fonctionne que si le chemin et le nom du classeur source est déjà connu. Or pour répondre à mon besoin, il faudrait qu'une fenêtre s'ouvre et demande de choisir le fichier source.

J'ai essayé le code ci dessous mais la ligne : Set CS = Workbooks(nom & ".xlsx") pose problème

Sub recupererdonnees()

Dim CS As Workbook

Dim CD As Workbook

Dim OS As Worksheet

Dim OD As Worksheet

Dim DLS As Long

Dim DLD As Long

Dim nom As String

nom = GetOpenFilename("Nom fichier,*.xlsx")

Set CS = Workbooks(nom & ".xlsx")

Set CD = Workbooks("Template2.xlsm")

Set OS = CS.Worksheets("Feuil1")

Set OD = CD.Worksheets("TEST")

DLS = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row

DLD = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row

OD.Range("A1:A" & DLD).ClearContents

OS.Range("A1:A" & DLS).Copy OD.Range("A1")

End Sub

L'erreur est la suivante :

"Erreur d'exécution 9

L'indice n’appartient pas à la sélection"

Si quelqu'un sait comment résoudre le problème, je suis preneur.

3origine.xlsx (8.26 Ko)
3template2.xlsm (14.78 Ko)

Bonjour,

tu dois donner le nom du fichier seul et non le complet avec le chemin dans

Set CS = Workbooks(nom)

Il faut l'ouvrir dans ton cas puis le fermer.

Sub recupererdonnees()

Dim CS As Workbook
Dim CD As Workbook
Dim OS As Worksheet
Dim OD As Worksheet
Dim DLS As Long
Dim DLD As Long
Dim nom As Variant

nom = Application.GetOpenFilename("Nom fichier,*.xlsx")
If nom = False Then Exit Sub
Workbooks.Open (nom)
nom = ActiveWorkbook.Name

Set CS = Workbooks(nom)
Set CD = Workbooks("Template2.xlsm")
Set OS = CS.Worksheets("Feuil1")
Set OD = CD.Worksheets("TEST")
DLS = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row
DLD = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row

OD.Range("A1:A" & DLD).ClearContents
OS.Range("A1:A" & DLS).Copy OD.Range("A1")

CS.Close SaveChanges:=False

End Sub
0template2.xlsm (14.46 Ko)

Genial, un grand merci

Rechercher des sujets similaires à "copier coller entre deux classeurs variable"