Copier/coller entre 2 classeurs

Fermé
vanhoa - Modifié par vanhoa le 26/12/2013 à 03:34
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 26 déc. 2013 à 08:49
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:


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:



    
    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
    



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"

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


    
    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 la, peut importe dans quel sheet je suis au depart, ca marche, la MsgBox me remet bien le message!!!

Et donc, comme ca marche, je tente de replacer mon "Selection.Paste":


    
    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


A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 déc. 2013 à 08:49
Bonjour,

Tu ne définis pas la feuille source


tu copies une colonne ( A)donc tu colles aussi sur une colonne (et non A1)

au passage: les select-selection, copy-paste sont à éviter au maximum en VBA
1