Bonjour,

je suis débutant en prog VBA, j'ai fais une macro permettant de transférer des colonnes d'un 1er classeur vers un second qui se crée instantanément. Plusieurs erreurs sont survenues, erreur 9 puis 13 incompatibilité de type. Le problème vient surement dans l'identification des classeurs et des feuilles mais je suis perdu.

Je n'arrive pas à trouver l'erreur dans le code, il y a surement quelques chose que je ne saisi pas encore.
le débogage indique la ligne suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Set ws_source = wb_source.Sheets(nom_onglet)
Voici le code

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub Transfert()
'
' Transfert Macro
'
' Touche de raccourci du clavier: Ctrl+t
 
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim source As Excel.Worksheet
Set source = ActiveSheet
Dim nom_onglet As String
nom_onglet = ActiveSheet.Name
Dim nom_target As String
nom_target = nom_onglet & ".xls"
Dim nom_source As String
nom_source = nom_onglet & ".csv"
Dim wk_source As Workbooks
Dim wk_target As Workbooks
Dim ws_source As Worksheets
Dim ws_target As Worksheets
Dim cell_source_1er As Range
Dim cell_source_der As Range
Dim cell_target As Range
 
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 1)
xlApp.SheetsInNewWorkbook = 1
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'On donne un nom au classeur
xlBook.SaveAs Filename:=nom_target
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = nom_onglet
'On remet la propriété de l'application à 3 (par défaut)
xlApp.SheetsInNewWorkbook = 3
 
Set wb_source = Workbooks(nom_source)
Set ws_source = wb_source.Sheets(nom_onglet)
Set cell_source_1er = ws_source.Range("A1")
Set cell_source_der = cell_source_1er.End(xlDown)
Set wb_target = Workbooks(nom_target)
Set ws_target = wb_target.Sheets(nom_onglet)
Set cell_target = ws_target.Range("A1")
 
ws_source.Range(cell_source_1er, cell_source_der).Copy cell_target
 
End Sub
Merci d'avance