Bonjour,
Je vous explique mon probleme.
J'ai un userform dans mon classeur principale que je vais appeler "classeur1", lorsque je le lance, je clique sur un bouton qui appelle une sous procedure. Cette sous procedure me permet d'aller ouvrir un fichier PRN qui s'ouvre avec Excel (les donnees sont sur une colonne, comme lorsque l'on ouvre un fichier texte), nous appelerons ce classeur, "classeur2".
Mon but est tout simple mais je ne comprends pas pourquoi ca ne marche pas. Je souhaite copier la colonne du classeur2 pour la coller dans mon classeur initial qui est le classeur1.
Voici mon code pour la sous procedure:
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 Private Sub CommandButton3_Click() Dim classeur2 As Variant, classeur1 As Object Set classeur1 = Workbooks("classeur principal.xlsm") classeur2 = Application.GetOpenFilename("All file (*.*),*.*") If classeur2 <> False Then Workbooks.Open Filename:=classeur2 Columns("A:A").Select Selection.Copy classeur1.Activate Worksheets("Sheet4").Range("A1").Select Selection.Paste End If End Sub
J'obtiens un message d'erreur qui est le suivant et qui surligne Worksheets("Sheet4").Range("A1").Select:
Run-time error '1004':
Select method of Range class failed
(pour la suite je vais simplement ecrire le code entre "If" et "End If" pour que ce soit moins long)
Je me suis dit, peut etre que cela ne selection pas le bon classeur, donc je vais essayer ce code pour voir si ca me renvoie bien dans mon classeur principal:
Et la c'est tres etrange car, au lancement de ma procedure, si dans mon classeur1 j'etais deja sur le sheet4, alors j'ai ma MsgBox qui apparait et me dit: "classeur1.xlsmSheet4$1:$1048576"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 If classeur2 <> False Then Workbooks.Open Filename:=classeur2 Columns("A:A").Select Selection.Copy classeur1.Activate Worksheets("Sheet4").Range("A1").Select MsgBox ActiveWorkbook.Name & ActiveSheet.Name & Cells.Address End If
Mais si je suis sur un autre sheet dans mon classeur1 quand je lance ma procedure, j'obtiens :
Run-time error '1004':
Select method of Range class failed
Encore etrange, je me suis dit, je vais faire pas a pas, donc j'ecris
Et la, peut importe dans quel sheet je suis au depart, ca marche, la MsgBox me remet bien le message!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 If classeur2 <> False Then Workbooks.Open Filename:=classeur2 Columns("A:A").Select Selection.Copy classeur1.Activate Worksheets("Sheet4").Select Range("A1").Select MsgBox ActiveWorkbook.Name & ActiveSheet.Name & Cells.Address End If
Et donc, comme ca marche, je tente de replacer mon "Selection.Paste":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 If classeur2 <> False Then Workbooks.Open Filename:=classeur2 Columns("A:A").Select Selection.Copy classeur1.Activate Worksheets("Sheet4").Select Range("A1").Select Selection.Paste End If
Et la, malheureusement j'ai le message d'erreur suivant:
Run-time error '438':
Object doesn't support this property or method
J'ai donc 2 questions:
1) pourquoi est ce que je dois faire pas a pas pour ne pas avoir l'erreur 1004?
2) pourquoi mon Selection.Paste me donne l'erreur 438?
Voila, je pense avoir tout dit sur mon probleme!
Merci beaucoup pour votre aide!
vanhoa
Partager