web-dev-qa-db-fra.com

Copier et coller des données à l'aide du code VBA

J'ai un bouton sur une feuille de calcul qui, lorsqu'il est enfoncé, devrait permettre à l'utilisateur d'ouvrir un fichier, puis de copier les colonnes A à G de la feuille de calcul "Données", puis de coller les données de ces colonnes sur la feuille en cours.

J'ai une erreur logique dans le code; il s'exécute, mais il colle la sélection au mauvais endroit.

J'ai du mal à référencer les deux classeurs.

Voici mon code:

Sub Button1_Click()
    Dim Excel As Excel.Application
    Dim wb As Excel.Workbook
    Dim sht As Excel.Worksheet
    Dim f As Object

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    f.Show

    Set Excel = CreateObject("Excel.Application")
    Set wb = Excel.Workbooks.Open(f.SelectedItems(1))
    Set sht = wb.Worksheets("Data")

    sht.Activate
    sht.Columns("A:G").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste

    wb.Close
End Sub
13
spookymodem

Utilisez la méthode PasteSpecial:

sht.Columns("A:G").Copy
Range("A1").PasteSpecial Paste:=xlPasteValues

MAIS votre gros problème est que vous changez votre ActiveSheet en "Data" et ne le changez pas en arrière. Vous n'avez pas besoin de faire l'activation et la sélection, selon mon code (cela suppose que votre bouton se trouve sur la feuille sur laquelle vous souhaitez copier).

21
Lance Roberts

"Donc, d'après cette discussion, je pense que cela devrait être le code alors.

Sub Button1_Click()
    Dim Excel As Excel.Application
    Dim wb As Excel.Workbook
    Dim sht As Excel.Worksheet
    Dim f As Object

    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    f.Show

    Set Excel = CreateObject("Excel.Application")
    Set wb = Excel.Workbooks.Open(f.SelectedItems(1))
    Set sht = wb.Worksheets("Data")

    sht.Activate
    sht.Columns("A:G").Copy
    Range("A1").PasteSpecial Paste:=xlPasteValues


    wb.Close
End Sub

"Faites-moi savoir si cela est correct ou si une étape a été manquée. THX.

1
D1g1t4Lnrg